6290322f1b
- 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>
3.4 KiB
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 설정 설명
extraSecretMounts—alertmanager-discordSecret을/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_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단계
- Infisical 등록 — 채널 자격증명(webhook URL / SMTP password)을 dip-console로 Infisical에 추가 → external-secrets가
monitoringns Secret($INFISICAL_ALERTMANAGER_SECRET)에 동기화. 키를extraSecretMounts경로(/etc/alertmanager/secrets/<key>)에 노출. - dip-values 수정 —
victoria-metrics/alertmanager-values.yaml오버레이의config.receivers/route.receiver를 위 예시처럼 교체·추가. 필요 시extraSecretMounts에 키 추가. - 재동기화 — ArgoCD가 변경을 감지해 동기화(또는
argocd app sync alertmanager). config 변경은 alertmanager가 자동 reload.
여러 채널 동시 발송은
route.routes로 severity/label별 분기하거나, 단일 receiver에 여러*_configs를 나열한다.