ECS-ElasticWatch-OpenSearch
계기
사내 서비스에서 로그를 확인할 때 elasticWatch로 확인하고 있었다.
특정 로그를 확인하기 위해 검색을 하면 find 하는 시간이 상당 시간이 걸린다.
로그 인사이트로 확인을 하면 조회가 빨리 되지만 쿼리를 짜기 위해 로그 인사이트 쿼리를 공부해야 한다.
이러한 점들에서 디버깅하는데 시간이 오래걸리고 트래킹 추척이 비효율적이라서 AWS OpenSearch service를 도입하기로 했다.
과정
OpenSearch 도메인 생성
-> ElasticWatch 로그 그룹 선택
-> 구독 필터 선택
-> Opensearch 선택
-> 로그 형식 취향에 맞게 선택후 패턴 지정하고 스트리밍 시작
알아야 될 사항
Lambda 로 OpenSearch에 로그를 넣어주기 때문에 역할(IAM) 생성 필요
생성한 역할 ARN 을 OpenSearch 생성된 URL에 들어가 Roles에 mapping을 시켜줘야 된다.
OpenSearch 클러스터 상태, 인덱스를 확인 하기 위해선 현재 유저의 ARN 도 Roles에 mapping 시켜줘야 된다.
FLOW
ECS -> Elastic Watch 로 로그 을 쌓는다는 가정하에 flow를 작성하고 있습니다.
1. OpenSearch Service 생성
- 배포 유형
서비스에서 쌓이는 로그들을 파악하여 Deployment type을 선택해준다.
- 데이터 노드
테스트 용
가용 영역은 1-AZ를 선택
인스턴스 유형은 t3.medium 선택
노드수는 1개로 지정
- 네트워크
퍼블릭 액세스 선택
- 세분화된 액세스 제어
마스터 사용자 생성
- 액세스 정책
세분화된 액세스 제어만 사용
- 고급 클러스터 설정
둘 다 default 값 지정
언급 안 한 부분들은 서비스에 맞게 선택하면 될 것 같다.
본인은 선택을 안 하고 생성하였다.
OpenSearch를 생성하는데 10분 이상의 시간이 소요된다.
2. Lambda에 지정할 역할 IAM 생성
1. 역할 선택 후 역할 만들기!
2. 신뢰할 수 있는 엔터티 선택
다음!
3. 권한 정책
lambdaFull
CloudWatchlogsFull
OpenSearchFull
을 선택해줬다.
4. 역할 생성!
3. CloudWatch 로그 그룹 선택 후 Opensearch 구독 필터 생성
- 대상 선택
생성한 OpenSearch 선택
- 역할 선택
생성한 lambda 역할 선택
- 로그 형식 및 필터 구성
공백으로 선택
필터 패턴 원하는 로그 구조에 맞게 구성
패턴 테스트로 확인하면서 로그 구조를 구성하면 된다.
- 스트리밍 시작
4. OpenSearch URL로 접속하여 Roles 세팅
- 좌측에 Security 클릭
- 좌측에 Roles 클릭
- all_access 선택
- Mapped users 클릭
- Manage mapping 클릭
- Users
AWS 해당 유저 계정의 사용자 ARN 입력
AWS OpenSearch Service 화면 상에서 클러스터 상태, 인덱스 확인을 위해 권한 부여
- Backend roles
lambda에 지정한 역할 ARN 입력
cloudWatch 구독 필터 생성 시 lambda에 의해 로그가 OpenSearch에 write 되기 때문에 권한 부여
세팅이 완료되면 로그도 잘 쌓이고 AWS OpenSearch Service에서 클러스터 상태, 인덱스 확인이 가능하다.!