Cloud/AWS

[Datadog] AWS integration부터 로그 수집까지

Omoknooni 2023. 4. 27. 21:28

배경

클라우드 상에 운영중인 외부 서비스의 로그 모니터링을 진행하고자 했다. 모니터링 할 대상은 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/

 

Getting Started with AWS

Datadog, the leading service for cloud-scale monitoring.

docs.datadoghq.com

 

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가지 설정을 해줘야한다

  1. WAF 로그를 AWS 내부로 수집 (Audit Logs)
  2. 수집한 로그를 DataDog로 전송 (Send Logs to Datadog)

1번은 WAF webACL을 생성하는 과정에서 logging 설정에서 완료할 수 있다.

Cloudwatch 로그그룹으로 로깅하도록 설정함

 

다음으로 수집된 로그를 Datadog으로 전송하기 위해 Forwarder 함수에 트리거를 추가해준다.

(Forwarder 함수 > 구성 > 트리거 추가)

 

Cloudwatch 로그를 트리거로 할 것이므로 'Cloudwatch Logs'

- 로그 그룹 : WAF webACL의 로깅 설정할때의 로그 그룹을 설정

- 필터 이름 : 트리거의 이름을 설정

- 필터 패턴 : 해당 로그 그룹에 쌓이는 로그들 중 일부 패턴에 대한 로그만 가져오고자 할 때에 설정

 

단, Route53과 같이 Global한 성질의 서비스의 경우, us-east-1 리전으로 취급하므로 Forwarder 함수를 us-east-1 리전에도 생성해주고 그 함수에다가 트리거를 추가해주어야 한다.

 

 

트리거가 발생되면 Forwarder 함수를 통해 datadog으로 로그를 잘 전송함을 확인할 수 있다.