๐น ์ Argo CD ๋ชจ๋ํฐ๋ง๊ณผ ๋ก๊น ์ด ์ค์ํ๊ฐ?
Argo CD๋ฅผ ์ด์ํ ๋ ๋ฐฐํฌ ์ํ, ์ฑ๋ฅ, ์ฅ์ ๋ฐ์ ์ฌ๋ถ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ,
๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ์ ์ํ๊ฒ ์ง๋จํ ์ ์๋๋ก ๋ก๊น
(Log Management)์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
โ Argo CD ์ด์ ํ๊ฒฝ์์ ํ์ํ ๋ชจ๋ํฐ๋ง ์์
๋ชจ๋ํฐ๋ง ํญ๋ชฉ | ์ค๋ช |
Sync ์ํ | ์ ํ๋ฆฌ์ผ์ด์ ์ด Git๊ณผ ๋๊ธฐํ(Sync) ์ํ์ธ์ง ํ์ธ |
์ ํ๋ฆฌ์ผ์ด์ ํฌ์ค ์ฒดํฌ | ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ๋ชจ๋ํฐ๋ง |
์ปจํธ๋กค๋ฌ ์ฑ๋ฅ | Argo CD ์ปจํธ๋กค๋ฌ ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ) ์ฌ์ฉ๋ ํ์ธ |
์ด๋ฒคํธ ๋ฐ ์๋ฆผ | ๋ฐฐํฌ ์คํจ, ๋กค๋ฐฑ ์ด๋ฒคํธ ๋ฑ์ Slack/Email๋ก ์๋ฆผ ์ค์ |
๋ก๊ทธ ๋ถ์ | Argo CD API ์๋ฒ, ์ปจํธ๋กค๋ฌ, ๋ฆฌํฌ์งํ ๋ฆฌ ์๋ฒ์ ๋ก๊ทธ ์์ง |
๐น 1. Prometheus & Grafana๋ฅผ ํ์ฉํ Argo CD ๋ฉํธ๋ฆญ ๋ชจ๋ํฐ๋ง
Argo CD๋ Prometheus ํ์์ ๋ฉํธ๋ฆญ์ ์ ๊ณตํ์ฌ,
Prometheus์ Grafana๋ฅผ ์ฐ๋ํ๋ฉด ์๊ฐ์ ์ธ ๋์๋ณด๋์์ ๋ชจ๋ํฐ๋ง ๊ฐ๋ฅํฉ๋๋ค.
โ Prometheus๋ฅผ ํ์ฉํ Argo CD ๋ฉํธ๋ฆญ ์์ง
Argo CD์ ๋ฉํธ๋ฆญ์ Prometheus์์ ์์งํ๋ ค๋ฉด,
ServiceMonitor ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ฌ Argo CD์ /metrics ์๋ํฌ์ธํธ๋ฅผ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: argocd-metrics
namespace: monitoring # Prometheus๊ฐ ๋ฐฐํฌ๋ ๋ค์์คํ์ด์ค
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-server # Argo CD ์๋ฒ์ ๋ผ๋ฒจ ์ง์
endpoints:
- port: metrics # Argo CD์ /metrics ์๋ํฌ์ธํธ ๋ชจ๋ํฐ๋ง
interval: 30s # 30์ด๋ง๋ค ๋ฉํธ๋ฆญ ์์ง
โ
์ค๋ช
:
โ selector.matchLabels.app.kubernetes.io/name: argocd-server → Argo CD ์๋ฒ๋ฅผ ๋์์ผ๋ก ๋ชจ๋ํฐ๋ง ์ค์
โ endpoints.port: metrics → Argo CD์ /metrics ์๋ํฌ์ธํธ์์ ๋ฉํธ๋ฆญ ์์ง
โ interval: 30s → 30์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ฉํธ๋ฆญ ์
๋ฐ์ดํธ
โ ServiceMonitor ์ ์ฉ ๋ฐฉ๋ฒ
kubectl apply -f argocd-servicemonitor.yaml -n monitoring
โ Prometheus์์ Argo CD ๋ฉํธ๋ฆญ ํ์ธ
kubectl port-forward svc/prometheus-service -n monitoring 9090
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:9090 ์ ์ ํ, argocd_* ๋ฉํธ๋ฆญ ๊ฒ์
๐น 2. Grafana๋ฅผ ํ์ฉํ Argo CD ๋ชจ๋ํฐ๋ง ๋์๋ณด๋ ๊ตฌ์ถ
Grafana๋ฅผ ํ์ฉํ์ฌ Argo CD์ ๋ฐฐํฌ ์ํ, ๋๊ธฐํ์จ, ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
โ Grafana์์ Argo CD ๋์๋ณด๋ ์ถ๊ฐ ๋ฐฉ๋ฒ
1๏ธโฃ Grafana ์ ์ → http://localhost:3000
2๏ธโฃ Data Sources → Prometheus ์ถ๊ฐ
3๏ธโฃ Import Dashboard → Grafana Dashboard ID: 14487 ์
๋ ฅ
โ
Argo CD ๋์๋ณด๋์์ ํ์ธํ ์ ์๋ ์ ๋ณด
โ Sync ์ํ (argocd_app_sync_status)
โ ์ ํ๋ฆฌ์ผ์ด์
ํฌ์ค ์ฒดํฌ (argocd_app_health_status)
โ ์ปจํธ๋กค๋ฌ ๋ฆฌ์์ค ์ฌ์ฉ๋ (argocd_controller_cpu, argocd_controller_memory)
โ ๋ฐฐํฌ ์ฑ๊ณต๋ฅ ๋ฐ ์คํจ์จ
๐น 3. Loki & Fluent Bit์ ํ์ฉํ Argo CD ๋ก๊ทธ ๋ถ์
Argo CD ์ด์ ์ค ๋ฐฐํฌ ์คํจ, ๋๊ธฐํ ์ค๋ฅ ๋ฑ ๋ฌธ์ ๋ฐ์ ์ ๋ก๊ทธ ๋ถ์์ด ํ์์ ์
๋๋ค.
Loki + Fluent Bit์ ์ฌ์ฉํ๋ฉด Argo CD์ ๋ก๊ทธ๋ฅผ ์ค์ ์ง์ค์์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
โ Fluent Bit์ ํ์ฉํ Argo CD ๋ก๊ทธ ์์ง ์ค์
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterOutput
metadata:
name: loki-argocd
namespace: monitoring
spec:
match: argocd*
loki:
url: http://loki.monitoring.svc:3100 # Loki ์๋น์ค URL
โ
์ค๋ช
:
โ match: argocd* → argocd-* ๋ก๊น
๋ผ๋ฒจ์ ๊ฐ์ง ๋ก๊ทธ๋ง ์์ง
โ loki.url → Loki ์๋น์ค์ URL ์ง์
โ ๋ก๊ทธ ์์ง ์ ์ฉ ๋ฐฉ๋ฒ
kubectl apply -f fluentbit-loki-argocd.yaml -n monitoring
โ Loki์์ Argo CD ๋ก๊ทธ ์กฐํ (Grafana์์ ์คํ ๊ฐ๋ฅ)
{job="argocd"}
๐น 4. Argo CD Notifications๋ฅผ ํ์ฉํ ์๋ฆผ ์ค์
Argo CD๋ ๋ฐฐํฌ ์คํจ, ๋๊ธฐํ ์ค๋ฅ ๋ฑ์ ์ด๋ฒคํธ ๋ฐ์ ์ Slack ๋๋ Email๋ก ์๋ฆผ์ ์ ์กํ ์ ์์ต๋๋ค.
โ Slack ์๋ฆผ ์ค์ ์์
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
namespace: argocd
data:
service.slack: |
token: xoxb-xxxxxxxxxxxx-xxxxxxxxxxxxxxxx
trigger.sync-failed: |
- when: app.status.sync.status == 'OutOfSync'
send: [slack]
โ
์ค๋ช
:
โ service.slack.token → Slack API ํ ํฐ ์
๋ ฅ
โ trigger.sync-failed → ์ ํ๋ฆฌ์ผ์ด์
์ด OutOfSync ์ํ์ผ ๋ Slack ์๋ฆผ ์ ์ก
โ Slack ์๋ฆผ ์ค์ ์ ์ฉ ๋ฐฉ๋ฒ
kubectl apply -f argocd-notifications.yaml -n argocd
๐น 5. Argo CD ์ด์ ๋ชจ๋ํฐ๋ง ์ ๊ณ ๋ คํ ์
โ
1๏ธโฃ ๋ฆฌ์์ค ์ฌ์ฉ๋ ์ต์ ํ
โ Argo CD ์ปจํธ๋กค๋ฌ, ๋ฆฌํฌ์งํ ๋ฆฌ ์๋ฒ์ CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋ง
โ ํ์ ์ HPA(Horizontal Pod Autoscaler) ์ค์ ํ์ฌ ์๋ ํ์ฅ
โ
2๏ธโฃ ๋ฐฐํฌ ์คํจ ์์ธ ๋ถ์
โ ๋ฐฐํฌ ์คํจ ์ argocd app history ๋ช
๋ น์ด๋ก ๋ณ๊ฒฝ ์ด๋ ฅ ์กฐํ
โ argocd app logs๋ฅผ ํ์ฉํ์ฌ ์์ธ ์ค๋ฅ ๋ก๊ทธ ํ์ธ
โ
3๏ธโฃ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋ ์ ์ง๋ณด์
โ Prometheus์์ argocd_* ๋ฉํธ๋ฆญ์ด ์ ์์ ์ผ๋ก ์์ง๋๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธ
โ Grafana ๋์๋ณด๋๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ์ฌ ์๊ฐ์ ์ธ ๋ชจ๋ํฐ๋ง ํ๊ฒฝ ์ ์ง
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Prometheus & Grafana๋ฅผ ํ์ฉํ์ฌ Argo CD ์ด์ ํ๊ฒฝ์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋ง ๊ฐ๋ฅ
๐ข Loki & Fluent Bit์ ์ฌ์ฉํ์ฌ Argo CD ๋ก๊ทธ๋ฅผ ์ค์ ์ง์ค์์ผ๋ก ๋ถ์ ๊ฐ๋ฅ
๐ข Argo CD Notifications๋ฅผ ์ค์ ํ๋ฉด ๋ฐฐํฌ ์คํจ, ๋๊ธฐํ ์ค๋ฅ ๋ฐ์ ์ ์ฆ์ Slack/Email ์๋ฆผ ์ ์ก ๊ฐ๋ฅ
๐ข ์ด์ ํ๊ฒฝ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ Argo CD์ ์ฑ๋ฅ ๋ฐ ์์ ์ฑ์ ์ ์งํ ์ ์์