알림 템플릿 참고

알림 템플릿 참고 (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)