배경
클라우드 상에 운영중인 외부 서비스의 로그 모니터링을 진행하고자 했다. 모니터링 할 대상은 WAF 로그, ALB 로그, DNS Query 로그가 있었고, 추가로 해외 IP 접근 이력, 관리자 페이지에 접근한 IP 등을 모니터링 해줄 것을 요청 받았다.
사실 Cloudwatch를 통해 모니터링이 가능하지만, 더 깔끔한 UI/UX와 모니터링 방법을 원하셨고, Splunk나 ELK의 구축에는 시간도 오래걸리고, 결정적으로 사내에 모니터링 인프라를 구축할 pc가 없었다.
이에 따라 로그모니터링을 위한 외부 서비스를 추천해주셨고, 그것이 바로 DataDog였다.
서비스 소개
DataDog는 on-premise환경부터 클라우드 환경의 서버까지 통합된 모니터링(로그,이벤트)을 할 수 있는 서비스로, 깔끔한 UI와 다양한 서비스들의 모니터링을 지원해준다는 큰 특징이 있다.
AWS의 모든 서비스의 로그를 확인하기 위해 integration(통합)해야하는데, AWS의 Cloudformation을 통해 자동으로 작업을 진행 가능하다
https://docs.datadoghq.com/getting_started/integrations/aws/
Datadog에 로그인 후, 좌측 메뉴에서 Integrations에서 Amazon Web Services > Install
Add New AWS Account에서 Automatically using Cloudformation으로 과정에 따라 진행해준다.
- Automatically using Cloudformation : AWS의 Cloudformation을 통해 Datadog과 연동할 IAM role, lambda 함수 등을 생성해주는 템플릿을 실행해줌
- Manually : AWS console에서 직접 IAM 계정을 생성해주는 방식으로, 제공되는 External ID를 추가해 생성해준다.
비교적 간단한 Cloudformation 방식을 이용하도록한다. 각 항목 내용은 아래와 같다.
- Select AWS Region : Cloudformation Stack이 실행될 리전을 선택, 주로 사용하는 리전을 설정해줘도 무방하다.
- Add Datadog API Key : Datadog API key를 추가해주는 부분으로, 생성한 API key를 설정해준다.
(API key 생성/관리는 Organization Settings > Access > API Keys에서) - Send AWS Logs to Datadog : AWS 서비스의 로그들을 Datadog으로 전송해주는 Datadog Forwarder Lambda 함수를 생성할 것인지를 설정하는 구간, 로그 모니터링을 할 것이므로 Yes
이후 우측 하단의 Launch Cloudformation Template로 AWS의 Cloudformation 설정 메뉴로 넘어오게 된다.
파라미터값들은 이미 값이 채워진 상태로 넘어와서 따로 손 댈 구간이 없다.
하단의 체크박스 체크 후 stack을 생성하면 datadog에서 제공한 템플릿에 맞춰 자동으로 stack이 생성된다.
stack을 실행한 리전에서 datadog-forwarder Lambda 함수의 생성도 확인할 수 있다.
이 함수를 통해서 AWS 서비스의 로그 등의 데이터를 Datadog으로 전송할 수 있는데, 전송을 하기 위해서 트리거 설정을 해주어야 한다.
Forwarder 함수가 생성되지 않은 경우 Cloudformation을 통해 직접 생성해줄 수 있다.
간단한 예시로 Cloudwatch로 쌓이는 WAF 로그를 datadog으로 전송해보자
관련 Docs : Datadog WAF integration
Docs에 따라, 로그 전송에 있어서 앞서 2가지 설정을 해줘야한다
- WAF 로그를 AWS 내부로 수집 (Audit Logs)
- 수집한 로그를 DataDog로 전송 (Send Logs to Datadog)
1번은 WAF webACL을 생성하는 과정에서 logging 설정에서 완료할 수 있다.
다음으로 수집된 로그를 Datadog으로 전송하기 위해 Forwarder 함수에 트리거를 추가해준다.
(Forwarder 함수 > 구성 > 트리거 추가)
Cloudwatch 로그를 트리거로 할 것이므로 'Cloudwatch Logs'
- 로그 그룹 : WAF webACL의 로깅 설정할때의 로그 그룹을 설정
- 필터 이름 : 트리거의 이름을 설정
- 필터 패턴 : 해당 로그 그룹에 쌓이는 로그들 중 일부 패턴에 대한 로그만 가져오고자 할 때에 설정
단, Route53과 같이 Global한 성질의 서비스의 경우, us-east-1 리전으로 취급하므로 Forwarder 함수를 us-east-1 리전에도 생성해주고 그 함수에다가 트리거를 추가해주어야 한다.
트리거가 발생되면 Forwarder 함수를 통해 datadog으로 로그를 잘 전송함을 확인할 수 있다.