Files
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

85 lines
3.4 KiB
Markdown

# Alertmanager 배포 (알림 라우팅·중복제거·Discord 발송)
vmalert가 보낸 알림을 그룹핑·중복제거·억제(inhibit)한 뒤 Discord로 발송한다.
## 1. 배포 방법
### 사전 준비 — Discord Webhook Secret
Webhook URL을 값 파일에 평문으로 적지 않는다. Secret으로 주입한다.
```sh
kubectl create secret generic alertmanager-discord -n monitoring \
--from-literal=webhook-url="https://discord.com/api/webhooks/..."
```
```sh
helm upgrade alertmanager ./ -f custom-values.yaml --install -n monitoring
```
## 2. custom-values.yaml 설정 설명
- `extraSecretMounts``alertmanager-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. 검증
```sh
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` |
```yaml
# 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`를 나열한다.