Files
service-catalog/manifests/helm/alertmanager/1.37.0/CUSTOM-README.md
T
wbsong111 6290322f1b Add VictoriaMetrics observability stack + sync catalog for monitoring test
- VM stack 10 charts: victoria-metrics-cluster/auth, victoria-logs-cluster,
  victoria-metrics-agent/alert, opentelemetry-collector, kube-state-metrics,
  prometheus-node-exporter, alertmanager, perses (JWT/OIDC, Infisical-ready)
- ArgoCD ApplicationSet (syncWave) + per-chart dip-values overlays
- doc/victoria-metrics-architecture.md, define-chart-resources updates
- includes pending working-tree changes (mlflow, kubeflow, apisix, CLAUDE.md)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 11:10:51 +09:00

3.4 KiB

Alertmanager 배포 (알림 라우팅·중복제거·Discord 발송)

vmalert가 보낸 알림을 그룹핑·중복제거·억제(inhibit)한 뒤 Discord로 발송한다.

1. 배포 방법

사전 준비 — Discord Webhook Secret

Webhook URL을 값 파일에 평문으로 적지 않는다. Secret으로 주입한다.

kubectl create secret generic alertmanager-discord -n monitoring \
  --from-literal=webhook-url="https://discord.com/api/webhooks/..."
helm upgrade alertmanager ./ -f custom-values.yaml --install -n monitoring

2. custom-values.yaml 설정 설명

  • extraSecretMountsalertmanager-discord Secret을 /etc/alertmanager/secrets에 마운트.
  • config.receivers[].discord_configs[].webhook_url_file — 마운트된 파일 참조(평문 금지).
  • route[alertname, severity] 그룹핑, repeat 4h.
  • inhibit_rules — 동일 노드에서 critical 발생 시 warning 억제.
  • persistence.enabled: false — 단일 인스턴스(HA 미사용).

3. 의존 관계

  • 수신: vmalert notifier → alertmanager:9093

4. 검증

kubectl port-forward -n monitoring svc/alertmanager 9093:9093
curl -s http://localhost:9093/api/v2/status | jq '.cluster.status'
# 테스트 알림 발송 후 Discord 채널 수신 확인

5. 알림 채널 교체·추가 (Discord / Slack / Email)

알림 채널은 고정이 아니다. receiver는 채널 무관하게 작성하고, 자격증명은 평문 대신 Infisical 동기화 Secret을 파일로 마운트(*_file)한다. ArgoCD 배포에서는 dip-values 오버레이로 receiver를 덮어쓴다(config.receivers는 배열이라 전체 재정의).

채널별 receiver 형태

채널 receiver 키 자격증명 파일
Discord discord_configs[].webhook_url_file webhook URL
Slack slack_configs[].api_url_file webhook URL
Email email_configs[] (smarthost/from/to) auth_password_file
# Slack 예시
config:
  route:
    receiver: slack
  receivers:
    - name: slack
      slack_configs:
        - api_url_file: /etc/alertmanager/secrets/slack-webhook
          channel: "#alerts"
          title: '[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}'

# Email 예시
config:
  route:
    receiver: email
  receivers:
    - name: email
      email_configs:
        - to: "ops@example.org"
          from: "alert@example.org"
          smarthost: "smtp.example.org:587"
          auth_username: "alert@example.org"
          auth_password_file: /etc/alertmanager/secrets/smtp-password

새 채널 추가 3단계

  1. Infisical 등록 — 채널 자격증명(webhook URL / SMTP password)을 dip-console로 Infisical에 추가 → external-secrets가 monitoring ns Secret($INFISICAL_ALERTMANAGER_SECRET)에 동기화. 키를 extraSecretMounts 경로(/etc/alertmanager/secrets/<key>)에 노출.
  2. dip-values 수정victoria-metrics/alertmanager-values.yaml 오버레이의 config.receivers/route.receiver를 위 예시처럼 교체·추가. 필요 시 extraSecretMounts에 키 추가.
  3. 재동기화 — ArgoCD가 변경을 감지해 동기화(또는 argocd app sync alertmanager). config 변경은 alertmanager가 자동 reload.

여러 채널 동시 발송은 route.routes로 severity/label별 분기하거나, 단일 receiver에 여러 *_configs를 나열한다.