알림 템플릿 참고
알림 템플릿 참고 (Notification template reference)
Prometheus는 알림을 만들어 Alertmanager로 보내고, Alertmanager는 알림의 라벨에 따라 서로 다른 수신자(receiver)로 알림을 전송해요. 이때 수신자에게 보내는 알림 메시지는 템플릿을 통해 구성됩니다.
Alertmanager에는 기본 템플릿이 내장되어 있지만, 직접 커스터마이즈할 수도 있어요. 중요한 것은 Alertmanager 템플릿이 Prometheus의 템플릿과 다르다는 점이에요. (다만 Prometheus 템플릿에는 알림 규칙의 라벨/annotation 템플릿이 포함됩니다.)
Alertmanager의 알림 템플릿은 Go 템플릿 시스템 기반입니다. 일부 필드는 텍스트로, 다른 필드는 HTML로 평가되는데, 이는 이스케이프(escaping)에 영향을 주니 유의하세요.
출처: 문서
본문
Prometheus는 알림을 만들어 Alertmanager로 보내고, Alertmanager는 라벨에 기반해 서로 다른 수신자에게 알림을 전송합니다. 수신자는 Slack, PagerDuty, 이메일, 또는 일반 웹훅 인터페이스를 통한 사용자 정의 통합 등 여러 통합 중 하나가 될 수 있어요.
수신자에게 보내는 알림은 템플릿을 통해 구성됩니다. Alertmanager에는 기본 템플릿이 제공되지만 커스터마이즈할 수도 있습니다. 혼동을 피하기 위해, Alertmanager 템플릿은 Prometheus의 템플릿과 다르다는 점이 중요합니다. 다만 Prometheus 템플릿에는 알림 규칙 라벨/annotation의 템플릿도 포함됩니다.
Alertmanager의 알림 템플릿은 Go 템플릿 시스템을 기반으로 합니다. 일부 필드는 텍스트로, 다른 필드는 HTML로 평가된다는 점을 유의하세요(이스케이프에 영향을 줍니다).
데이터 구조 (Data Structures)
Data
Data는 알림 템플릿과 웹훅 push에 전달되는 구조입니다.
| 이름 | 타입 | 설명 |
|---|---|---|
| Receiver | string | 알림이 전송될 수신자의 이름을 정의(slack, email 등). |
| Status | string | 하나 이상의 알림이 firing 중이면 firing, 그렇지 않으면 resolved로 정의. |
| Alerts | Alert | 이 그룹의 모든 알림 객체 목록(아래 참조). |
| GroupLabels | KV | 이 알림들이 그룹화된 라벨. |
| CommonLabels | KV | 모든 알림에 공통인 라벨. |
| CommonAnnotations | KV | 모든 알림에 공통인 annotation 집합. 알림에 대한 더 긴 추가 정보 문자열에 사용. |
| RouteLabels | KV | 이 알림 그룹에 붙은 라우트 labels. 보통 아래의 routeLabels 함수로 접근. |
| ExternalURL | string | 알림을 보낸 Alertmanager로의 백링크. |
Alerts 타입은 알림을 필터링하는 함수를 노출합니다:
Alerts.Firing— 이 그룹에서 현재 firing 중인 알림 객체 목록을 반환.Alerts.Resolved— 이 그룹에서 해결된 알림 객체 목록을 반환.
Alert
Alert는 알림 템플릿을 위한 하나의 알림을 보유합니다.
| 이름 | 타입 | 설명 |
|---|---|---|
| Status | string | 알림이 해결되었는지 아니면 현재 firing 중인지 정의. |
| Labels | KV | 알림에 붙일 라벨 집합. |
| Annotations | KV | 알림을 위한 annotation 집합. |
| StartsAt | time.Time | 알림이 firing을 시작한 시간. 생략되면 현재 시간이 Alertmanager에 의해 지정됨. |
| EndsAt | time.Time | 알림의 종료 시간이 알려진 경우에만 설정. 그렇지 않으면 마지막 알림 수신 시점부터의 설정 가능한 타임아웃 기간으로 설정. |
| GeneratorURL | string | 이 알림을 일으킨 엔티티를 식별하는 백링크. |
| Fingerprint | string | 알림을 식별하는 데 사용할 수 있는 핑거프린트. |
KV
KV는 라벨과 annotation을 나타내는 데 사용되는 키/값 문자열 쌍의 집합입니다.
type KV map[string]string
두 개의 annotation을 포함하는 annotation 예시:
{
"summary": "alert summary",
"description": "alert description",
}
KV로 저장된 데이터(라벨과 annotation)를 직접 접근하는 것 외에도, LabelSets를 정렬, 제거, 보기 위한 메서드도 있습니다:
KV 메서드 (KV methods)
| 이름 | 인자 | 반환 | 설명 |
|---|---|---|---|
| SortedPairs | - | Pairs (키/값 문자열 쌍 목록.) | 키/값 쌍의 정렬된 목록을 반환. |
| Remove | []string | KV | 주어진 키를 제외한 키/값 맵의 복사본을 반환. |
| Names | - | []string | LabelSet에 있는 라벨 이름을 반환. |
| Values | - | []string | LabelSet에 있는 값 목록을 반환. |
함수 (Functions)
참고: Go 템플릿이 제공하는 기본 함수도 사용할 수 있습니다.
문자열 (Strings)
| 이름 | 인자 | 설명 |
|---|---|---|
| append | slice []any, args ...any | 제공된 인자를 제공된 슬라이스에 덧붙인 새 슬라이스를 반환. |
| base64decode | text string | base64.URLEncoding.DecodeString, URL-safe base64 인코딩 문자열을 디코딩하고, 발생한 오류를 반환. |
| base64encode | text string | base64.URLEncoding.EncodeToString, 문자열의 URL-safe base64 인코딩을 반환(예: 쿼리 파라미터에 사용). |
| date | string, time.Time | 지정된 형식으로 시간의 텍스트 표현을 반환. 형식에 대한 문서는 pkg.go.dev/time 참조. |
| dict | values ...any | 가변 인자 키-값 쌍 목록으로부터 구성된 string-to-any 맵을 반환. 인자 수는 짝수여야 하고 키는 문자열이어야 함. |
| humanizeDuration | number or string | 지속 시간을 나타내는 사람이 읽기 쉬운 문자열을 반환하고, 발생한 오류를 함께 반환. |
| join | sep string, s []string | strings.Join, s의 요소를 연결해 단일 문자열을 만듦. 결과 문자열에서 요소 사이에 구분자 문자열 sep가 배치됨. (참고: 템플릿에서 파이프라인을 더 쉽게 쓰기 위해 인자 순서가 뒤집혀 있음.) |
| list | ...any | 전달된 인자를 interface 슬라이스로 반환. |
| match | pattern, string | Regexp.MatchString. Regexp를 사용해 문자열 매칭. |
| now | - | time.Now, 현재 로컬 시간을 반환. |
| reReplaceAll | pattern, replacement, text | Regexp.ReplaceAllString Regexp 치환, 언앵커드(unanchored). |
| routeLabels | name string | 이 알림 그룹에 대한 이름 있는 라우트 라벨의 값을 반환, 설정되지 않으면 "". |
| safeHtml | text string | html/template.HTML, 문자열을 자동 이스케이프가 필요 없는 HTML로 표시. |
| safeUrl | text string | html/template.URL, 문자열을 자동 이스케이프가 필요 없는 URL로 표시. |
| since | time.Time | time.Since, 제공된 시간부터 현재 시스템 시간까지 경과한 시간의 지속 시간을 반환. |
| stringSlice | ...string | 전달된 문자열을 문자열 슬라이스로 반환. |
| title | string | strings.Title, 각 단어의 첫 글자를 대문자로. |
| toJson | any | json.Marshal, 값의 JSON 인코딩을 반환. |
| toLower | string | strings.ToLower, 모든 문자를 소문자로 변환. |
| toUpper | string | strings.ToUpper, 모든 문자를 대문자로 변환. |
| trimSpace | string | strings.TrimSpace, 앞뒤 공백 제거. |
| tz | string, time.Time | 시간대의 시간을 반환. 예: Europe/Paris. |
| urlUnescape | text string | url.QueryUnescape, % 인코딩이 있는 URL을 언이스케이프. |
더 알아보기 (Learn more)
- 알림 템플릿 예시 — Slack 커스터마이징 등 실제 예제
- Alertmanager 설정 문서 —
receiver,route,templates설정 - Go text/template — 템플릿 문법 전체 가이드
- 알림 통합 목록 — 다양한 수신자 통합
- Prometheus 템플릿 참고 — Prometheus 측 템플릿(알림 규칙 라벨/annotation)