Alertmanager 설정

Alertmanager 설정 (Configuration)

Alertmanager는 커맨드라인 플래그와 설정 파일 두 가지로 구성돼요. 커맨드라인 플래그는 시스템의 불변(immutable) 파라미터를 설정하고, 설정 파일은 인히비션 규칙, 알림 라우팅, 알림 수신 대상(receiver)을 정의합니다.

라우팅 트리를 만들 때는 비주얼 에디터를 사용하면 훨씬 편해요. 모든 커맨드라인 플래그를 보려면 alertmanager -h를 실행하면 됩니다.

출처: 문서

본문

Alertmanager는 커맨드라인 플래그와 설정 파일로 구성됩니다. 커맨드라인 플래그는 시스템의 불변 파라미터를 설정하는 반면, 설정 파일은 인히비션 규칙, 알림 라우팅, 알림 수신 대상을 정의해요.

라우팅 트리를 만드는 데는 비주얼 에디터가 도움이 됩니다.

사용 가능한 모든 커맨드라인 플래그를 보려면 alertmanager -h를 실행하세요.

Alertmanager는 런타임에 설정을 다시 로드할 수 있어요. 새 설정이 올바른 형식이 아니면 변경 사항이 적용되지 않고 오류가 로그에 기록됩니다. 설정 리로드는 프로세스에 SIGHUP을 보내거나 /-/reload 엔드포인트로 HTTP POST 요청을 보내면 트리거됩니다.

한도 (Limits)

Alertmanager는 커맨드라인 플래그를 통해 여러 가지 설정 가능한 한도를 지원해요.

만료된 것을 포함한 최대 사일런스 수를 제한하려면 --silences.max-silences 플래그를 사용합니다. 개별 사일런스의 최대 크기는 --silences.max-silence-size-bytes로 제한할 수 있는데, 단위는 바이트(byte)예요.

두 한도 모두 기본적으로 비활성화되어 있습니다.

설정 파일 소개

어떤 설정 파일을 로드할지 지정하려면 --config.file 플래그를 사용합니다.

./alertmanager --config.file=alertmanager.yml

이 파일은 아래에서 설명하는 스키마로 정의되는 YAML 형식으로 작성됩니다. 대괄호([...])는 해당 파라미터가 선택적(optional)임을 나타내요. 리스트가 아닌 파라미터의 경우 값은 지정된 기본값으로 설정됩니다.

일반적인 플레이스홀더(placeholder)는 다음과 같이 정의됩니다:

  • <duration>: 정규 표현식 ((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)과 일치하는 지속 시간. 예: 1d, 1h30m, 5m, 10s
  • <labelname>: 정규 표현식 [a-zA-Z_][a-zA-Z0-9_]*과 일치하는 문자열
  • <labelvalue>: 유니코드 문자로 된 문자열
  • <filename>: 현재 작업 디렉터리의 유효한 경로
  • <boolean>: true 또는 false 값을 가질 수 있는 부울
  • <string>: 일반 문자열
  • <secret>: 비밀번호 같은 비밀 문자열
  • <tmpl_string>: 사용 전에 템플릿 확장되는 문자열
  • <tmpl_secret>: 사용 전에 템플릿 확장되는 문자열인 비밀
  • <int>: 정수 값
  • <regex>: 유효한 RE2 정규 표현식 (정규 표현식은 양쪽 끝에 고정(anchored)됩니다. 고정을 풀려면 .*.*를 사용하세요.)

다른 플레이스홀더는 각각 별도로 지정됩니다.

제공되는 유효한 예제 파일이 실제 사용 맥락을 보여줍니다.

파일 레이아웃과 전역 설정

전역 설정(global configuration)은 다른 모든 설정 컨텍스트에서 유효한 파라미터를 지정해요. 또한 다른 설정 섹션의 기본값 역할을 합니다. 다른 최상위 섹션들은 이 페이지 아래에 문서화되어 있습니다.

global:
  # 기본 SMTP From 헤더 필드.
  [ smtp_from: <tmpl_string> ]
  # 이메일 전송에 사용되는 기본 SMTP 스마트호스트. 포트 번호 포함.
  # 포트 번호는 보통 25이며, SMTP over TLS(때때로 STARTTLS라고도 함)의 경우 587.
  # 예: smtp.example.org:587
  [ smtp_smarthost: <string> ]
  # SMTP 서버에 자신을 식별하는 기본 호스트명.
  [ smtp_hello: <string> | default = "localhost" ]
  # CRAM-MD5, LOGIN, PLAIN을 사용하는 SMTP 인증. 비어 있으면 Alertmanager가 SMTP 서버에 인증하지 않음.
  # PLAIN은 TLS를 사용할 때만 지원됨.
  [ smtp_auth_username: <string> ]
  # LOGIN과 PLAIN을 사용하는 SMTP 인증.
  [ smtp_auth_password: <secret> ]
  # LOGIN과 PLAIN을 사용하는 SMTP 인증.
  [ smtp_auth_password_file: <string> ]
  # PLAIN을 사용하는 SMTP 인증.
  [ smtp_auth_identity: <string> ]
  # CRAM-MD5를 사용하는 SMTP 인증.
  [ smtp_auth_secret: <secret> ]
  # CRAM-MD5를 사용하는 SMTP 인증.
  [ smtp_auth_secret_file: <string> ]
  # 기본 SMTP TLS 요구사항.
  # Go는 원격 SMTP 엔드포인트로의 암호화되지 않은 연결을 지원하지 않음에 유의.
  [ smtp_require_tls: <boolean> | default = true ]
  # SMTP 수신자를 위한 기본 TLS 설정
  [ smtp_tls_config: <tls_config> ]
  # SMTP 포트와 무관하게 암시적 TLS 강제
  [ smtp_force_implicit_tls: <boolean> ]

  # JIRA 통합을 위한 기본 설정.
  [ jira_api_url: <string> ]

  # Slack 알림에 사용할 API URL.
  [ slack_api_url: <string> ]
  [ slack_api_url_file: <string> ]
  [ slack_app_token: <secret> ]
  [ slack_app_token_file: <string> ]
  [ slack_app_url: <string> ]

  [ victorops_api_key: <secret> ]
  [ victorops_api_key_file: <string> ]
  [ victorops_api_url: <string> | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ]
  [ pagerduty_url: <string> | default = "https://events.pagerduty.com/v2/enqueue" ]
  [ opsgenie_api_key: <secret> ]
  [ opsgenie_api_key_file: <string> ]
  [ opsgenie_api_url: <string> | default = "https://api.opsgenie.com/" ]
  [ rocketchat_api_url: <string> | default = "https://open.rocket.chat/" ]
  # 기본 Rocketchat 발신자 토큰. `rocketchat_token_file`과 상호 배타적.
  [ rocketchat_token: <secret> ]
  # 파일에서 기본 Rocketchat 발신자 토큰을 읽음. `rocketchat_token`과 상호 배타적.
  [ rocketchat_token_file: <string> ]
  # 기본 Rocketchat 발신자 토큰 ID. `rocketchat_token_id_file`과 상호 배타적.
  [ rocketchat_token_id: <secret> ]
  # 파일에서 기본 Rocketchat 발신자 토큰 ID를 읽음. `rocketchat_token_id`와 상호 배타적.
  [ rocketchat_token_id_file: <string> ]
  [ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
  [ wechat_api_secret: <secret> ]
  [ wechat_api_secret_file: <string> ]
  [ wechat_api_corp_id: <string> ]
  [ telegram_api_url: <string> | default = "https://api.telegram.org" ]
  # 기본 Telegram 봇 토큰. `telegram_bot_token_file`과 상호 배타적.
  [ telegram_bot_token: <secret> ]
  # 파일에서 Telegram 봇 토큰을 읽는 기본 설정. `telegram_bot_token`과 상호 배타적.
  [ telegram_bot_token_file: <string> ]
  [ webex_api_url: <string> | default = "https://webexapis.com/v1/messages" ]
  [ mattermost_webhook_url: <secret> ]
  [ mattermost_webhook_url_file: <string> ]
  # 기본 HTTP 클라이언트 설정
  [ http_config: <http_config> ]

  # ResolveTimeout은 알림에 EndsAt가 포함되지 않을 때 alertmanager가 사용하는 기본값.
  # 이 시간이 지나도 알림이 갱신되지 않으면 해결(resolved)된 것으로 선언할 수 있음.
  # Prometheus의 알림은 항상 EndsAt를 포함하므로 이 값은 Prometheus의 알림에는 영향이 없음.
  [ resolve_timeout: <duration> | default = 5m ]

# 사용자 정의 알림 템플릿 정의를 읽어오는 파일들.
# 마지막 구성 요소는 와일드카드 매처를 사용할 수 있음. 예: 'templates/*.tmpl'.
templates:
  [ - <filepath> ... ]

# 라우팅 트리의 루트 노드.
route:

# 알림 수신 대상 목록.
receivers:
  - <receiver> ...

# 인히비션 규칙 목록.
inhibit_rules:
  [ - <inhibit_rule> ... ]

# DEPRECATED: 아래의 time_intervals를 사용하세요.
# 라우트를 음소거하기 위한 음소거 시간 간격 목록.
mute_time_intervals:
  [ - <time_interval> ... ]

# 라우트를 음소거/활성화하기 위한 시간 간격 목록.
time_intervals:
  [ - <time_interval> ... ]

# 선택적 이벤트 레코더 설정. 중요한
# Alertmanager 이벤트(시작/종료, 알림 수명주기, 사일런스,
# 알림)를 포착해 하나 이상의 출력(file, webhook,
# Kafka, stdout)으로 전송한다. 기록은
# `event-recorder` 기능 플래그 뒤에 게이트되어 있으며;
# 커맨드라인으로 `--enable-feature=event-recorder`를 전달해
# 활성화한다. 아래의 Event Recorder 섹션을 참조.
[ event_recorder: <event_recorder_config> ]

# 선택적 트레이싱 설정. Alertmanager의 분산 트레이싱을 구성한다.
[ traciing: <tracing_config> ]

라우팅 관련 설정은 알림이 시간에 따라 어떻게 라우팅되고, 집계되고, 조절(throttle)되고, 음소거되는지 구성할 수 있게 해줍니다.

route

route 블록은 라우팅 트리의 노드와 그 자식 노드를 정의해요. 선택적 설정 파라미터는 설정되지 않은 경우 부모 노드에서 상속됩니다.

모든 알림은 설정된 최상위 라우트(top-level route)에서 라우팅 트리에 들어오며, 이 라우트는 모든 알림과 일치해야 합니다(즉, 설정된 매처가 없어야 함). 그런 다음 자식 노드를 탐색하죠. continuefalse로 설정되어 있으면 첫 번째 일치하는 자식 이후에 멈춥니다. 일치하는 노드에서 continuetrue면 알림은 이후의 형제(sibling) 노드들에도 계속 매칭됩니다.

알림이 노드의 어떤 자식과도 일치하지 않으면(일치하는 자식 노드가 없거나, 자식이 없거나), 알림은 현재 노드의 설정 파라미터에 따라 처리됩니다.

그룹화에 대한 자세한 정보는 Alertmanager 개념을 참고하세요.

[ receiver: <string> ]
# 들어오는 알림을 그룹화하는 라벨. 예를 들어,
# cluster=A, alertname=LatencyHigh로 들어오는 여러 알림은
# 단일 그룹으로 묶이게 됨.
#
# 모든 가능한 라벨로 집계하려면 특수 값 '...'을 유일한 라벨 이름으로 사용. 예:
# group_by: ['...']
# 이는 사실상 집계를 완전히 비활성화해 모든 알림을
# 그대로 통과시킴. 알림 볼륨이 매우 적거나
# 업스트림 알림 시스템이 자체적으로 그룹화를 수행하지 않는 한
# 이것이 원하는 바일 가능성은 낮음.
[ group_by: '[' <labelname>, ... ']' ]

# 알림이 이후의 형제 노드들과 계속 매칭되어야 하는지 여부.
[ continue: <boolean> | default = false ]

# DEPRECATED: 아래의 matchers를 사용하세요.
# 알림이 노드와 일치하기 위해 충족해야 하는 동등성 매처 집합.
match:
  [ <labelname>: <labelvalue>, ... ]

# DEPRECATED: 아래의 matchers를 사용하세요.
# 알림이 노드와 일치하기 위해 충족해야 하는 정규 표현식 매처 집합.
match_re:
  [ <labelname>: <regex>, ... ]

# 알림이 노드와 일치하기 위해 충족해야 하는 매처 목록.
matchers:
  [ - <matcher> ... ]

# 라우트에 붙는 라벨 집합으로, `routeLabels` 템플릿 함수를 통해
# 알림 템플릿에서 쓸 수 있다(`/api/v2/alerts/groups` API 응답의
# `routeLabels` 필드로도 제공). 라우트 라벨은 부모에서 자식 라우트로
# 병합된다: 자식 라우트는 부모의 라우트 라벨을 상속하고, 개별 라벨을
# 재정의해 덮어쓸 수 있다. group_by와 달리 라우트 라벨은 알림이
# 어떻게 그룹화되는지에는 영향을 주지 않는다.
#
# 라벨 값 자체가 각 알림 그룹의 알림 데이터에 대해 렌더링되는
# 템플릿일 수 있다(그래서 그룹 라벨, 다른 라우트 라벨 등을 참조할 수 있음).
#
# 라우트 라벨은 개별 알림과 무관하게 알림 그룹마다 렌더링된다(API를 통해
# 노출될 때처럼 알림이 전혀 없을 때도). 따라서 특정 알림에만 의미가 있는
# 필드는 사용할 수 없다: 특히 `.NotificationReason`은 라우트 라벨
# 템플릿에서 항상 "unknown"이다. 이유에 따라 다른 내용이 필요하면
# 알림 템플릿을 사용하라.
labels:
  [ <labelname>: <tmpl_string>, ... ]
# 예: `description`은 `reason` 하위 라벨에서 한 번 조합된다.
# 하위 라우트가 `reason`만 재정의해 분기에서 매칭된 라벨로부터 계산하며,
# 상속된 description이 자동으로 그것을 반영한다:
#   route:
#     labels:
#       reason: '{{ .GroupLabels.alertname }}'
#       description: '{{ .GroupLabels.alertname }} firing ({{ routeLabels "reason" }})'
#     routes:
#       - matchers: [ service="database" ]
#         group_by: [ alertname, database ]
#         labels:
#           reason: 'database {{ .GroupLabels.database }}'

# 새 알림 그룹에 대한 첫 알림을 보내기 전에 기다리는 시간.
# 다른 규칙 그룹이나 Prometheus 서버에서 알림이 도착하기를 기다리고,
# 첫 알림 전에 하나 이상의 인히빙 알림이 도착해 대상
# 알림을 음소거하도록 하는 시간을 허용한다.
#
# 짧은 group_wait는 새 알림 그룹에 대한 첫 알림 전 대기 시간을 줄인다.
# 하지만 group_wait가 너무 짧으면 첫 알림이 예상한 완전한
# 알림 집합을 포함하지 못할 수 있고, 인히빙 알림이 제때
# 도착하지 않으면 인히빙되어야 할 알림이 인히빙되지 않을 수 있다.
#
# 긴 group_wait는 새 알림 그룹에 대한 첫 알림 전 대기 시간을 늘린다.
# 하지만 group_wait가 너무 길면 발생 중인 알림에 대한 알림이
# 합리적인 시간 안에 전송되지 않을 수 있다.
#
# 알림이 group_wait가 경과하기 전에 해결되면 그 알림에 대한 알림은
# 전송되지 않는다. 이는 깜빡이는(flapping) 알림의 노이즈를 줄인다.

# 초기 group_wait를 놓친 알림에 대한 알림은
# 다음 group_interval에 전송된다.
#
# 생략하면 자식 라우트는 부모 라우트의 group_wait를 상속한다.
[ group_wait: <duration> | default = 30s ]

# group_wait 이후 기존 알림 그룹에 대한 후속 알림을 보내기 전에 대기하는 시간.
#
# group_interval은 group_wait가 경과하자마자 시작되는 반복 타이머이다.
# 각 group_interval마다 Alertmanager는 마지막 group_interval 이후 새 알림이
# 발생했는지 또는 발생 중인 알림이 해결됐는지 확인하고, 그러하면 알림을 보낸다.
# 그렇지 않으면 Alertmanager는 대신 repeat_interval이 경과했는지 확인한다.
#
# 참고: group_interval은 각 전송에 대한 알림 파이프라인의 컨텍스트 타임아웃을
# 설정한다. 그래서 알림 전송이 group_interval보다 오래 걸리면 알림이
# 취소된다. 작은 group_interval 값과 느린 알림 수신자에서 이럴 수 있다.
#
# 생략하면 자식 라우트는 부모 라우트의 group_interval을 상속한다.
[ group_interval: <duration> | default = 5m ]

# 마지막 알림을 반복하기 전에 대기하는 시간. 마지막 group_interval 이후
# 새 알림이 발생했거나 발생 중인 알림이 해결된 경우 알림은 반복되지 않는다.
#
# repeat_interval은 각 group_interval 이후에 확인되므로,
# group_interval의 배수여야 한다. 배수가 아니면 repeat_interval은
# group_interval의 다음 배수로 올림된다.
#
# 또한 repeat_interval이 `--data.retention`보다 길면, 알림은
# 데이터 보존 기간이 끝날 때 대신 반복된다.
#
# 생략하면 자식 라우트는 부모 라우트의 repeat_interval을 상속한다.
[ repeat_interval: <duration> | default = 4h ]

# 라우트가 음소거되어야 하는 시간. time_intervals 섹션에 정의된
# 시간 간격의 이름과 일치해야 한다.
# 추가로 루트 노드는 어떤 음소거 시간도 가질 수 없다.
# 라우트가 음소거되면 알림을 보내지 않지만, 그 외에는
# 정상적으로 동작한다(`continue` 옵션이 설정되지 않으면
# 라우트 매칭 과정을 끝내는 것 포함).
mute_time_intervals:
  [ - <string> ...]

# 라우트가 활성화되어야 하는 시간. time_intervals 섹션에 정의된
# 시간 간격의 이름과 일치해야 한다. 빈 값은 라우트가
# 항상 활성임을 의미한다.
# 추가로 루트 노드는 어떤 활성 시간도 가질 수 없다.
# 라우트는 활성 상태일 때만 알림을 보내지만, 그 외에는
# 정상적으로 동작한다(`continue` 옵션이 설정되지 않으면
# 라우트 매칭 과정을 끝내는 것 포함).
active_time_intervals:
  [ - <string> ...]

# 0개 이상의 자식 라우트.
routes:
  [ - <route> ... ]
예시 (Example)
# 모든 파라미터를 가진 루트 라우트. 이 값들은 자식 라우트가
# 덮어쓰지 않으면 상속된다.
route:
  receiver: 'default-receiver'
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  group_by: [cluster, alertname]
  # 다음 자식 라우트와 일치하지 않는 모든 알림은
  # 루트 노드에 남아 'default-receiver'로 전달된다.
  routes:
  # service=mysql 또는 service=cassandra인 모든 알림은
  # database pager로 전달된다.
  - receiver: 'database-pager'
    group_wait: 10s
    matchers:
    - service=~"mysql|cassandra"
  # team=frontend 라벨을 가진 모든 알림이 이 하위 라우트와 일치한다.
  # cluster와 alertname이 아닌 product와 environment로 그룹화된다.
  - receiver: 'frontend-pager'
    group_by: [product, environment]
    matchers:
    - team="frontend"

  # service=inhouse-service 라벨을 가진 모든 알림이 이 하위 라우트와 일치한다.
  # 이 라우트는 offhours와 holidays 시간 간격 동안 음소거된다.
  # 일치하더라도 다음 하위 라우트로 계속 진행된다.
  - receiver: 'dev-pager'
    matchers:
      - service="inhouse-service"
    mute_time_intervals:
      - offhours
      - holidays
    continue: true

    # service=inhouse-service 라벨을 가진 모든 알림이 이 하위 라우트와 일치한다
    # 이 라우트는 offhours와 holidays 시간 간격 동안에만 활성화된다.
  - receiver: 'on-call-pager'
    matchers:
      - service="inhouse-service"
    active_time_intervals:
      - offhours
      - holidays

time_interval

time_interval은 하루 중 특정 시간에 특정 라우트를 음소거/활성화하기 위해 라우팅 트리에서 참조될 수 있는 이름 있는 시간 간격을 지정해요.

name: <string>
time_intervals:
  [ - <time_interval_spec> ... ]
time_interval_spec

time_interval_spec은 시간 간격의 실제 정의를 포함합니다. 문법은 다음 필드들을 지원해요:

- times:
  [ - <time_range> ...]
  weekdays:
  [ - <weekday_range> ...]
  days_of_month:
  [ - <days_of_month_range> ...]
  months:
  [ - <month_range> ...]
  years:
  [ - <year_range> ...]
  location: <location>

모든 필드는 리스트입니다. 각 비어 있지 않은 리스트 안에서 필드와 일치하려면 적어도 하나의 요소가 충족되어야 해요. 필드가 지정되지 않으면 어떤 값이든 그 필드와 일치합니다. 어떤 시점이 완전한 시간 간격과 일치하려면 모든 필드가 일치해야 합니다.

일부 필드는 범위(range)와 음수 인덱스를 지원하며 아래에 자세히 설명합니다. 시간대가 지정되지 않으면 시간은 UTC로 간주됩니다.

time_range: 시간 경계에서 시작/끝나는 시간을 쉽게 나타낼 수 있도록 시작 시간은 포함하고 끝 시간은 배제한 범위입니다. 예를 들어 start_time: '17:00'end_time: '24:00'은 17:00에 시작해 24:00 직전에 끝납니다. 다음과 같이 지정합니다:

times:
- start_time: HH:MM
  end_time: HH:MM

weekday_range: 일요일에 시작해 토요일에 끝나는 요일 목록입니다. 요일은 이름으로 지정해야 해요(예: 'Sunday'). 편의를 위해 : 형식의 범위도 허용되며 양쪽 끝이 포함됩니다. 예: ['monday:wednesday','saturday', 'sunday']

days_of_month_range: 그 달의 숫자로 된 날짜 목록입니다. 날짜는 1에서 시작합니다. 월의 끝에서 시작하는 음수 값도 허용되며, 예를 들어 1월의 -1은 1월 31일을 나타내요. 예: ['1:5', '-3:-1']. 월의 시작이나 끝을 넘어가면 클램프(clamp)됩니다. 예를 들어 2월에 ['1:31']을 지정하면 실제 종료일은 윤년 여부에 따라 28 또는 29로 클램프됩니다. 양쪽 끝이 포함됩니다.

month_range: 대소문자를 구분하지 않는 이름(예: 'January')이나 숫자로 식별되는 달력 월 목록으로, 1월 = 1입니다. 범위도 허용됩니다. 예: ['1:3', 'may:august', 'december']. 양쪽 끝이 포함됩니다.

year_range: 숫자로 된 연도 목록입니다. 범위가 허용됩니다. 예: ['2020:2022', '2030']. 양쪽 끝이 포함됩니다.

location: IANA 시간대 데이터베이스의 위치와 일치하는 문자열입니다. 예를 들어 'Australia/Sydney'처럼요. 이 위치는 시간 간격의 시간대를 제공합니다. 예를 들어 'Australia/Sydney' 위치를 가진 시간 간격에 다음과 같은 내용이 있다면:

times:
- start_time: 09:00
  end_time: 17:00
weekdays: ['monday:friday']

호주 시드니 현지 시간을 기준으로 월요일부터 금요일까지, 오전 9시에서 오후 5시 사이에 해당하는 모든 시간이 포함됩니다.

위치로 'Local'을 사용하면 Alertmanager가 실행 중인 머신의 현지 시간을, 'UTC'를 사용하면 UTC 시간을 쓸 수 있어요. 시간대가 제공되지 않으면 시간 간격은 UTC 시간으로 간주됩니다. 참고: Windows에서는 ZONEINFO 환경 변수로 사용자 정의 시간대 데이터베이스를 제공하지 않는 한 Local 또는 UTC만 지원됩니다.

인히비션은 다른 알림 집합이 존재하는지에 따라 알림 집합을 음소거할 수 있게 합니다. 이는 시스템 간의 의존성을 설정해, 장애 중 상호 연결된 알림 집합에서 가장 관련성 높은 알림만 전송되도록 합니다.

인히비션에 대한 자세한 내용은 Alertmanager 개념을 참고하세요.

inhibit_rule

인히비션 규칙은 다른 매처 집합과 일치하는 알림(source)이 존재할 때, 어떤 매처 집합과 일치하는 알림(target)을 음소거합니다. target과 source 알림 모두 equal 목록의 라벨 이름에 대해 같은 라벨 값을 가져야 해요.

의미적으로 누락된 라벨과 빈 값을 가진 라벨은 같은 것입니다. 따라서 equal에 나열된 모든 라벨 이름이 source와 target 알림 양쪽 모두에서 누락되어도 인히비션 규칙이 적용됩니다.

알림이 자기 자신을 인히빙하는 것을 막기 위해, 규칙의 target과 source 양쪽 모두와 일치하는 알림은 같은 경우(자기 자신 포함)에 해당하는 알림에 의해 인히빙될 수 없어요. 하지만 target과 source 매처가 알림이 양쪽 모두와 일치하지 않도록 선택하는 것을 권장합니다. 그 편이 훨씬 이해하기 쉽고 이 특수한 경우를 트리거하지 않습니다.

# 인히비션 규칙의 선택적 이름.
# 중복 이름은 허용되지만 규칙별 메트릭에 영향을 준다.
name: <string>

# DEPRECATED: 아래의 target_matchers를 사용하세요.
# 음소거될 알림에서 충족되어야 하는 매처.
target_match:
  [ <labelname>: <labelvalue>, ... ]
# DEPRECATED: 아래의 target_matchers를 사용하세요.
target_match_re:
  [ <labelname>: <regex>, ... ]

# 음소거될 target 알림이 충족해야 하는 매처 목록.
target_matchers:
  [ - <matcher> ... ]

# DEPRECATED: 아래의 source_matchers를 사용하세요.
# 인히비션이 적용되도록 하나 이상의 알림이 존재해야 하는 매처.
source_match:
  [ <labelname>: <labelvalue>, ... ]
# DEPRECATED: 아래의 source_matchers를 사용하세요.
source_match_re:
  [ <labelname>: <regex>, ... ]

# 인히비션이 적용되도록 하나 이상의 알림이
# 존재해야 하는 매처 목록.
source_matchers:
  [ - <matcher> ... ]

# 인히비션이 적용되도록 source와 target 알림에서
# 동일한 값을 가져야 하는 라벨.
[ equal: '[' <labelname>, ... ']' ]

라벨 매처 (Label matchers)

라벨 매처는 알림을 라우트, 사일런스, 인히비션 규칙에 매칭시킵니다.

중요: Prometheus는 라벨과 메트릭에서 UTF-8 지원을 추가하고 있어요. Alertmanager에서도 UTF-8을 지원하기 위해, Alertmanager 버전 0.27 이상에는 매처를 위한 새 파서가 있으며 여기에는 몇 가지 하위 호환되지 않는 변경이 있습니다. 대부분의 매처는 앞으로 호환되지만 일부는 그렇지 않습니다. Alertmanager는 UTF-8 매처와 클래식 매처를 모두 지원하는 전환 기간을 운영 중이며, 전환을 준비하는 데 도움이 되는 여러 도구를 제공합니다.

새 Alertmanager 설치라면 Alertmanager 설정 파일을 만들기 전에 UTF-8 strict 모드를 활성화하는 것을 권장해요. UTF-8 strict 모드를 활성화하는 방법은 여기에서 찾을 수 있습니다.

기존 Alertmanager 설치라면, UTF-8 strict 모드를 활성화하기 전에 기본 모드인 fallback 모드로 Alertmanager를 실행하는 것을 권장합니다. 이 모드에서는 UTF-8 strict 모드를 활성화하기 전에 설정 파일에 어떤 변경을 해야 하는지 Alertmanager가 경고를 기록해요. Alertmanager는 다음 두 버전 안에 UTF-8 strict 모드를 기본값으로 만들 것이므로, 가능한 한 빨리 전환하는 것이 중요합니다.

Alertmanager 설치가 새 설치든 기존 설치든, Alertmanager 서버에서 활성화하기 전에 amtool로 Alertmanager 설정 파일이 UTF-8 strict 모드와 호환되는지 검증할 수도 있어요. 이를 위해 실행 중인 Alertmanager 서버는 필요하지 않습니다. amtool로 설정 파일을 검증하는 방법은 여기에서 찾을 수 있습니다.

Alertmanager 서버 운영 모드

전환 기간 동안 Alertmanager는 세 가지 운영 모드를 지원해요. 이는 fallback 모드, UTF-8 strict 모드, classic 모드로 알려져 있습니다. fallback 모드가 기본 모드입니다.

Alertmanager 서버 운영자는 전환 기간이 끝나기 전에 UTF-8 strict 모드로 전환해야 합니다. Alertmanager는 다음 두 버전 안에 UTF-8 strict 모드를 기본값으로 만들 것이므로 가능한 한 빨리 전환하는 것이 중요합니다.

Fallback 모드

Alertmanager는 기본 모드로 fallback이라는 특수 모드로 실행됩니다. 운영자로서 라우트, 사일런스, 인히비션 규칙이 어떻게 작동하는지에 차이를 느끼지 못할 것입니다.

fallback 모드에서는 설정이 먼저 UTF-8 매처로 파싱되고, UTF-8 파서와 호환되지 않으면 클래식 매처로 파싱됩니다. 설정에 UTF-8 파서와 호환되지 않는 매처가 포함되어 있으면 Alertmanager는 이를 클래식 매처로 파싱하고 경고를 기록해요. 이 경고에는 매처를 클래식 매처에서 UTF-8 매처로 어떻게 바꿀지에 대한 제안도 포함됩니다. 예를 들어:

ts=2024-02-11T10:00:00Z caller=parse.go:176 level=warn msg="Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted and backslashes are escaped. If you are still seeing this message please open an issue." input="foo=" origin=config err="end of input: expected label value" suggestion="foo=\"\""

여기서 매처 foo=는 표현식의 오른쪽을 이중 따옴표로 감싸 foo=""로 만들면 유효한 UTF-8 매처가 됩니다. 이 두 매처는 동등하지만, UTF-8 매처에서는 매처의 오른쪽이 필수 필드입니다.

드물게, 어떤 설정이 UTF-8 파서와 클래식 파서 사이에 불일치(disagreement)를 일으킬 수 있어요. 이는 매처가 두 파서 모두에서 유효하지만, UTF-8 지원 추가로 인해 사용하는 파서에 따라 다른 파싱 결과를 낼 때 발생합니다. 설정에 불일치가 있으면 Alertmanager는 클래식 파서를 사용하고 경고를 기록합니다. 예를 들어:

ts=2024-02-11T10:00:00Z caller=parse.go:183 level=warn msg="Matchers input has disagreement" input="qux=\"\\xf0\\x9f\\x99\\x82\"\n" origin=config

불일치가 발생하는 경우는 불일치의 성격에 따라 설정을 UTF-8 strict 모드를 활성화하기 전에 업데이트하지 않아도 될 수 있으므로, 각각의 경우를 개별적으로 살펴봐야 합니다. 예를 들어 \xf0\x9f\x99\x82는 🙂 이모지의 바이트 시퀀스입니다. 리터럴 🙂 이모지를 매칭하려는 의도라면 변경이 필요 없습니다. 하지만 리터럴 \xf0\x9f\x99\x82를 매칭하려는 의도라면 매처를 qux="\\xf0\\x9f\\x99\\x82"로 바꿔야 합니다.

UTF-8 strict 모드

UTF-8 strict 모드에서는 Alertmanager가 클래식 매처 지원을 비활성화합니다:

alertmanager --config.file=config.yml --enable-feature="utf8-strict-mode"

이 모드는 새 Alertmanager 설치와, 호환되지 않는 매처의 모든 경고가 해결된 기존 Alertmanager 설치에서 활성화되어야 해요. Alertmanager는 호환되지 않는 매처의 모든 경고가 해결될 때까지 UTF-8 strict 모드로 시작하지 않습니다:

ts=2024-02-11T10:00:00Z caller=coordinator.go:118 level=error component=configuration msg="Loading configuration file failed" file=config.yml err="end of input: expected label value"

UTF-8 strict 모드는 전환 기간이 끝날 때 Alertmanager의 기본 모드가 될 것입니다.

Classic 모드

Classic 모드는 Alertmanager 버전 0.26.0 이하와 동일합니다:

alertmanager --config.file=config.yml --enable-feature="classic-mode"

fallback 모드나 UTF-8 strict 모드에 문제가 있다고 의심되면 이 모드를 사용할 수 있어요. 그런 경우에는 GitHub에 가능한 한 많은 정보를 담아 이슈를 열어주세요.

검증 (Verification)

Alertmanager 서버에서 활성화하기 전에 amtool로 Alertmanager 설정 파일이 UTF-8 strict 모드와 호환되는지 검증할 수 있어요. 이를 위해 실행 중인 Alertmanager 서버는 필요하지 않습니다.

Alertmanager 서버와 마찬가지로 amtool도 설정이 호환되지 않거나 불일치를 포함하면 경고를 기록합니다:

$ amtool check-config config.yml
Checking 'config.yml'
level=warn msg="Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted and backslashes are escaped. If you are still seeing this message please open an issue." input="foo=" origin=config err="end of input: expected label value" suggestion="foo=\"\""
level=warn msg="Matchers input has disagreement" input="qux=\"\\xf0\\x9f\\x99\\x82\"\n" origin=config
  SUCCESS
Found:
 - global config
 - route
 - 2 inhibit rules
 - 2 receivers
 - 0 templates

amtool에서 어떤 경고도 기록되지 않으면 설정이 UTF-8 strict 모드와 호환된다는 것을 알 수 있습니다:

$ amtool check-config config.yml
Checking 'config.yml'  SUCCESS
Found:
 - global config
 - route
 - 2 inhibit rules
 - 2 receivers
 - 0 templates

추가 검증 수준으로 amtool을 UTF-8 strict 모드로 사용할 수도 있어요. 명령이 실패하면 설정이 유효하지 않다는 것을 알게 됩니다:

$ amtool check-config config.yml --enable-feature="utf8-strict-mode"
level=warn msg="UTF-8 mode enabled"
Checking 'config.yml'  FAILED: end of input: expected label value

amtool: error: failed to validate 1 file(s)

명령이 성공하면 설정이 유효하다는 것을 알게 됩니다:

$ amtool check-config config.yml --enable-feature="utf8-strict-mode"
level=warn msg="UTF-8 mode enabled"
Checking 'config.yml'  SUCCESS
Found:
 - global config
 - route
 - 2 inhibit rules
 - 2 receivers
 - 0 templates

matcher (공통)

UTF-8 매처

UTF-8 매처는 세 개의 토큰으로 구성됩니다:

  • 라벨 이름을 위한 따옴표 없는 리터럴 또는 이중 따옴표 문자열.
  • =, !=, =~, !~ 중 하나. =는 같음, !=는 같지 않음, =~는 정규 표현식과 일치, !~는 정규 표현식과 일치하지 않음을 의미.
  • 정규 표현식 또는 라벨 값을 위한 따옴표 없는 리터럴 또는 이중 따옴표 문자열.

따옴표 없는 리터럴은 예약 문자를 제외한 모든 UTF-8 문자를 포함할 수 있어요. 예약 문자에는 공백과 { } ! = ~ , \ " ' \``의 모든 문자가 포함됩니다. 예를 들어 foo, [a-zA-Z]+, Προμηθεύς(그리스어로 Prometheus)는 모두 유효한 따옴표 없는 리터럴의 예입니다. 하지만 !가 예약 문자이므로 foo!`는 유효한 리터럴이 아닙니다.

이중 따옴표 문자열은 모든 UTF-8 문자를 포함할 수 있습니다. 따옴표 없는 리터럴과 달리 예약 문자가 없어요. 하지만 리터럴 이중 따옴표와 백슬래시는 단일 백슬래시로 이스케이프해야 합니다. 예를 들어 정규 표현식 \d+를 매칭하려면 백슬래시를 이스케이프해 "\\d+"로 해야 합니다. 이는 이중 따옴표 문자열이 Go의 string literals와 같은 규칙을 따르기 때문입니다. 이중 따옴표 문자열은 UTF-8 코드 포인트도 지원합니다. 예를 들어 "foo!", "bar,baz", "\"baz qux\"", "\xf0\x9f\x99\x82"입니다.

참고: YAML 따옴표 vs. 매처 토큰 따옴표

matchers: 목록의 각 항목은 YAML 파일이 처리된 후 Alertmanager가 파싱하는 단일 YAML 문자열입니다. YAML 따옴표는 전체 매처 문자열에 적용되며, 그 안의 개별 토큰을 파싱하거나 보호하지 않습니다. 위에서 설명한 이중 따옴표는 YAML이 이미 입력을 처리한 후 Alertmanager 자체 파서에 의해 처리됩니다.

  • Plain style(주변 따옴표 없음): 매처에 YAML 특수 문자({, }, [, ], ,, #, |, >, :)가 없을 때 작동. 예: env !~ preprod
  • Single-quoted style: 모든 YAML 특수 문자를 보호하고 매처 안에 리터럴 이중 따옴표를 허용. 예: 'env =~ "prod|staging"'
  • Double-quoted style: YAML 이스케이프 시퀀스를 지원하며, 값 안의 리터럴 이중 따옴표는 \"로 이스케이프해야 함. 예: "env !~ \"uat\""

주변 YAML 따옴표 없이 env =~ "prod"를 쓰는 것은 유효한 plain-style YAML입니다. 내부 이중 따옴표는 Alertmanager 파서에 의해 제거되며 YAML 특수 문자에 대한 보호를 제공하지 않아요. 값에 특수 문자가 포함될 수 있으면 항상 매처 전체를 YAML 레벨에서 따옴표로 감싸세요.

클래식 매처

클래식 매처는 PromQL과 OpenMetrics에서 영감을 받은 문법을 가진 문자열입니다. 클래식 매처의 문법은 세 개의 토큰으로 구성됩니다:

  • 유효한 Prometheus 라벨 이름.
  • =, !=, =~, !~ 중 하나. =는 같음, !=는 문자열이 같지 않음을, =~는 정규 표현식 일치에, !~는 정규 표현식 비일치에 사용. PromQL 셀렉터에서 알려진 것과 같은 의미.
  • 이중 따옴표로 묶일 수 있는 UTF-8 문자열. 각 토큰 앞이나 뒤에는 임의의 양의 공백이 있을 수 있음.

세 번째 토큰은 빈 문자열일 수 있습니다. 세 번째 토큰 안에서는 OpenMetrics 이스케이프 규칙이 적용됩니다: \"는 이중 따옴표, \n은 줄바꿈, \\는 리터럴 백슬래시. 이스케이프되지 않은 "는 세 번째 토큰 안에서 발생해서는 안 됩니다(첫 번째 또는 마지막 문자로만). 하지만 리터럴 줄바꿈 문자는 허용되며, \, n, "가 뒤따르지 않는 단일 \ 문자도 허용됩니다. 그 경우 리터럴 백슬래시로 작동합니다.

매처 구성 (Composition of matchers)

매처를 구성해 복잡한 매칭 표현식을 만들 수 있어요. 구성되면 전체 표현식이 일치하려면 모든 매처가 일치해야 합니다. 예를 들어 표현식 {alertname="Watchdog", severity=~"warning|critical"}은 라벨이 alertname=Watchdog, severity=critical인 알림과 일치하지만, alertname=Watchdog, severity=none인 알림과는 일치하지 않습니다. alertname이 Watchdog이지만 severity가 warning도 critical도 아니기 때문입니다.

매처를 YAML 목록으로 표현식에 구성할 수 있습니다:

matchers:
  - alertname = Watchdog
  - severity =~ "warning|critical"

또는 각 매처가 쉼표로 구분된 PromQL 스타일 표현식으로:

{alertname="Watchdog", severity=~"warning|critical"}

단일 후행 쉼표는 허용됩니다:

{alertname="Watchdog", severity=~"warning|critical",}

여는 {와 닫는 } 중괄호는 선택적입니다:

alertname="Watchdog", severity=~"warning|critical"

하지만 둘 다 있어야 하거나 둘 다 없어야 합니다. 불완전한 여는/닫는 중괄호는 가질 수 없습니다:

{alertname="Watchdog", severity=~"warning|critical"
alertname="Watchdog", severity=~"warning|critical"}

중복된 여는/닫는 중괄호도 가질 수 없습니다:

{{alertname="Watchdog", severity=~"warning|critical",}}

이중 따옴표 밖의 공백(스페이스, 탭, 줄바꿈)은 허용되며 매처 자체에는 영향을 주지 않습니다. 예를 들어:

{
   alertname = "Watchdog",
   severity =~ "warning|critical",
}

는 다음와 동등합니다:

{alertname="Watchdog",severity=~"warning|critical"}
더 많은 예시

더 많은 예시는 다음과 같습니다:

  • 두 개의 동등 매처를 YAML 목록으로 구성:
matchers:
  - foo = bar
  - dings != bums
  • 두 매처를 합쳐 축약형 YAML 목록으로 구성:
matchers: [ foo = bar, dings != bums ]

아래와 같이 축약형에서는 쉼표 같은 특수 문자 문제를 피하기 위해 이중 따옴표를 사용하는 것이 좋습니다:

matchers: [ "foo = \"bar,baz\"", "dings != bums" ]
  • 두 매처를 하나의 PromQL 유사 문자열로도 넣을 수 있습니다. 여기서는 단일 따옴표가 가장 잘 작동합니다:
matchers: [ '{foo="bar", dings!="bums"}' ]
  • YAML에서 이스케이프와 따옴표 규칙의 문제를 피하려면 YAML 블록을 사용할 수도 있습니다:
matchers:
  - |
      {quote=~"She said: \"Hi, all!( How're you…)?\""}

이 수신자 설정은 알림 대상(수신자)과 HTTP 기반 수신자를 위한 HTTP 클라이언트 옵션을 구성할 수 있게 해줍니다.

receiver

receiver는 하나 이상의 알림 통합의 이름 있는 구성입니다.

참고: 새 수신자에 대한 과거 유예(moratorium)가 해제되면서 기존 요구사항에 더해, 새 알림 통합에는 push 접근 권한이 있는 전담 관리자(committed maintainer)가 필요하다고 합의되었습니다.

# 수신자의 고유 이름.
name: <string>

# 이 수신자에 붙는 라벨로, 쿼리와 필터링에 사용.
labels:
  [ <labelname>: <labelvalue>, ... ]

# 여러 알림 통합을 위한 설정.
discord_configs:
  [ - <discord_config>, ... ]
email_configs:
  [ - <email_config>, ... ]
mattermost_configs:
  [ - <mattermost_config>, ... ]
msteams_configs:
  [ - <msteams_config>, ... ]
msteamsv2_configs:
  [ - <msteamsv2_config>, ... ]
jira_configs:
  [ - <jira_config>, ... ]
opsgenie_configs:
  [ - <opsgenie_config>, ... ]
pagerduty_configs:
  [ - <pagerduty_config>, ... ]
incidentio_configs:
  [ - <incidentio_config>, ... ]
pushover_configs:
  [ - <pushover_config>, ... ]
rocketchat_configs:
  [ - <rocketchat_config>, ... ]
slack_configs:
  [ - <slack_config>, ... ]
sns_configs:
  [ - <sns_config>, ... ]
telegram_configs:
  [ - <telegram_config>, ... ]
victorops_configs:
  [ - <victorops_config>, ... ]
webex_configs:
  [ - <webex_config>, ... ]
webhook_configs:
  [ - <webhook_config>, ... ]
wechat_configs:
  [ - <wechat_config>, ... ]

http_config (공통)

http_config는 수신자가 HTTP 기반 API 서비스와 통신하기 위해 사용하는 HTTP 클라이언트를 구성할 수 있게 해줍니다.

# 참고: `basic_auth`와 `authorization` 옵션은 상호 배타적입니다.

# 설정된 사용자 이름과 비밀번호로 `Authorization` 헤더를 설정합니다.
# password와 password_file은 상호 배타적입니다.
basic_auth:
  [ username: <string> ]
  [ password: <secret> ]
  [ password_file: <string> ]

# 선택적 `Authorization` 헤더 구성.
authorization:
  # 인증 유형을 설정.
  [ type: <string> | default: Bearer ]
  # 자격 증명을 설정. `credentials_file`과 상호 배타적.
  [ credentials: <secret> ]
  # 설정된 파일에서 읽은 자격 증명으로 자격 증명을 설정.
  # `credentials`와 상호 배타적.
  [ credentials_file: <filename> ]

# 선택적 OAuth 2.0 구성.
# basic_auth나 authorization과 동시에 사용할 수 없음.
oauth2:
  [ <oauth2> ]

# HTTP2를 활성화할지 여부.
[ enable_http2: <boolean> | default: true ]

# 선택적 프록시 URL.
[ proxy_url: <string> ]
# 프록시에서 제외해야 하는 IP, CIDR 표기, 도메인 이름을 포함할 수 있는
# 쉼표로 구분된 문자열. IP와 도메인 이름은
# 포트 번호를 포함할 수 있음.
[ no_proxy: <string> ]
# 환경 변수(HTTP_PROXY, http_proxy, HTTPS_PROXY, https_proxy, NO_PROXY, no_proxy)로
# 표시된 프록시 URL 사용
[ proxy_from_environment: <boolean> | default: false ]
# CONNECT 요청 중 프록시에 보낼 헤더를 지정.
[ proxy_connect_header:
  [ <string>: [<secret>, ...] ] ]

# HTTP 요청이 HTTP 3xx 리다이렉트를 따를지 구성.
[ follow_redirects: <boolean> | default = true ]

# TLS 설정을 구성.
tls_config:
  [ <tls_config> ]

# 각 요청과 함께 보낼 사용자 정의 HTTP 헤더.
# Prometheus 자체가 설정하는 헤더는 덮어쓸 수 없음.
http_headers:
  [ <http_header_config> ]
http_header_config (공통)
# 헤더 이름.
<string>:
    # 헤더 값.
    [ values: [<string>, ...] ]
    # 헤더 값. 구성 페이지에서 숨겨짐.
    [ secrets: [<secret>, ...] ]
    # 헤더 값을 읽을 파일.
    [ files: [<string>, ...] ]
oauth2 (공통)

클라이언트 자격 증명 부여 유형을 사용하는 OAuth 2.0 인증입니다. Alertmanager는 주어진 클라이언트 액세스 및 시크릿 키로 지정된 엔드포인트에서 액세스 토큰을 가져옵니다.

client_id: <string>
[ client_secret: <secret> ]

# 파일에서 클라이언트 시크릿을 읽음.
# `client_secret`과 상호 배타적.
[ client_secret_file: <filename> ]

# 토큰 요청을 위한 스코프.
scopes:
  [ - <string> ... ]

# 토큰을 가져올 URL.
token_url: <string>

# 토큰 URL에 추가할 선택적 파라미터.
endpoint_params:
  [ <string>: <string> ... ]

# 토큰 요청의 TLS 설정을 구성.
tls_config:
  [ <tls_config> ]

# 선택적 프록시 URL.
[ proxy_url: <string> ]
# 프록시에서 제외해야 하는 IP, CIDR 표기, 도메인 이름을 포함할 수 있는
# 쉼표로 구분된 문자열. IP와 도메인 이름은
# 포트 번호를 포함할 수 있음.
[ no_proxy: <string> ]
# 환경 변수(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy, no_proxy)로
# 표시된 프록시 URL 사용
[ proxy_from_environment: <boolean> | default: false ]
# CONNECT 요청 중 프록시에 보낼 헤더를 지정.
[ proxy_connect_header:
  [ <string>: [<secret>, ...] ] ]
tls_config (공통)

tls_config는 TLS 연결을 구성할 수 있게 해줍니다.

# 서버 인증서를 검증할 CA 인증서.
[ ca_file: <filename> ]

# 서버에 대한 클라이언트 인증을 위한 인증서 및 키 파일.
[ cert_file: <filename> ]
[ key_file: <filename> ]

# 서버 이름을 나타내는 ServerName 확장.
# http://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: <string> ]

# 서버 인증서 검증 비활성화.
[ insecure_skip_verify: <boolean> | default = false]

# 허용되는 최소 TLS 버전. 허용 값: TLS10 (TLS 1.0), TLS11 (TLS
# 1.1), TLS12 (TLS 1.2), TLS13 (TLS 1.3).
# 설정하지 않으면 Prometheus는 Go 기본 최소 버전(TLS 1.2)을 사용.
# https://pkg.go.dev/crypto/tls#Config의 MinVersion 참조.
[ min_version: <string> ]
# 허용되는 최대 TLS 버전. 허용 값: TLS10 (TLS 1.0), TLS11 (TLS
# 1.1), TLS12 (TLS 1.2), TLS13 (TLS 1.3).
# 설정하지 않으면 Prometheus는 Go 기본 최대 버전(TLS 1.3)을 사용.
# https://pkg.go.dev/crypto/tls#Config의 MaxVersion 참조.
[ max_version: <string> ]

수신자 통합 설정 (Receiver integration settings)

이 설정은 특정 수신자 통합을 구성할 수 있게 해줍니다.

discord_config

Discord 알림은 Discord 웹훅 API를 통해 전송됩니다. 채널용 웹훅 통합을 구성하는 방법은 Discord의 "Intro to Webhooks" 문서를 참고하세요.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# Discord 웹훅 URL.
# webhook_url와 webhook_url_file은 상호 배타적.
webhook_url: <string>
webhook_url_file: <string>

# 메시지 제목 템플릿.
[ title: <tmpl_string> | default = '{{ template "discord.default.title" . }}' ]

# 메시지 본문 템플릿.
[ message: <tmpl_string> | default = '{{ template "discord.default.message" . }}' ]

# 메시지 내용 템플릿. 2000자로 제한됨.
[ content: <tmpl_string> | default = '{{ template "discord.default.content" . }}' ]

# 메시지 사용자 이름.
[ username: <string> | default = '' ]

# 메시지 아바타 URL.
[ avatar_url: <string> | default = '' ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

email_config

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = false ]

# 알림을 보낼 이메일 주소.
# 쉼표로 구분된 rfc5322 호환 이메일 주소 목록을 허용.
to: <tmpl_string>

# 발신자 주소.
[ from: <tmpl_string> | default = global.smtp_from ]

# 이메일이 전송되는 SMTP 호스트.
[ smarthost: <string> | default = global.smtp_smarthost ]

# SMTP 서버에 자신을 식별하는 호스트명.
[ hello: <string> | default = global.smtp_hello ]

# SMTP 인증 정보.
# auth_password와 auth_password_file은 상호 배타적.
# auth_secret과 auth_secret_file은 상호 배타적.
[ auth_username: <string> | default = global.smtp_auth_username ]
[ auth_password: <secret> | default = global.smtp_auth_password ]
[ auth_password_file: <string> | default = global.smtp_auth_password_file ]
[ auth_secret: <secret> | default = global.smtp_auth_secret ]
[ auth_secret_file: <string> | default = global.smtp_auth_secret_file ]
[ auth_identity: <string> | default = global.smtp_auth_identity ]

# SMTP TLS 요구사항.
# Go는 원격 SMTP 엔드포인트로의 암호화되지 않은 연결을 지원하지 않음에 유의.
[ require_tls: <boolean> | default = global.smtp_require_tls ]

# 더 나은 보안을 위해 암시적 TLS(직접 TLS 연결)를 강제.
# true: 암시적 TLS(모든 포트에서 직접 TLS 연결) 강제
# nil (기본값): 하위 호환성을 위해 포트 기반 자동 감지(465=암시적, 그 외=명시적)
[ force_implicit_tls: <boolean> | default = nil ]

# TLS 구성.
tls_config:
  [ <tls_config> | default = global.smtp_tls_config ]

# 이메일 알림의 HTML 본문.
[ html: <tmpl_string> | default = '{{ template "email.default.html" . }}' ]
# 이메일 알림의 텍스트 본문.
[ text: <tmpl_string> ]

# 추가 헤더 이메일 헤더 키/값 쌍. 알림 구현이
# 이전에 설정한 모든 헤더를 덮어씀.
[ headers: { <string>: <tmpl_string>, ... } ]

# 이메일 스레딩 구성.
threading:
  # 스레딩 활성화 여부. 활성화하면 같은
  # 알림 그룹의 알림 알림이 같은 이메일 스레드에 표시됨.
  [ enabled: <boolean> | default = false ]
  # 스레드로 묶을 현재 날짜의 세분성. 허용 값: daily, none.
  # (none은 날짜 없이 알림 그룹 키로 그룹화함을 의미).
  [ thread_by_date: <string> | default = daily ]
이메일 TLS 구성 예시
# 예시 1: 모든 포트에서 암시적 TLS 강제 (보안에 권장)
receivers:
  - name: email-implicit-tls
    email_configs:
      - to: [email protected]
        smarthost: smtp.example.com:8465
        force_implicit_tls: true  # 포트 8465에서 직접 TLS 연결 사용

# 예시 2: 하위 호환 (force_implicit_tls 미지정)
receivers:
  - name: email-default
    email_configs:
      - to: [email protected]
        smarthost: smtp.example.com:465  # 암시적 TLS 자동 감지
      - to: [email protected]
        smarthost: smtp.example.com:587  # 명시적 TLS 자동 감지

mattermost_config

Mattermost 알림은 Mattermost 웹훅 API를 통해 전송됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# Mattermost 웹훅 URL.
# webhook_url과 webhook_url_file은 상호 배타적.
webhook_url: <string>
webhook_url_file: <string>

# 메시지가 게시되는 채널을 재정의. 표시 이름이 아닌 채널 이름을 사용. 예를 들어 Town Square가 아니라 town-square 사용.
[ channel: <string> | default = '' ]

# 메시지가 게시되는 사용자 이름을 재정의.
# 웹훅 생성 시 설정된 사용자 이름이 기본값이며; 생성 시 사용자 이름이 설정되지 않으면 webhook이 사용됨.
[ username: <string> | default = '' ]

# 메시지가 게시되는 프로필 사진을 재정의.
[ icon_url: <string> | default = '' ]

# 프로필 사진과 icon_url 파라미터를 재정의.
[ icon_emoji: <string> | default = '' ]

# 더 풍부한 서식 옵션을 위한 메시지 첨부.
# Slack과의 호환을 위한 것.
[ fallback: <tmpl_string> | default = '{{ template "mattermost.default.fallback" . }}' ]
[ color: <tmpl_string> | default = '{{ template "mattermost.default.color" . }}' ]
[ title: <tmpl_string> | default = '{{ template "mattermost.default.title" . }}' ]
[ title_link: <tmpl_string> | default = '{{ template "mattermost.default.titlelink" . }}' ]
[ text: <tmpl_string> | default = '{{ template "mattermost.default.text" . }}' ]
[ pretext: <tmpl_string> | default = '' ]
[ author_name: <tmpl_string> | default = '' ]
[ author_link: <tmpl_string> | default = '' ]
[ author_icon: <tmpl_string> | default = '' ]
[ fields: <mattermost_fields> | default = '' ]
  [ <mattermost_field> ... ]
[ thumb_url: <string> | default = '' ]
[ footer: <tmpl_string> | default = '' ]
[ footer_icon: <string> | default = '' ]
[ image_url: <string> | default = '' ]
# Deprecated: 최상위 필드를 대신 사용하세요; `attachments`는 향후 제거될 예정입니다.
[ attachments: <mattermost_attachments> ]
  [ <mattermost_attachment> ... ]

[ props:
  [ <string>: <string>, ... ] ]

[ priority:
  [ <mattermost_priority> ] ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]
mattermost_attachment

자세한 내용은 Mattermost 문서를 참고하세요.

[ fallback: <tmpl_string> | default = '' ]
[ color: <tmpl_string> | default = '' ]
[ pretext: <tmpl_string> | default = '' ]
[ text: <tmpl_string> | default = '' ]
[ author_name: <tmpl_string> | default = '' ]
[ author_link: <tmpl_string> | default = '' ]
[ author_icon: <tmpl_string> | default = '' ]
[ title: <tmpl_string> | default = '' ]
[ title_link: <tmpl_string> | default = '' ]
# Slack 필드와 동일.
[ fields: <mattermost_fields> | default = '' ]
  [ <mattermost_field> ... ]
[ thumb_url: <string> | default = '' ]
[ footer: <tmpl_string> | default = '' ]
[ footer_icon: <string> | default = '' ]
[ image_url: <string> | default = '' ]
mattermost_props
# Props 카드는 Mattermost로 보낼 추가 정보(Markdown 형식 텍스트)를 허용하며,
# 사용자가 게시물 옆에 표시된 정보 아이콘을 선택한 후에만 RHS 패널에 표시된다.
[ card: <tmpl_string> | default = '' ]
mattermost_priority
# priority는 메시지에 라벨을 추가합니다. 가능한 값은 "urgent", "important", "standard"입니다.
[ priority: <string> | default = '' ]

# true로 설정하면 메시지 옆에 체크마크 아이콘을 표시해 사용자로부터 확인(acknowledgment)이
# 필요함을 표시한다. 이를 위해서는 메시지 우선순위를 Important 또는 Urgent로 설정해야 함을
# 명심하세요.
# Mattermost 엔터프라이즈 버전에서만 가능.
[ requested_ack: <boolean> | default = false ]

# Urgent 메시지에서만. true로 설정하면 수신자가 메시지를 확인할 때까지
# 5분마다 지속 알림을 받는다.
# Mattermost 엔터프라이즈 버전에서만 가능.
[ persistent_notifications: <boolean> | default = false ]

msteams_config

Microsoft Teams 알림은 Incoming Webhooks API 엔드포인트를 통해 전송됩니다.

비활성화 공지: Microsoft는 Microsoft Teams를 통한 Microsoft 365 커넥터의 생성과 사용을 비활성화하고 있습니다. msteamsv2 config와 함께 Workflows로 마이그레이션하는 것을 고려하세요.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# 수신 웹훅 URL.
# webhook_url과 webhook_url_file은 상호 배타적.
[ webhook_url: <string> ]
[ webhook_url_file: <string> ]

# 메시지 제목 템플릿.
[ title: <tmpl_string> | default = '{{ template "msteams.default.title" . }}' ]

# 메시지 요약 템플릿.
[ summary: <tmpl_string> | default = '{{ template "msteams.default.summary" . }}' ]

# 메시지 본문 템플릿.
[ text: <tmpl_string> | default = '{{ template "msteams.default.text" . }}' ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

msteamsv2_config

flows에서 요구하는 적응형 카드(adaptive cards)와 함께 새 메시지 형식을 사용하는 Microsoft Teams v2 알림입니다. 이 통합을 설정하는 방법에 대한 자세한 내용은 문서를 따르세요.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# 수신 웹훅 URL.
# webhook_url과 webhook_url_file은 상호 배타적.
[ webhook_url: <string> ]
[ webhook_url_file: <string> ]

# 메시지 제목 템플릿.
[ title: <tmpl_string> | default = '{{ template "msteamsv2.default.title" . }}' ]

# 메시지 본문 템플릿.
[ text: <tmpl_string> | default = '{{ template "msteamsv2.default.text" . }}' ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

jira_config

JIRA 알림은 JIRA Rest API v2 또는 JIRA REST API v3를 통해 전송됩니다.

참고: 이 통합은 Jira Cloud 인스턴스에 대해서만 테스트되었습니다. Jira Data Center(온프레미스 인스턴스)는 작동할 수 있지만 보장되지는 않습니다.

두 API 모두 같은 기능 집합을 가집니다. 차이는 V2가 이슈 설명에 Wiki Markup을 지원하고 V3가 Atlassian Document Format (ADF)을 지원한다는 것입니다. 기본 jira.default.description 템플릿은 V2에서만 작동합니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# API 요청을 보낼 URL. 전체 API 경로가 포함되어야 함.
# 예: https://company.atlassian.net/rest/api/2/
[ api_url: <string> | default = global.jira_api_url ]

# 검색 요청에 사용할 API 유형. auto, cloud 또는 datacenter 중 하나.
# 예: cloud
[ api_type: <string> | default = auto ]

# 이슈가 생성되는 프로젝트 키.
project: <string>

# 이슈 요약 구성.
[ summary:
    # 이슈 요약 템플릿.
    [ template: <tmpl_string> | default = '{{ template "jira.default.summary" . }}' ]

    # false로 설정하면 기존 이슈 업데이트 시 요약이 업데이트되지 않음.
    [ enable_update: <boolean> | default = true ]
]

# 이슈 설명 구성.
[ description:
    # 이슈 설명 템플릿.
    [ template: <tmpl_string> | default = '{{ template "jira.default.description" . }}' ]

    # false로 설정하면 기존 이슈 업데이트 시 설명이 업데이트되지 않음.
    [ enable_update: <boolean> | default = true ]
]

# 이슈에 추가할 라벨.
labels:
  [ - <string> ... ]

# 이슈의 우선순위.
[ priority: <string> | default = '{{ template "jira.default.priority" . }}' ]

# 이슈의 유형 (예: Bug).
[ issue_type: <string> ]

# 이슈를 해결하는 워크플로 전환의 이름. 대상 상태는 "done" 카테고리를 가져야 함.
# 참고: 전환의 이름은 지역화될 수 있으며 서비스 계정의 언어 설정에 따라 달라짐.
[ resolve_transition: <string> ]

# 이슈를 다시 여는 워크플로 전환의 이름. 대상 상태는 "done" 카테고리를 가지면 안 됨.
# 참고: 전환의 이름은 지역화될 수 있으며 서비스 계정의 언어 설정에 따라 달라짐.
[ reopen_transition: <string> ]

# reopen_transition이 정의되면 해당 해결(resolution)을 가진 이슈를 무시.
[ wont_fix_resolution: <string> ]

# reopen_transition이 정의되면 이 값보다 오래되지 않은(가장 가까운 분으로 내림)
# 이슈를 다시 염. 이슈의 나이를 결정하는 데 resolutiondate 필드가 사용됨.
[ reopen_duration: <duration> ]

# 기타 이슈 및 사용자 정의 필드.
fields:
  [ <string>: <string> ... ]

# HTTP 클라이언트의 구성. HTTP `Authorization` 헤더의 일부로
# 개인 액세스 토큰(PAT)을 제공하려면 이 구성을 사용해야 함.
# Jira Cloud의 경우 이메일 주소를 사용자 이름으로, PAT를 비밀번호로 사용해 basic_auth를 사용.
# Jira Data Center의 경우 'authorization' 필드를 'credentials: <secret>'과 함께 사용.
[ http_config: <http_config> | default = global.http_config ]

labels 필드는 이슈에 추가되는 라벨 목록입니다. 템플릿 표현식이 지원됩니다. 예를 들어:

labels:
  - 'alertmanager'
  - '{{ .CommonLabels.severity }}'
jira_field

Jira 이슈 필드는 여러 유형을 가질 수 있습니다. 필드 유형에 따라 값이 다르게 제공되어야 합니다. 더 많은 예시는 https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/#setting-custom-field-data-for-other-field-types를 참고하세요.

fields:
    # Components
    components: { name: "Monitoring" }
    # Custom Field TextField
    customfield_10001: "Random text"
    # Custom Field SelectList
    customfield_10002: {"value": "red"}
    # Custom Field MultiSelect
    customfield_10003: [{"value": "red"}, {"value": "blue"}, {"value": "green"}]

opsgenie_config

OpsGenie 알림은 OpsGenie API를 통해 전송됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# OpsGenie API와 통신할 때 사용할 API 키.
[ api_key: <secret> | default = global.opsgenie_api_key ]

# OpsGenie API와 통신할 때 사용할 API 키의 파일 경로. api_key와 충돌.
[ api_key_file: <string> | default = global.opsgenie_api_key_file ]

# OpsGenie API 요청의 기본 URL.
[ api_url: <string> | default = global.opsgenie_api_url ]

# 130자로 제한된 알림 텍스트.
[ message: <tmpl_string> | default = '{{ template "opsgenie.default.message" . }}' ]

# 알림의 설명.
[ description: <tmpl_string> | default = '{{ template "opsgenie.default.description" . }}' ]

# 알림 발신자로의 백링크.
[ source: <tmpl_string> | default = '{{ template "opsgenie.default.source" . }}' ]

# 알림에 대한 추가 세부 정보를 제공하는 임의의 키/값 쌍 집합.
# 기본적으로 모든 공통 라벨이 세부 정보로 포함됨.
[ details: { <string>: <tmpl_string>, ... } ]

# 알림을 담당하는 응답자 목록.
responders:
  [ - <opsgenie_responder> ... ]

# 알림에 붙는 쉼표로 구분된 태그 목록.
[ tags: <string> ]

# 추가 알림 메모.
[ note: <string> ]

# 알림의 우선순위 레벨. 가능한 값은 P1, P2, P3, P4, P5.
[ priority: <string> ]

# OpsGenie에 이미 존재하는 경우 알림의 메시지와 설명을 업데이트할지 여부.
# 기본적으로 알림은 OpsGenie에서 절대 업데이트되지 않고, 새 메시지만 활동 로그에 나타남.
[ update_alerts: <boolean> | default = false ]

# 알림이 관련된 도메인을 지정하는 데 쓸 수 있는 선택적 필드.
[ entity: <string> ]

# 알림에 사용할 수 있는 쉼표로 구분된 작업 목록.
[ actions: <string> ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]
opsgenie_responder
# 이 필드들 중 정확히 하나가 정의되어야 함.
[ id: <string> ]
[ name: <string> ]
[ username: <string> ]

# `team`, `teams`, `user`, `escalation` 또는 `schedule` 중 하나.
#
# `teams` 응답자는 위의 `name` 필드를 사용해 구성됨.
# 이 필드는 쉼표로 구분된 팀 이름 목록을 포함할 수 있음.
# 목록이 비어 있으면 응답자가 구성되지 않음.
type: <string>

pagerduty_config

PagerDuty 알림은 PagerDuty API를 통해 전송됩니다. PagerDuty는 통합 방법에 대한 문서를 제공합니다. Alertmanager의 v0.11 이상이 지원하는 PagerDuty Events API v2와는 중요한 차이가 있습니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# 라우팅 키와 서비스 키는 상호 배타적.
# PagerDuty 통합 키 (PagerDuty 통합 유형 `Events API v2`를 사용할 때).
# `routing_key_file`과 상호 배타적.
routing_key: <secret>
# 파일에서 PagerDuty 라우팅 키를 읽음.
# `routing_key`와 상호 배타적.
routing_key_file: <string>
# PagerDuty 통합 키 (PagerDuty 통합 유형 `Prometheus`를 사용할 때).
# `service_key_file`과 상호 배타적.
service_key: <secret>
# 파일에서 PagerDuty 서비스 키를 읽음.
# `service_key`와 상호 배타적.
service_key_file: <string>

# API 요청을 보낼 URL
[ url: <string> | default = global.pagerduty_url ]

# Alertmanager의 클라이언트 식별.
[ client: <tmpl_string> | default = '{{ template "pagerduty.default.client" . }}' ]
# 알림 발신자로의 백링크.
[ client_url: <tmpl_string> | default = '{{ template "pagerduty.default.clientURL" . }}' ]

# 인시던트의 설명.
[ description: <tmpl_string> | default = '{{ template "pagerduty.default.description" .}}' ]

# 인시던트의 심각도.
[ severity: <tmpl_string> | default = 'error' ]

# 영향받은 시스템의 고유 위치.
[ source: <tmpl_string> | default = client ]

# 인시던트에 대한 추가 세부 정보를 제공하는 임의의 키/값 쌍 집합.
# PagerDuty 통합 유형 `Events API v2`를 사용할 때 중첩 키/값 쌍이 허용됨.
[ details: { <string>: <tmpl_string>, ... } | default = {
  firing:       '{{ .Alerts.Firing | toJSON }}'
  resolved:     '{{ .Alerts.Resolved | toJSON }}'
  num_firing:   '{{ .Alerts.Firing | len }}'
  num_resolved: '{{ .Alerts.Resolved | len }}'
} ]

# 인시던트에 첨부할 이미지.
images:
  [ <pagerduty_image> ... ]

# 인시던트에 첨부할 링크.
links:
  [ <pagerduty_link> ... ]

# 영향받은 시스템에서 고장난 부분 또는 구성 요소.
[ component: <tmpl_string> ]

# 소스의 클러스터 또는 그룹.
[ group: <tmpl_string> ]

# 이벤트의 클래스/유형.
[ class: <tmpl_string> ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

# pagerduty 요청이 완료되기를 기다리는 최대 시간. 이 시간이 지나면
# 요청이 실패하고 재시도될 수 있음. 기본값 0s는
# 타임아웃이 적용되지 않아야 함을 나타냄.
# 참고: group_interval보다 높게 설정하면 효과가 없음.
[ timeout: <duration> | default = 0s ]
pagerduty_image (PagerDuty)

필드는 PagerDuty API 문서에 문서화되어 있습니다.

href: <string>
src: <string>
alt: <string>
pagerduty_link (PagerDuty)

필드는 PagerDuty API 문서에 문서화되어 있습니다.

href: <string>
text: <string>

pushover_config

Pushover 알림은 Pushover API를 통해 전송됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# 수신자 사용자의 키.
# user_key와 user_key_file은 상호 배타적.
user_key: <string>
user_key_file: <string>

# 등록된 애플리케이션의 API 토큰. https://pushover.net/apps 참조.
# 이 Prometheus 앱을 복제해 토큰을 등록할 수도 있음:
# https://pushover.net/apps/clone/prometheus
# token과 token_file은 상호 배타적.
token: <string>
token_file: <string>

# 알림 제목.
[ title: <tmpl_string> | default = '{{ template "pushover.default.title" . }}' ]

# 알림 메시지.
[ message: <tmpl_string> | default = '{{ template "pushover.default.message" . }}' ]

# 메시지와 함께 표시되는 보조 URL.
[ url: <tmpl_string> | default = '{{ template "pushover.default.url" . }}' ]

# 알림을 보낼 선택적 기기. https://pushover.net/api#device 참조.
[ device: <string> ]

# 알림에 사용할 선택적 사운드. https://pushover.net/api#sound 참조.
[ sound: <string> ]

# 우선순위. https://pushover.net/api#priority 참조.
[ priority: <tmpl_string> | default = '{{ if eq .Status "firing" }}2{{ else }}0{{ end }}' ]

# Pushover 서버가 사용자에게 같은 알림을 보내는 주기.
# 최소 30초여야 함.
[ retry: <duration> | default = 1m ]

# 사용자가 알림을 확인하지 않는 한 알림이 계속 재시도될 기간.
[ expire: <duration> | default = 1h ]

# 알림에 사용할 선택적 TTL(수명). https://pushover.net/api#ttl 참조.
[ ttl: <duration> ]

# 메시지에 대한 선택적 HTML/monospace 서식. https://pushover.net/api#html 참조.
# html과 monospace 서식은 상호 배타적.
[ html: <boolean> | default = false ]
[ monospace: <boolean> | default = false ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

rocketchat_config

Rocketchat 알림은 Rocketchat REST API를 통해 전송됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]
[ api_url: <string> | default = global.rocketchat_api_url ]
[ channel: <string> | default = global.rocketchat_api_url ]

# 발신자 토큰과 token_id
# https://docs.rocket.chat/use-rocket.chat/user-guides/user-panel/my-account#personal-access-tokens 참조.
# token과 token_file은 상호 배타적.
# token_id와 token_id_file은 상호 배타적.
token: <string>
token_file: <string>
token_id: <string>
token_id_file: <string>

[ color: <string> ... ]
[ image_url: <string> ... ]
[ thumb_url: <string> ... ]
[ link_names: <boolean> ... ]
[ short_fields: <boolean> | default = false ]
actions:
  [ <rocketchat_action> ... ]
rocketchat_field

필드는 Rocketchat API 문서에 문서화되어 있습니다.

[ title: <string> ]
[ value: <string> ]
[ short: <boolean> | default = rocketchat_config.short_fields ]
rocketchat_action

필드는 Rocketchat API api 모델에 문서화되어 있습니다.

[ type: <string> | ignored, only "button" is supported ]
[ text: <string> ]
[ url: <string> ]
[ msg: <string> ]

slack_config

Slack 알림은 Incoming webhooks 또는 Bot tokens를 통해 보낼 수 있습니다.

수신 웹훅을 사용한다면 api_url을 수신 웹훅의 URL로 설정해야 하며, api_url_file에서 참조하는 파일에 그것을 쓰거나 해야 합니다.

Bot 토큰을 사용한다면 api_urlhttps://slack.com/api/chat.postMessage로 설정하고, bot 토큰을 http_config의 인증 자격 증명으로 설정하며, channel에 알림을 보낼 채널 이름 또는 채널 ID 중 하나를 포함해야 해요. 채널 이름을 사용한다면 #는 선택적입니다.

알림에는 첨부가 포함됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = false ]
# Slack 웹훅 URL. api_url/api_url_file OR app_token/app_token_file 중 하나를 설정해야 하며 둘 다는 안 됨.
# 여기에 설정된 것이 없으면 전역 설정으로 기본값.
[ api_url: <string> | default = global.slack_api_url ]
[ api_url_file: <string> | default = global.slack_api_url_file ]

# OAuth 인증을 위한 Slack App 토큰. api_url/api_url_file과 상호 배타적.
# 로컬 인증이나 웹훅 URL이 설정되지 않으면 전역 설정으로 기본값.
[ app_token: <secret> | default = global.slack_app_token ]
[ app_token_file: <string> | default = global.slack_app_token_file ]

# Slack App URL. app_token 인증을 사용할 때 필수.
[ app_url: <string> | default = global.slack_app_url ]

# 알림을 보낼 채널 또는 사용자.
channel: <tmpl_string>

# Slack 웹훅 API가 정의한 API 요청 데이터.
[ icon_emoji: <tmpl_string> | default = '{{ template "slack.default.iconemoji" . }}' ]
[ icon_url: <tmpl_string> | default = '{{ template "slack.default.iconurl" . }}' ]
[ link_names: <boolean> | default = false ]
# Slack 메시지의 텍스트 내용.
# 설정하면 Slack 페이로드의 최상위 'text' 필드로 전송됨.
# 간단한 알림이나 Slack Workflow Webhooks와의 호환에 유용.
[ message_text: <tmpl_string> ]
[ username: <tmpl_string> | default = '{{ template "slack.default.username" . }}' ]
# 다음 파라미터는 첨부를 정의.
actions:
  [ <slack_action> ... ]
[ callback_id: <tmpl_string> | default = '{{ template "slack.default.callbackid" . }}' ]
[ color: <tmpl_string> | default = '{{ template "slack.default.color" . }}' ]
[ fallback: <tmpl_string> | default = '{{ template "slack.default.fallback" . }}' ]
fields:
  [ <slack_field> ... ]
[ footer: <tmpl_string> | default = '{{ template "slack.default.footer" . }}' ]
[ mrkdwn_in: [<string>, ...] | default = ["fallback", "pretext", "text"] ]
[ pretext: <tmpl_string> | default = '{{ template "slack.default.pretext" . }}' ]
[ short_fields: <boolean> | default = false ]
[ text: <tmpl_string> | default = '{{ template "slack.default.text" . }}' ]
[ title: <tmpl_string> | default = '{{ template "slack.default.title" . }}' ]
[ title_link: <tmpl_string> | default = '{{ template "slack.default.titlelink" . }}' ]
[ image_url: <string> ]
[ thumb_url: <string> ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

# slack 요청이 완료되기를 기다리는 최대 시간. 이 시간이 지나면
# 요청이 실패하고 재시도될 수 있음. 기본값 0s는
# 타임아웃이 적용되지 않아야 함을 나타냄.
# 참고: group_interval보다 높게 설정하면 효과가 없음.
[ timeout: <duration> | default = 0s ]

# 알림 상태 변경 시 새 메시지를 만들지 않고 기존 Slack 메시지를 업데이트함.
# 웹훅 URL은 업데이트를 지원하지 않음.
[ update_message: <boolean> | default = false ]
slack_action (Slack)

필드는 메시지 첨부인터랙티브 메시지에 대한 Slack API 문서에 문서화되어 있습니다.

text: <tmpl_string>
type: <string>
# url 또는 name과 value 중 하나가 필수.
[ url: <string> ]
[ name: <string> ]
[ value: <string> ]

[ confirm: <slack_confirmation_field> ]
[ style: <string> | default = '' ]
slack_confirmation_field (Slack)

필드는 Slack API 문서에 문서화되어 있습니다.

text: <tmpl_string>
[ dismiss_text: <tmpl_string> | default '' ]
[ ok_text: <tmpl_string> | default '' ]
[ title: <tmpl_string> | default '' ]
slack_field (Slack)

필드는 Slack API 문서에 문서화되어 있습니다.

title: <tmpl_string>
value: <tmpl_string>
[ short: <boolean> | default = slack_config.short_fields ]

sns_config

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# SNS API URL i.e. https://sns.us-east-2.amazonaws.com.
# 지정하지 않으면 SNS SDK의 SNS API URL이 사용됨.
[ api_url: <string> ]

# 요청에 서명하기 위해 AWS의 Signature Verification 4 서명 프로세스를 구성.
sigv4:
  [ <sigv4_config> ]

# SNS 토픽 ARN, i.e. arn:aws:sns:us-east-2:698519295917:My-Topic
# 이 값을 지정하지 않으면 phone_number 또는 target_arn 값을 지정해야 함.
# FIFO SNS 토픽을 사용한다면 메시지 그룹 간격을 5분보다 길게 설정해야 함
# SNS 기본 중복 제거 창에 의해 같은 그룹 키를 가진 메시지가 중복 제거되는 것을 막기 위해.
[ topic_arn: <string> ]

# 메시지가 이메일 엔드포인트로 전달될 때의 제목 줄.
[ subject: <tmpl_string> | default = '{{ template "sns.default.subject" .}}' ]

# 메시지가 E.164 형식의 SMS로 전달되는 경우의 전화번호.
# 이 값을 지정하지 않으면 topic_arn 또는 target_arn 값을 지정해야 함.
[ phone_number: <string> ]

# 모바일 알림으로 메시지가 전달되는 경우의 모바일 플랫폼 엔드포인트 ARN.
# 이 값을 지정하지 않으면 topic_arn 또는 phone_number 값을 지정해야 함.
[ target_arn: <string> ]

# SNS 알림의 메시지 내용.
[ message: <tmpl_string> | default = '{{ template "sns.default.message" .}}' ]

# SNS 메시지 속성.
attributes:
  [ <string>: <string> ... ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

# 기본 tracing 래핑 클라이언트 대신 AWS SDK의 HTTP 클라이언트(BuildableClient)를 강제.
# AWS SDK가 사용자 정의 CA 번들을 주입해야 할 때 필요(예: AWS 공유 구성의 `ca_bundle`).
# AWS_CA_BUNDLE 환경 변수가 설정되면 자동 활성화됨.
#
# 이 플래그가 설정되면 SNS 요청에 대한 tracing이 비활성화되고, `http_config`의
# `tls_config`와 프록시 필드만 적용됨. 다른 `http_config` 노브(basic_auth,
# oauth2, authorization, follow_redirects, enable_http2, http_headers)는
# 조용히 무시됨 — 대부분 AWS 호출(SigV4 사용)에는 관련이 없지만,
# SNS에 대해 그것에 의존한다면 이 옵션을 활성화하지 마세요.
[ use_aws_http_client: <boolean> | default = false ]
sigv4_config (SNS)
# AWS 지역. 비어 있으면 기본 자격 증명 체인의 지역이 사용됨.
[ region: <string> ]

# AWS API 키. access_key와 secret_key 둘 다 제공되거나 둘 다 비어 있어야 함.
# 비어 있으면 환경 변수 `AWS_ACCESS_KEY_ID`와 `AWS_SECRET_ACCESS_KEY`가 사용됨.
[ access_key: <string> ]
[ secret_key: <secret> ]

# 인증에 사용되는 이름 있는 AWS 프로필.
[ profile: <string> ]

# AWS API 키 대신 사용할 수 있는 AWS Role ARN.
[ role_arn: <string> ]

# 역할을 맡을 때 사용되는 AWS External ID.
# role_arn과만 사용할 수 있음.
[ external_id: <string> ]

telegram_config

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# Telegram API URL i.e. https://api.telegram.org.
# 지정하지 않으면 기본 API URL이 사용됨.
[ api_url: <string> | default = global.telegram_api_url ]

# Telegram 봇 토큰. `bot_token_file`과 상호 배타적.
[ bot_token: <secret> ]

# 파일에서 Telegram 봇 토큰을 읽음. `bot_token`과 상호 배타적.
[ bot_token_file: <string> ]

# 메시지를 보낼 채팅의 ID. `chat_id_file`과 상호 배타적.
[ chat_id: <string> ]

# 파일에서 채팅 ID를 읽음. `chat_id`와 상호 배타적.
[ chat_id_file: <string> ]

# 메시지를 보낼 메시지 스레드의 선택적 ID.
[ message_thread_id: <string> ]

# 메시지 템플릿.
[ message: <tmpl_string> default = '{{ template "telegram.default.message" .}}' ]

# 텔레그램 알림 비활성화
[ disable_notifications: <boolean> | default = false ]

# 텔레그램 메시지의 파싱 모드. 지원되는 값은 MarkdownV2, Markdown, HTML, 그리고 순수 텍스트를 위한 빈 문자열.
# 메시지가 Telegram의 문자 제한을 초과하면, parse_mode가 HTML로 설정된 경우 잘리거나 폴백 메시지로 대체됨.
[ parse_mode: <string> | default = "HTML" ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

victorops_config

VictorOps 알림은 VictorOps API를 통해 전송됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# VictorOps API와 통신할 때 사용할 API 키.
# `api_key_file`과 상호 배타적.
[ api_key: <secret> | default = global.victorops_api_key ]

# VictorOps API와 통신할 때 사용할 API 키를 파일에서 읽음.
# `api_key`와 상호 배타적.
[ api_key_file: <string> | default = global.victorops_api_key_file ]

# VictorOps API URL.
[ api_url: <string> | default = global.victorops_api_url ]

# 알림을 팀에 매핑하는 데 사용되는 키.
routing_key: <string>

# 알림의 동작을 설명 (CRITICAL, WARNING, INFO).
[ message_type: <string> | default = 'CRITICAL' ]

# 알림된 문제의 요약을 포함.
[ entity_display_name: <tmpl_string> | default = '{{ template "victorops.default.entity_display_name" . }}' ]

# 알림된 문제의 긴 설명을 포함.
[ state_message: <tmpl_string> | default = '{{ template "victorops.default.state_message" . }}' ]

# 상태 메시지가 온 모니터링 도구.
[ monitoring_tool: <tmpl_string> | default = '{{ template "victorops.default.monitoring_tool" . }}' ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

webhook_config

웹훅 수신자는 일반 수신자를 구성할 수 있게 해줍니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# HTTP POST 요청을 보낼 엔드포인트.
# url과 url_file은 상호 배타적.
url: <string>
url_file: <string>

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

# 단일 웹훅 메시지에 포함할 최대 알림 수. 이 임계값을 초과하는 알림은
# 잘림. 기본값(0)으로 두면 모든 알림이 포함됨.
[ max_alerts: <int> | default = 0 ]

# 웹훅 요청이 완료되기를 기다리는 최대 시간. 이 시간이 지나면
# 요청이 실패하고 재시도될 수 있음. 기본값 0s는
# 타임아웃이 적용되지 않아야 함을 나타냄.
# 참고: group_interval보다 높게 설정하면 효과가 없음.
[ timeout: <duration> | default = 0s ]

# 웹훅 엔드포인트로 보낼 사용자 정의 페이로드를 정의.
# 스스로 책임지고 사용하세요: 이것은 Go 템플릿을 사용해
# 사용자 정의 페이로드를 정의할 수 있게 하는 고급 구성 옵션입니다. Alertmanager는
# 결과 페이로드에 어떤 검증도 수행하지 않으며, 생성된 페이로드가 수신 엔드포인트가
# 기대하는 형식인지 확인하는 것은 여러분의 책임입니다.
# 페이로드는 유효한 JSON이어야 합니다. 도움이 필요하면 `toJson` 함수를 사용할 수 있습니다.
# 이 옵션 사용으로 인한 문제에 대해 ALERTMANAGER TEAM은 어떤 지원도 제공하지 않을 것입니다.
[ payload: { <string>: <tmpl_string>, ... } ]

Alertmanager는 다음과 같은 JSON 형식으로 구성된 엔드포인트에 HTTP POST 요청을 보냅니다:

{
  "version": "4",
  "groupKey": <string>,              // 알림 그룹을 식별하는 키 (예: 중복 제거용)
  "truncatedAlerts": <int>,          // "max_alerts"로 인해 잘린 알림 수
  "status": "<resolved|firing>",
  "receiver": <string>,
  "groupLabels": <object>,
  "commonLabels": <object>,
  "commonAnnotations": <object>,
  "externalURL": <string>,           // Alertmanager로의 백링크.
  "notification_reason": <string>,   // 이 알림이 생성된 이유를 나타내는 문자열
  "alerts": [
    {
      "status": "<resolved|firing>",
      "labels": <object>,
      "annotations": <object>,
      "startsAt": "<rfc3339>",
      "endsAt": "<rfc3339>",
      "generatorURL": <string>,      // 알림을 일으킨 엔티티를 식별
      "fingerprint": <string>        // 알림을 식별할 핑거프린트
    },
    ...
  ]
}

이 기능을 가진 통합 목록이 있습니다.

incidentio_config

incident.io 알림은 incident.io Alert Sources API를 통해 전송됩니다.

이 통합을 구성할 때 http_config를 통해 authorization을 직접 설정하거나, alert_source_token 또는 alert_source_token_file 중 하나를 사용해 구성할 수 있어요. alert_source_token 또는 alert_source_token_file의 구성이 http_config보다 우선합니다.

페이로드가 incident.io의 API 한도(512KB)를 초과하면 통합이 첫 번째 알림을 제외한 모든 알림을 자동으로 잘라버린다는 점에 유의하세요.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# HTTP 클라이언트의 구성.
[ http_config: <http_config> | default = global.http_config ]

# incident.io 알림을 보낼 URL. 이는 보통 alert source를 설정할 때
# incident.io 팀이 제공함.
# URL과 URL_file은 상호 배타적.
url: <string>
url_file: <string>

# alert source 토큰은 incident.io에 인증하는 데 사용됨.
# alert_source_token과 alert_source_token_file은 상호 배타적.
[ alert_source_token: <secret> ]
[ alert_source_token_file: <string> ]

# incident.io 메시지당 보낼 최대 알림 수.
# 이 임계값을 초과하는 알림은 잘림. 0으로 설정하면
# 무제한 알림이 허용됨. 페이로드가 incident.io의
# 크기 한도(512KB)를 초과하면 notifier가 첫 번째를 제외한 모든
# 알림을 자동으로 버림. 이 잘림 후에도 페이로드가 여전히 너무
# 크면 429 응답을 받고 알림이 수집되지 않음.
[ max_alerts: <int> | default = 0 ]

# Timeout은 incident.io를 호출할 수 있는 최대 시간. 0으로 설정하면
# 타임아웃이 적용되지 않음.
[ timeout: <duration> | default = 0s ]

wechat_config

WeChat 알림은 WeChat API를 통해 전송됩니다.

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = false ]

# WeChat API와 통신할 때 사용할 API 키. api_secret 또는 api_secret_file 중 하나를 설정해야 함.
[ api_secret: <secret> | default = global.wechat_api_secret ]
[ api_secret_file: <string> | default = global.wechat_api_secret_file ]

# WeChat API URL.
[ api_url: <string> | default = global.wechat_api_url ]

# 인증을 위한 corp id.
[ corp_id: <string> | default = global.wechat_api_corp_id ]

# WeChat API가 정의한 API 요청 데이터.
[ message: <tmpl_string> | default = '{{ template "wechat.default.message" . }}' ]
# 메시지 유형. 지원되는 값은 `text`와 `markdown`.
[ message_type: <string> | default = 'text' ]
[ agent_id: <tmpl_string> | default = '{{ template "wechat.default.agent_id" . }}' ]
[ to_user: <tmpl_string> | default = '{{ template "wechat.default.to_user" . }}' ]
[ to_party: <tmpl_string> | default = '{{ template "wechat.default.to_party" . }}' ]
[ to_tag: <tmpl_string> | default = '{{ template "wechat.default.to_tag" . }}' ]

webex_config

# 해결된 알림에 대해 알림을 보낼지 여부.
[ send_resolved: <boolean> | default = true ]

# Webex Teams API URL i.e. https://webexapis.com/v1/messages
# 지정하지 않으면 기본 API URL이 사용됨.
[ api_url: <string> | default = global.webex_api_url ]

# 메시지를 보낼 Webex Teams 방의 ID.
room_id: <string>

# 메시지 템플릿.
[ message: <tmpl_string> default = '{{ template "webex.default.message" .}}' ]

# HTTP 클라이언트의 구성. HTTP `Authorization` 헤더의 일부로
# 봇 토큰을 제공하려면 이 구성을 사용해야 함.
[ http_config: <http_config> | default = global.http_config ]

트레이싱 구성 (Tracing Configuration)

tracing_config

# 트레이싱 클라이언트 유형, 지원되는 값은 `http`와 `grpc`.
[ client_type: <string> | default = "grpc" ]

# 트레이싱 엔드포인트.
[ endpoint: <string> | default = "" ]

# 샘플링 비율.
[ sampling_fraction: <float> | default = 0.0 ]

# TLS 비활성화 여부.
[ insecure: <boolean> | default = false ]

# HTTP 클라이언트의 구성.
[ tls_config: <tls_config> ]

# 사용자 정의 HTTP 헤더.
[ http_headers:
  [ <string>: <string>, ... ] ]

# 트레이싱 압축.
[ compression: <string> | default = "gzip" ]

# 트레이싱 타임아웃.
[ timeout: <duration> | default = 0s ]

이벤트 레코더 (Event Recorder)

이벤트 레코더는 중요한 Alertmanager 이벤트(프로세스 시작 및 종료, 알림 수명주기 전환, 사일런스 생성, 알림 전달, 음소거/인히빗 억제)를 포착해 하나 이상의 목적지로 전파합니다. 각 이벤트는 타임스탬프, 생성 인스턴스의 호스트명, 클러스터 위치(HA 클러스터링이 활성화된 경우), 이벤트별 데이터를 포함하는 구조화된 페이로드로 인코딩됩니다.

레코더는 event-recorder 기능 플래그 뒤에 게이트되어 있습니다 — 커맨드라인으로 --enable-feature=event-recorder를 전달해 활성화하세요. 플래그가 설정되지 않으면 레코더는 모든 이벤트를 조용히 버립니다.

이벤트 기록은 최상위 event_recorder 키 아래에 구성됩니다.

event_recorder_config

출력은 유형별로 그룹화되며, 목적지 종류당 하나의 목록입니다(수신자가 자신의 통합을 그룹화하는 방식과 동일). 기록된 모든 이벤트는 모든 목록의 모든 출력으로 전송됩니다.

# JSONL 파일 출력.
file_outputs:
  [ - <file_output> ... ]

# 웹훅 출력.
webhook_outputs:
  [ - <webhook_output> ... ]

# Kafka 출력.
kafka_outputs:
  [ - <kafka_output> ... ]

# Stdout 출력.
stdout_outputs:
  [ - <stdout_output> ... ]
file_output

각 이벤트를 파일에 단일 JSON 라인으로 씁니다. 부모 디렉터리가 대상 경로에서 rename/remove/create를 관찰하면 파일이 다시 열립니다(logrotate 및 유사한 도구와의 호환을 위해).

# JSONL 출력 파일 경로. 존재하지 않으면 생성됨.
path: <string>
webhook_output

각 이벤트를 JSON 본문으로 HTTP 엔드포인트에 POST합니다. 전달은 제한된 워커 풀(bounded worker pool)에 의해 제한된 재시도와 지수 백오프로 수행됩니다.

재시도는 이벤트 또는 배치 전체를 다시 보내므로, 수신자는 모호한 실패 후 중복 이벤트를 허용해야 합니다. 여러 워커가 있으면 요청이 순서 없이 완료될 수 있습니다. 요청 순서가 중요하면 workers: 1로 설정하세요.

# 이벤트를 POST할 URL.
url: <string>

# HTTP 클라이언트 구성 (TLS, basic auth, OAuth, 프록시, ...).
[ http_config: <http_config> ]

# HTTP 요청 타임아웃.
[ timeout: <duration> | default = 10s ]

# 동시 전달 워커 수.
[ workers: <int> | default = 4 ]

# 이벤트 또는 배치당 최대 전달 시도 수.
[ max_retries: <int> | default = 3 ]

# 재시도 간 기본 백오프; 후속 시도는 지수 백오프(base * 2^attempt)를 사용하며 30s로 제한.
[ retry_backoff: <duration> | default = 500ms ]

# 각 이벤트를 개별 JSON 객체로 게시하는 대신 JSON 배열로 이벤트를 전송.
# 이는 웹훅 페이로드 계약을 변경하며, 수신 엔드포인트가 배열을 받아들일 때만
# 활성화해야 함.
[ batch: <boolean> | default = false ]

# 일괄 처리 활성화 시 하나의 요청에 포함할 최대 이벤트 수.
[ batch_max_events: <int> | default = 100 ]

# 일괄 처리 활성화 시 인코딩된 요청 크기의 소프트 최대(바이트). 한도보다
# 큰 단일 이벤트는 단독으로 전송됨.
[ batch_max_bytes: <int> | default = 1048576 ]

# 불완전한 배치가 전달 전에 기다리는 최대 시간.
[ batch_flush_interval: <duration> | default = 100ms ]

예를 들어 Cloudflare Pipelines streams는 HTTP 수집 엔드포인트를 통해 JSON 배열을 받아들이며, 일괄 웹훅 출력으로 구성할 수 있습니다:

event_recorder:
  webhook_outputs:
  - url: https://<account>.ingest.cloudflare.com
    batch: true
    http_config:
      # 스트림에 인증이 활성화되면 토큰은 "Workers Pipeline Send" 권한을 가져야 함.
      authorization:
        credentials: <secret>
kafka_output

각 이벤트를 Kafka 토픽에 생성합니다. 레코드는 생성하는 Alertmanager 인스턴스의 호스트명을 메시지 키로 사용하므로, 단일 인스턴스의 모든 이벤트를 같은 파티션에 유지하고 상대 순서를 보존합니다. 전달은 비동기적이고 제한적입니다: 로컬 버퍼가 가득 차면 이벤트가 버려집니다.

시작 시 Kafka 브로커에 도달하지 못하는 것은 warn 레벨로 기록되지만 Alertmanager가 시작하는 것을 막지는 않습니다. 기본 클라이언트는 백그라운드에서 연결을 재시도합니다.

대상 토픽은 이미 존재해야 하며(또는 브로커가 토픽 자동 생성을 허용하도록 구성되어야 함), Alertmanager는 이를 생성하지 않습니다.

# 시드 브로커 목록 (host:port). 최소 하나의 항목이 필요.
brokers:
  [ - <string> ... ]

# 이벤트를 생성할 토픽.
topic: <string>

# 브로커에 보고되는 클라이언트 식별자.
[ client_id: <string> | default = "alertmanager" ]

# 각 레코드 값의 온더와이어 인코딩: "json" (protojson) 또는
# "protobuf" (바이너리 proto). 파일 및 웹훅 출력과의 대칭을 위해
# JSON이 기본값; 이미 eventrecorder.proto 스키마를 사용하는 소비자는
# 간결함을 위해 protobuf를 선호할 수 있음.
[ format: <string> | default = "json" ]

# 프로듀서 승인 레벨. "leader"는 franz-go 기본값과 일치하며
# Kafka 지연에 대한 Alertmanager의 노출을 최소화함. "all"은
# 적어도 한 번 이상의 내구성을 위해 멱등 프로듀서를 활성화하지만
# 더 높은 지연의 대가를 치름.
[ acks: <string> | default = "leader" ]

# 레코드 배치의 압축 코덱. 생략하면 배치가
# 압축되지 않고 전송됨.
[ compression: <string> ]

# 이벤트 레코더와 franz-go 사이의 로컬 버퍼 용량.
# 이 버퍼가 가득 차면 이벤트가 버려짐.
[ buffer_size: <int> | default = 1024 ]

# 브로커 연결을 위한 TLS 구성. 설정하지 않으면
# 연결이 PLAINTEXT를 사용함.
[ tls_config: <tls_config> ]
stdout_output

각 이벤트를 stdout에 단일 JSON 라인으로 씁니다. 런타임 로그 드라이버(Docker, Kubernetes 등)가 stdout을 자동으로 포착하는 컨테이너 배포에 권장되는 출력입니다.

참고: stdout_outputs를 사용할 때는 Alertmanager에도 --log.format=json을 전달하는 것을 고려하세요. 그것 없이는 Alertmanager 자체 로그 라인이 logfmt을 사용하고 이벤트 레코드는 JSON이므로, 같은 스트림에서 두 개의 서로 다른 형식이 생성되어 다운스트림 로그 파싱을 복잡하게 만들 수 있습니다.

이 출력 유형은 추가 구성 필드를 필요로 하지 않습니다.

더 알아보기 (Learn more)