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>
This commit is contained in:
wbsong111
2026-06-25 11:10:51 +09:00
parent a55427730e
commit 6290322f1b
514 changed files with 68103 additions and 40 deletions
@@ -0,0 +1,40 @@
# vmalert 배포 (알림 규칙 평가 엔진)
PromQL 알림 규칙을 주기적으로 평가하고, 발생한 알림을 Alertmanager로 전송한다. ALERTS 메트릭은 다시 VictoriaMetrics에 기록한다.
## 1. 배포 방법
```sh
helm upgrade vmalert ./ -f custom-values.yaml --install -n monitoring
```
사전: vmcluster, alertmanager가 배포되어 있어야 한다.
## 2. custom-values.yaml 설정 설명
| 항목 | 대상 | 비고 |
|------|------|------|
| `datasource.url` | vmselect `/select/multitenant/prometheus` | 클러스터 전체 집계 조회 |
| `remoteWrite.url` | vminsert `/insert/0/prometheus` | ALERTS 메트릭 기록 (`/api/v1/write` 자동 부착) |
| `notifier.url` | alertmanager:9093 | 알림 발송 |
### 인증 — 내부 서비스
vmalert는 **내부 서비스**이므로 vmselect multitenant 엔드포인트에 직접 연결한다(vmauth JWT 미경유). 사용자/외부 접근만 vmauth를 거친다.
> vmauth 경유가 필요하면 datasource를 vmauth(`:8427`)로 바꾸고, Keycloak **service-account 토큰**(bearer)을 datasource 인증에 설정한다. `unauthorized_user`(accountID 0)만으로는 전체 클러스터 메트릭을 볼 수 없으므로 multitenant 또는 적절한 `vm_access` 토큰이 필요하다.
### 알림 규칙 (`server.config.alerts`)
클러스터 헬스 8종: NodeDown, NodeHighCPU, NodeHighMemory, NodeDiskPressure, PodCrashLooping, PodNotReady, DeploymentReplicasMismatch, PVCFillingUp. 평가 주기 30s.
## 3. 의존 관계
vmselect(조회) · vminsert(기록) · alertmanager(발송) · kube-state-metrics/node-exporter(규칙이 참조하는 메트릭 소스)
## 4. 검증
```sh
kubectl port-forward -n monitoring svc/vmalert-victoria-metrics-alert 8880:8880
curl -s http://localhost:8880/api/v1/rules | jq '.data.groups[].name'
```