프로메테우스 공식 레퍼런스를 한글로 번역한 문서입니다.
전체 목차는 여기에 있습니다.
여기서는 각기 다른 alert와 Alertmanager 설정 파일(alertmanager.yml) 예제를 다룬다. 모든 예제는 Go 템플릿 시스템을 사용한다.
목차
- Customizing Slack notifications
- Accessing annotations in CommonAnnotations
- Ranging over all received Alerts
- Defining reusable templates
Customizing Slack notifications
이 예제에선 전달받은 alert를 처리하는 방법이 나와있는 조직 내 위키 URL을 전송하도록 Slack notification을 커스텀했다.
global:
# 이 URL은 파일에 넣는 것도 가능하다.
# Ex: `slack_api_url_file: '/etc/alertmanager/slack_url'`
slack_api_url: '<slack_webhook_url>'
route:
receiver: 'slack-notifications'
group_by: [alertname, datacenter, app]
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'
Accessing annotations in CommonAnnotations
이 예제에선 Alertmanager가 전송하는 데이터의 CommonAnnotations
에 저장돼 있는 summary
와 description
을 이용해 Slack receiver로 전송할 텍스트를 또 한번 커스텀한다.
Alert
groups:
- name: Instances
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
# 여기서는 alert의 어노테이션과 레이블 필드에 프로메테우스 템플릿을 적용한다.
annotations:
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
summary: 'Instance {{ $labels.instance }} down'
Receiver
- name: 'team-x'
slack_configs:
- channel: '#alerts'
# 여기서는 Alertmanager 템플릿을 적용한다.
text: "<!channel> \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}"
Ranging over all received Alerts
마지막으로, 이전 예제와 같은 alert를 가정하고, Alertmanager에서 수신한 전체 alert를 범위로 지정해서 각각의 어노테이션 summary와 description을 새로운 라인에 출력하도록 receiver를 커스텀한다.
Receiver
- name: 'default-receiver'
slack_configs:
- channel: '#alerts'
title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
Defining reusable templates
첫 번째 예제로 돌아가서, 여러 줄에 걸쳐 있는 복잡한 템플릿을 사용하는 대신, 전용 이름과 함께 템플릿이 담겨있는 파일을 제공해도 된다. 이 파일은 Alertmanager가 로드해줄 거다. /alertmanager/template/myorg.tmpl
아래에 파일을 하나 만들고 “slack.myorg.txt”라는 이름으로 템플릿을 생성해라:
{{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}
이제 설정에선 “text” 필드에 템플릿 이름을 지정하고, 커스텀 템플릿 파일의 경로를 제공해주면 된다:
global:
slack_api_url: '<slack_webhook_url>'
route:
receiver: 'slack-notifications'
group_by: [alertname, datacenter, app]
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: '{{ template "slack.myorg.text" . }}'
templates:
- '/etc/alertmanager/templates/myorg.tmpl'
이 예제는 이 블로그 포스트에서 더 자세히 다루고 있다.
Next :Alertmanager Management API
Alertmanager management API 가이드
전체 목차는 여기에 있습니다.