1. 개요
Datadog은 SaaS 모니터링 솔루션으로 정말 많은 기능들이 포함되어 있다.
Dashboards를 만들 수도 있고, Monitoring 설정을 할 수도 있고 APM을 사용하여 Application 분석을 수행할 수도 있다.
그 중 Events 기능이 있는데,
일련의 Messages 들을 모아놓은 Record라고 생각하면 된다.
Kubernetes에서 발생하는 Events들은 물론 그 외에 RDS Events 등이 포함될 수 있다.
아래는 Datadog Events 예시이다. Kubernetes에서 발생하는 이벤트들, Amazon Lambda 혹은 SNS, MongoDB 등 여러가지가 Source가 될 수 있다.
만약 이러한 Events들 중 특정 Content가 포함이 될 경우 알람을 받고 싶다면 어떻게 수행하면 될까?
2. 목적
필자는 AWS DMS(Database Migration Service)에서 발생하는 Failed Event에 대해 알람을 받고 싶었다. 이러한 동작을 AWS 측에서 수행할 수도 있지만 Datadog에서는 어떻게 수행할 수 있을까?
우선 AWS에서 어떻게 알람을 받을 수 있을지 생각해보자.
DMS에서도 RDS와 마찬가지고 Events들이 존재한다.
Events들은 말 그대로 DMS에서 발생한 이벤트들이고,
Event Subscriptions은 Events들을 구독할 대상을 설정하는 것이다.
그럼, 이 Event 구독을 SNS로 설정하고, SNS에서는 Lambda로 보내어, Slack Webhook으로 Message를 보내면 간단하게 내가 원하는 포매팅으로 알람을 송신할 수 있게 될 것이다.
혹은 AWS Chatbot을 사용할 수도 있을 것 같은데, 직접 써보진 않아서 이 부분은 잘 모르겠다.
근데 이러한 과정이 결국에는 Slack Webhook 채널로 Message를 보내는 로직을 결국 코드를 짜야하기 때문에 번거로운 과정이 될 수 있다.
그럼 Datadog에서 Events 기반으로 알람을 보낼 수 있으면 좀 간단하지 않을까 라는 생각을 할 수 있다.
하지만 RDS Integration을 설정하면 RDS에서 발생하는 Events들이 자동으로 Datadog Events에 쌓이는데 반해 DMS Integration을 설정하면 DMS에서 발생한느 Events들이 자동으로 쌓이지 않는다.
고로 다음의 과정이 필요하다.
DMS Events -> SNS -> SNS 구독을 HTTP로 설정하고 Datadog Event Stream 채널로 보낸다.
3. 설정하기
설정하는 방법은 정말 간단하다.
1. AWS DMS -> Event Subscription에 들어간 뒤, 기 생성한 SNS Topic으로 Target을 설정한다.
Event Source로는 Failure 이벤트 카테고리에 대해서만 발송하도록 설정한다.
2. SNS Topic 구독으로 Datadog Webhook 채널로 Endpoint를 설정한다.
3. Events - Amazon SNS에 실패한 DMS Task 내역들이 보이게 된다.
이제, 이 Events 기반으로 Slack으로 알람을 보내도록 설정하면 되겠다.
4. Datadog Monitors에 들어가서 아래의 설정을 진행한다.
[1] Define the search query
Source : amazon_sns , message 중 dms가 포함된 이벤트들을 쿼리로 구별해낸다.
[2] Alert Conditions
이 부분이 중요한데, 1번 이상 Alert가 발생하면 알람이 발생하도록 설정해준다.
또한, Evaluation Options에 0 Seconds를 기다리도록 설정해준다. 왜냐하면 Event는 1회성으로 울리게 되는데 이는 메트릭과 다르다.
메트릭은 n분 동안의 수치에 대해 평가를 해야 하지만 Event는 순간 점으로 찍히기 때문에 0 Seconds로 설정하지 않으면 평가가 Alert Conditions에서 평가가 진행되지 않는다.
[3] Notify your team
{{is_alert}} 는 조건문이라고 생각하면 된다.
참고 : https://docs.datadoghq.com/monitors/notify/variables/?tabs=is_alert#conditional-variables
Events에서 발생하는 알람은 Recovery 알람을 받고 싶지 않았기 때문에 is_alert 변수를 통해 오직 Trigger가 발생할 때만 알람을 받도록 설정하였다.
'Log,Monitorings' 카테고리의 다른 글
[EKS] 아주 가벼운 Loki + Grafana + Promtail 로그 시스템 구성 (2) | 2022.10.31 |
---|---|
[Datadog] EKS에서 운영중인 SpringBoot HikarpCP 모니터링 (Auto Discovery) (0) | 2022.09.09 |
[Elasticsearch] Nginx 로그 Fluentd를 통해 Elasticsearch로 보내기 (0) | 2021.12.20 |
[Fluentd] 로그 수집 패턴, Fluentd 개념 정리 (0) | 2021.12.18 |
[ElasticSearch] ElasticSearch 개념 알아보기 (0) | 2021.11.11 |