알림 템플릿
알림 템플릿 (Templates)
템플릿팅을 사용해 알림 알림 메시지를 커스터마이즈·포맷·재사용할 수 있어요. 메트릭 값, 라벨, 기타 컨텍스트 정보 같은 동적 콘텐츠를 통합해 더 유연하고 정보가 풍부한 알림 메시지를 만들 수 있습니다. Grafana에서는 알림 규칙 주석, 라벨, 알림 템플릿 세 가지 방식으로 템플릿팅할 수 있어요.
출처: 문서
본문
템플릿팅으로 알림 알림 메시지를 커스터마이즈·포맷·재사용하세요. 메트릭 값, 라벨, 기타 컨텍스트 정보 등 동적 콘텐츠를 통합해 더 유연하고 정보가 풍부한 알림 메시지를 만들 수 있어요.
Grafana에서 알림 메시지를 템플릿팅하는 다양한 옵션:
| 방식 | 설명 |
|---|---|
| 알림 규칙 주석(Alert rule annotations) | 알림 인스턴스에 알림 메시지용 summary, description 같은 추가 정보를 추가함. 서버 이름이나 임계값 쿼리 값처럼 알림에 의미 있는 쿼리 값을 표시하도록 주석을 템플릿팅함 |
| 알림 규칙 라벨(Alert rule labels) | 알림 인스턴스를 다른 인스턴스와 구분하는 데 사용됨. 쿼리 값에 기반한 추가 라벨을 생성하거나, 쿼리 라벨이 불완전/설명적으로 부족할 때 템플릿팅함. 라벨에 쿼리 값을 표시하면 수많은 알림 인스턴스가 생성될 수 있으니 피하고, 대신 주석을 사용하세요 |
| 알림 템플릿(Notification templates) | 연락처 포인트가 알림 제목·설명에서 일관된 메시지를 사용하도록 함. 알림 모양·정보를 커스터마이즈하려면 템플릿팅함. 알림 인스턴스에 추가 정보를 넣기 위해 알림 템플릿을 쓰는 것은 피하고 주석을 사용하세요 |
팁: 실용적인 예제는 Getting Started with Templating 튜토리얼 을 참고하세요.
템플릿팅이 어떻게 작동하나요?
- 알림 규칙 쿼리가
12345와 함께instance·job라벨 값을 반환합니다. - 이 쿼리 결과가 알림 규칙 조건을 위반해 알림 인스턴스를 발화시킵니다.
- 알림 인스턴스는 알림 규칙 summary에서 사용된 템플릿으로 정의된 주석 요약을 생성합니다. 이 경우
instance라벨 값인server1을 표시합니다. - Alertmanager는 발화 알림 인스턴스(최종 주석 요약 포함)를 받아 이를 처리할 연락처 포인트를 결정합니다.
- Alertmanager는 연락처 포인트의 알림 템플릿으로 메시지를 포맷한 뒤 구성된 대상(이메일 주소)으로 알림을 보냅니다.
주석 템플릿팅 (Template annotations)
주석(annotations)은 알림 규칙에서 정의해 알림 인스턴스에 추가 정보를 넣을 수 있어요. 알림 규칙 생성 시 Grafana가 description, summary, runbook_url 같은 여러 선택 주석을 제안하며, 커스텀 주석도 만들 수 있어요. 주석은 키-값 쌍이며 값에는 알림이 발화할 때 평가되는 텍스트와 템플릿 코드 조합이 포함될 수 있어요.
주석은 일반 텍스트일 수 있지만, 알림과 관련된 쿼리 값을 표시해야 한다면 템플릿팅해야 해요. 예:
- 알림을 트리거하는 쿼리 값 표시
- 알림을 식별하는 쿼리 반환 라벨 포함
- 쿼리 값에 따라 주석 메시지 포맷
주석 템플릿팅 예(CPU 사용량이 임계값을 초과할 때):
CPU usage for {{ $labels.instance }} has exceeded 80% ({{ $values.A.Value }}) for the last 5 minutes.
결과:
CPU usage for Instance 1 has exceeded 80% (81.2345) for the last 5 minutes.
알림 대응에 의미 있는 정보를 제공하는 주석을 구현하세요. 주석은 Grafana 알림 상세 뷰에 표시되며 기본적으로 알림에 포함됩니다. 자세한 내용은 Template annotations and labels를 참고하세요.
라벨 템플릿팅 (Template labels)
라벨은 한 알림 인스턴스를 다른 모든 인스턴스와 구분하는 데 사용되며, 라벨 집합이 알림 인스턴스를 고유하게 식별합니다. 알림 정책과 침묵(silences)은 라벨로 알림 인스턴스를 처리합니다.
쿼리 결과에 기반해 라벨을 템플릿팅할 수도 있어요. 쿼리에서 얻은 라벨이 충분히 상세하지 않을 때 유용합니다. 예:
- 알림이 어떻게 식별·그룹핑되어 다른 알림 그룹이 되는지 변경하는 새 라벨 추가
- 알림 정책이나 침묵이 알림을 관리하는 데 사용하는 새 라벨 추가
쿼리 라벨 값을 기반으로 새 env 라벨을 템플릿팅하는 예:
{{- if eq $labels.instance "prod-server-1" -}}
production
{{- else if eq $labels.instance "staging-server-1" -}}
staging
{{- else -}}
development
{{- end -}}
자세한 내용은 Template annotations and labels를 참고하세요.
알림 템플릿팅 (Template notifications)
알림 템플릿(notification templates)은 이메일 제목, Slack 메시지 본문 등 알림 내용을 커스터마이즈할 수 있게 해줍니다. 알림 템플릿은 주석·라벨 템플릿팅과 다음에서 다릅니다:
- 알림 템플릿은 알림 규칙이 아니라 연락처 포인트(Contact point) 에 할당됩니다.
- 지정하지 않으면 연락처 포인트는 관련 알림 정보를 포함하는 기본 템플릿을 사용합니다.
- 같은 템플릿을 여러 연락처 포인트에서 공유할 수 있어 유지관리가 쉽고 일관성이 보장됩니다.
- 알림 템플릿은 개별 알림에 추가 정보를 넣는 데 사용하면 안 되며, 그 목적에는 주석을 사용하세요.
주석·라벨 템플릿과 알림 템플릿은 같은 템플릿 언어를 사용하지만 사용 가능한 변수와 함수는 다릅니다. 자세한 내용은 알림 템플릿 참조와 주석·라벨 템플릿 참조를 참고하세요.
알림 그룹의 모든 발화·해결 알림을 요약하는 알림 템플릿 예:
{{ define "alerts.message" -}}
{{ if .Alerts.Firing -}}
{{ len .Alerts.Firing }} firing alert(s)
{{ template "alerts.summarize" .Alerts.Firing }}
{{- end }}
{{- if .Alerts.Resolved -}}
{{ len .Alerts.Resolved }} resolved alert(s)
{{ template "alerts.summarize" .Alerts.Resolved }}
{{- end }}
{{- end }}
{{ define "alerts.summarize" -}}
{{ range . -}}
- {{ index .Annotations "summary" }}
{{ end }}
{{ end }}
연락처 포인트로 가는 알림 메시지는 이렇게 보입니다:
1 firing alert(s)
- The database server db1 has exceeded 75% of available disk space. Disk space used is 76%, please resize the disk size within the next 24 hours.
1 resolved alert(s)
- The web server web1 has been responding to 5% of HTTP requests with 5xx errors for the last 5 minutes.
자세한 내용은 Template notifications를 참고하세요.