Alertmanager

Alertmanager

Alertmanager는 Prometheus 서버 같은 클라이언트 애플리케이션이 보내는 알림(alert)을 처리하는 컴포넌트예요. 이메일, PagerDuty, OpsGenie 같은 수신 대상(receiver)으로 알림을 보내기 전에 중복 제거(deduplicating), 그룹화(grouping), 라우팅(routing)을 처리해요. 또 알림의 사일런스(silence)와 인히비션(inhibition)도 담당하죠.

이 문서에서는 Alertmanager가 구현하는 핵심 개념을 설명해요. 실제 설정 방법을 더 자세히 알고 싶다면 설정 문서를 참고하세요.

출처: 문서

본문

Alertmanager는 Prometheus 서버와 같은 클라이언트 애플리케이션이 보내는 알림을 처리해요. 알림을 이메일, PagerDuty, OpsGenie 같은 올바른 수신 통합으로 보내기 전에 중복 제거, 그룹화, 라우팅을 담당하죠. 또한 알림의 사일런스(silencing)와 인히비션(inhibition)도 처리합니다.

아래에서는 Alertmanager가 구현하고 있는 핵심 개념들을 설명할게요. 이를 더 자세히 활용하는 방법은 설정 문서를 참고하세요.

그룹화 (Grouping)

그룹화는 성격이 비슷한 알림을 하나의 알림으로 묶어주는 기능이에요. 대규모 장애 상황처럼 한 번에 많은 시스템이 고장 나고 수백에서 수천 개의 알림이 동시에 발생할 때 특히 유용합니다.

예시: 클러스터에서 수십, 수백 개의 서비스 인스턴스가 실행 중인데 네트워크 파티션이 발생했다고 해볼게요. 서비스 인스턴스의 절반이 더 이상 데이터베이스에 연결할 수 없게 됐어요. Prometheus의 알림 규칙은 각 서비스 인스턴스가 데이터베이스와 통신할 수 없을 때 알림을 보내도록 설정되어 있어서, 결과적으로 수백 개의 알림이 Alertmanager로 전송됩니다.

사용자 입장에서는 하나의 페이지만 받으면서도 정확히 어느 서비스 인스턴스가 영향을 받았는지는 알고 싶겠죠. 그래서 Alertmanager가 clusteralertname 라벨 기준으로 알림을 그룹화해 하나의 간결한 알림만 보내도록 설정할 수 있어요.

알림의 그룹화, 그룹화된 알림의 타이밍, 그리고 그 알림을 받을 수신 대상은 모두 설정 파일의 라우팅 트리(routing tree)로 구성됩니다.

인히비션 (Inhibition)

인히비션은 특정 알림이 이미 발생 중일 때 다른 알림의 알림 전송을 억제하는 개념이에요.

예시: 전체 클러스터에 연결할 수 없다는 알림이 발생 중이라고 해볼게요. 그 특정 알림이 발생 중이면 Alertmanager가 이 클러스터에 관한 다른 모든 알림을 음소거하도록 설정할 수 있어요. 이렇게 하면 실제 문제와 무관한 수백에서 수천 개의 발생 중인 알림이 전송되는 것을 막을 수 있습니다.

인히비션은 Alertmanager의 설정 파일을 통해 구성합니다.

사일런스 (Silences)

사일런스는 특정 시간 동안 알림을 단순히 음소거하는 가장 직관적인 방법이에요. 사일런스는 라우팅 트리처럼 매처(matcher)에 기반해 설정합니다. 들어오는 알림이 활성 사일런스의 모든 동등(equality) 또는 정규 표현식(regular expression) 매처와 일치하는지 확인하죠. 일치한다면 그 알림에 대해 알림이 전송되지 않습니다.

사일런스는 Alertmanager의 웹 인터페이스에서 설정합니다.

클라이언트 동작 (Client behavior)

Alertmanager는 클라이언트 동작에 특별한 요구사항이 있어요. 이는 Prometheus가 알림을 보내지 않는 고급 사용 사례에서만 필요합니다.

고가용성 (High Availability)

Alertmanager는 고가용성을 위한 클러스터를 구성하는 설정을 지원해요. 이는 --cluster-* 플래그로 구성할 수 있습니다.

Prometheus와 Alertmanager 사이에 로드 밸런서를 두는 대신, Prometheus가 모든 Alertmanager의 목록을 가리키도록 하는 것이 중요해요. 그렇게 해야 정상적으로 동작합니다.

알림 한도 (Alert limits, 선택 사항)

Alertmanager는 alertname당 활성 알림 수를 제한하는 설정을 지원해요. 이는 [--alerts.per-alertname-limit] 플래그로 구성할 수 있습니다.

한도에 도달하면 새 알림은 버려지고(dropped), 이미 알려진 알림의 하트비트는 처리됩니다. 알려진 알림(핑거프린트)은 새 알림을 위한 공간을 만들기 위해 자동으로 만료됩니다.

이 기능은 같은 알림의 예상치 못한 많은 인스턴스가 Alertmanager로 전송될 때 유용해요. alertname당 알림 수를 제한하면 신뢰성 문제를 예방하고 알림 수신자가 넘쳐나는 것을 막을 수 있습니다.

alertmanager_alerts_limited_total 메트릭은 alertname 한도 때문에 버려진 알림의 총 개수를 보여줘요. alert-names-in-metrics 기능 플래그를 활성화하면 메트릭에 alertname 라벨이 추가됩니다.

더 알아보기 (Learn more)