[Alertmanager] 알람 주기 설정하기 - repeat_interval, group_interval

괭이밥·어제
0

Monitoring

목록 보기
3/3

📌 Alertmanager에서 interval

공식 문서: https://prometheus.io/docs/alerting/latest/configuration/#route

Alertmanager 설정 파일에서 알람 반복 주기를 설정할 수 있다.

yaml 설정 파일에서 route 아래에 group_interval, repeat_interval이 알람 반복 주기 설정이며, group_by, group_wait을 통해 알람을 묶어서 보낼 수 있다.

각 설정은 어떤 역할을 하는지 알아보자.

group_by

Alertmanager에서 여러 알람을 특정 라벨 기준으로 group으로 묶어서 관리한다.

그 기준이 되는 것이 바로 group_by 설정이다.

아래와 같이 설정했다고 가정하자.

group_by: [app]

그렇다면 app=front 라벨을 가진 알람은 하나의 그룹으로 묶이고, app=back 라벨을 가진 알람은 다른 그룹으로 묶여 관리된다.

defualt 설정은 빈 리스트로, 따로 group을 구분하지 않는다.

개인적인 추측으로, prometheus에서 rule 파일을 작성할 때 groups로 시작하는 것을 볼 수 있는데, 이를 하나의 기본 group으로 묶고 alertmanager에서 group_by 설정으로 기본 그룹에서 세분화하여 나누는 것으로 보인다.

prometheus.yml에 있는 rule 파일 내용 일부. groups로 시작하는 것을 볼 수 있다.


group_wait

알람이 발생하고, group 생성 후에 대기하는 시간이다.

예를 들어 app=front 라벨을 가진 알람 1개가 발생하였고, group_wait이 다음과 같다고 해보자.

group_by: [app]
group_wait: 1m

그렇다면 app=front 알람 그룹은 다른 알람이 발생하는지 1분동안 대기한다.

만약 1분 사이에 app=front 라벨을 가진 알람이 추가되었다면, 해당 그룹에 추가되어 같이 발송된다.

defualt 설정은 30s이다.

group_interval

알람 group에 상태 변화가 생기면 알람을 발송하는 주기이다.

상태변화는 다음 중 하나에 해당한다.

  • 알람 group에 새로운 알람 추가
  • 알람 group에 resolved된 알람 발생 (=해소 알람)

default 설정은 5m이다.

repeat_interval

알람 group에 상태 변화가 없을 때 알람을 발송하는 주기이다.

즉, 마지막 알람 시각으로 부터 알람 group에 상태변화가 있으면 gorup_interval 시간 후에 알람이 발송되고, 상태변화가 없으면 repeat_interval 시간 후에 알람이 발생된다.

예를 들어 group_interval = 10m repeat_interval=20m 이라고 가정하자.

group_by: [app]
group_wait: 1m
group_interval: 10m
repeat_interval: 20m

그렇다면 app=front 라벨을 가진 알람 group 처음 발송되고, 10분동안 대기한다.

10분(group_interval) 뒤에 해당 알람 group에 상태변화가 있는지 확인한다.

만약 추가된 알람이 있거나, 해소된 알람이 있는 등 group에 변화가 생겼다면 알람을 발송한다.

알람을 발송하고 다시 10분(group_interval) 뒤에 group 상태변화가 있는지 확인한다.

만약 알람 group이 이전과 동일하다면 다시 10분(group_interval)을 대기한다.

이 시점은 20분(repeat_interval)이 지난 시점으로, 알람을 다시 발송시킨다.

default 설정은 4h이다.



📌Alertmanager 알람 반복 내부 원리

위에서 예시로 내부 원리에 대해 짧게 설명했다.

자세하게 알아보자.

alertmanager에서는 알람 group을 group_interval 주기로 flush한다.

즉, 알람 group은 잠들어 있다가 group_interval 주기가 되면 깨어나서, 알람 group에 변화가 있는지 살펴본다.

만약 알람 group에 변화가 있다면 알람을 발송한다.

만약 알람 group에 변화가 없는데, 마지막 알람 전송 시간에서 repeat_interval 만큼 지났다면 알람을 발송시킨다.

위의 경우에 모두 해당되지 않는다면 알람 group은 다시 잠에 들고, group_interval 시간 후에 다시 깨어나 반복한다.

아래와 같이 alertmanager 설정을 하였다고 가정하자.

group_by: [app]
group_wait: 1m
group_interval: 5m
repeat_interval: 15m

알람이 처음 생기면 group_by 기준으로 그룹을 생성한다.

10:00 - 2개의 알람 발생

  • app=front 알람 발생 → 그룹 생성
  • app=back 알람 발생 → 다른 그룹 생성

이후 group_wait 기간동안 알람을 대기한다.

10:01 - 첫 번째 알람 발생

  • app=front 그룹 첫 번째 알람 발송
    • 1분 사이에 추가된 알람이 있어, 2개 알람 한번에 발송
  • app=back 그룹 첫 번째 알람 발송

10:06 - 첫 번째 알람 이후 group_interval(5m) 경과

  • app=front 그룹에서 하나의 알람 해소되어 두 번째 알람 발송
  • app=back 그룹에서 상태 변화 없으며, repeat_interval 만큼 지나지 않아 대기

10:11 - group_interval(5m) 경과

  • app=front 그룹에서 상태 변화 없으며 repeat_interval 만큼 지나지 않아 대기
  • app=back 그룹에서 상태 변화 없으며 repeat_interval 만큼 지나지 않아 대기

10:16 - group_interval(5m) 경과

  • app=front 그룹에서 상태 변화 없으며, repeat_interval 만큼 지나지 않아 대기
    • 마지막 알람 - 10:11
  • app=back 그룹에서 상태 변화 없으나 repeat_interval 시간이 되어 알람 발송
    • 마지막 알람이 10:01으로, repeat_interval인 15m이 경과하였음

10:21

  • app=front 그룹에서 상태 변화 없으나, repeat_interval 시간이 되어 알람 발송
    • 마지막 알람 - 10:11

💡 코드 살펴보기

https://github.com/prometheus/alertmanager

github에서 notify/notify.go 아래에 needsUpdate 함수에 위의 로직대로 코드가 구현되어 있는 것을 볼 수 있다.



🧐의문점) 왜 실제 알람은 두 번째repeat_interval때 올까?

실제 alertmanager를 사용하였을 때 설정한 repeat_interval 대로 오지 않는 것을 겪었다.

테스트를 통해 실제 알람이 어떻게 오는지 살펴보았다.

alertmanager 설정은 아래와 같으며, slack을 통해 알람을 수신하고 있다.

group_wait: 0s
group_interval: 4m
repeat_interval: 8m

내가 기대한 알람 주기는 8분마다 오는 것이다.

하지만 설정과 다르게 group_interval+repeat_interval 주기인 12분마다 오는 것을 볼 수 있었다.

나의 경우 group_intervalrepeat_interval의 배수라서 둘이 더한 주기만큼 알람이 수신됐다.
만약 배수가 아니라면 group_interval의 배수만큼 올 것으로 보인다.
e.g. group_intervalrepeat_interval이 각 3분, 9분이라면 예상 알람 주기는 12분일 것

아래 그림은 log 내용기반으로 그린 알람 발송 시간이며, 알람 로그 전문은 그림 아래에 첨부하였다.

코드 분석 + 구글링을 통해 열심히 알아보았지만 명확한 원인을 찾을 수 없었다.
하지만 해당 이슈에 대해 검색하였을 때 생각보다 많은 사람들이 겪은 문제이며, 내부적으로 수정해야 하지 않을까 조심스럽게 추측해본다.

해당 글에서 틀린 의견이 있다면 피드백 부탁드리겠습니다.



해당 이슈 관련하여 찾은 자료


참고 자료

profile
사람들이 움직이는게

0개의 댓글