Argo CD๋ ์คํ ์ค์ธ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๋ผ์ด๋ธ ์ํ๋ฅผ Git ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ง์ ๋ ์ํ๋ ์ํ์ ๋น๊ตํ๋ Kubernetes ์ปจํธ๋กค๋ฌ์ ๋๋ค.
k8s ํด๋ฌ์คํฐ์ Argo CD ์ธํ๋ผ๋ฅผ ๋ ์ ์ดํดํ๊ธฐ ์ํด New Relic์ ์ฌ์ฉํ์ฌ Prometheus ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ๋์๋ณด๋๋ฅผ ๋ด ๋๋ค. New Relic์ ์ฌ์ฉํ๋ฉด ๋ค์์ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ํ
- ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ ์ํ
- Argo CD ์ปจํธ๋กค๋ฌ ํต๊ณ
- Argo CD ์๋ฒ ํต๊ณ
- ๋ฆฌํฌ์งํ ๋ฆฌ ํต๊ณ

ํตํฉ ํ์ฑํ
ํตํฉ์ ํ์ฑํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
Argo CD์์ ์ ๊ณตํ๋ ๋ฉํธ๋ฆญ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด Argo CD ์ค๋ช ์๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
Prometheus ๋ชจ๋ํฐ๋ง์ ์ค์ ํฉ๋๋ค. Prometheus ์งํ๋ New Relic๊ณผ ํตํฉ๋์ด์ผ ํฉ๋๋ค. Kubernetes์ฉ Prometheus ์์ด์ ํธ ๋๋ Prometheus Remote Write ํตํฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Prometheus ๋ฉํธ๋ฆญ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์ฐธ์กฐํ์ธ์.
์ค์
Prometheus ์์ด์ ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ จ์ ํตํฉ ์์ ๋ฉํธ๋ฆญ๋ง ์คํฌ๋ฉํฉ๋๋ค.
์ด ๊ฒฝ์ฐ
argocd๋ฌธ์์ด์ ํฌํจํ๋app.kubernetes.io/name,app.newrelic.io/name,k8s-app๋ ์ด๋ธ ์ค ํ๋๋ก ํฌ๋ ๋๋ ์๋ํฌ์ธํธ๋ฅผ ์๋ณํด์ผ ํฉ๋๋ค.๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ด ์์๋๋ก ์์ง๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
FROM Metric SELECT count(*) WHERE instrumentation.name = 'remote-write' AND metricName LIKE 'argocd_%' FACET metricName LIMIT MAX๋ด์ฅ๋ ๋ฐ ์๋ฆผ ์ ์ก์ธ์คํ๋ ค๋ฉด Argo CD ํต์คํํธ๋ฅผ ์ค์นํ์ธ์.
๊ฐ์ ธ์จ ํ์๋ ์์ฐ์ ํธ์งํ๊ฑฐ๋ ๋ณต์ ํ์ฌ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค.
์ค์
๋์๋ณด๋์ ์ผ๋ถ ์ฐจํธ์๋
argocd๋ฌธ์์ด์ ํฌํจํ๋app.kubernetes.io/name,app.newrelic.io/name,k8s-app๋ ์ด๋ธ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ(Pod) ๋๋ ์๋ํฌ์ธํธ๋ฅผ ์๋ณํด์ผ ํ๋ ์กฐ๊ฑด์ด ์๋ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๋ฉํธ๋ฆญ ์ฐพ๊ธฐ ๋ฐ ์ฌ์ฉ
Prometheus ๋ฉํธ๋ฆญ์ ์ฐจ์ ๋ฉํธ๋ฆญ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. NRQL์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ํ๊ฑฐ๋ ๋ฐ์ดํฐ ํ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉํธ๋ฆญ, ํจ์ฏ์ ์ฐพ์๋ณด๊ณ ๊ด๋ จ ์ฐจ์๋ณ๋ก ํํฐ๋งํ ์ ์์ต๋๋ค.
์ด ํตํฉ์ ์ํด ๋ ธ์ถ๋๋ ๋ค์ํ ๋ฉํธ๋ฆญ ์ธํธ๋ Argo CD ์ค๋ช ์์ ์ ์๋์ด ์์ต๋๋ค.
๋ค์ NRQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ New Relic์์ ์์ง๋๋ ๋ฉํธ๋ฆญ์ ์ดํดํ์ญ์์ค.
๊ณ ์ ํ ์ธก์ ํญ๋ชฉ ์ด๋ฆ ๋์ด:
FROM Metric SELECT uniques(metricName) WHERE instrumentation.name = 'remote-write' AND metricName LIKE 'argocd_%' LIMIT MAX๋ถ๋น ๋ฐ์ดํฐ ํฌ์ธํธ:
FROM Metric SELECT rate(datapointcount(), 1 minute) WHERE instrumentation.name = 'remote-write' AND metricName LIKE 'argocd_%' LIMIT MAX๋ฐ์ดํฐ ์์ง ์ถ์ (์ผ์ผ ์์ง, ๋ฐ์ดํธ ๋จ์):
FROM Metric SELECT bytecountestimate() WHERE instrumentation.name = 'remote-write' AND metricName LIKE 'argocd_%' SINCE 1 day ago
๋ฌธ์ ์ ํด๊ฒฐ
์ด ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Argo CD Prometheus ์๋ํฌ์ธํธ๊ฐ Argo CD๋ก ๊ตฌ์ฑ๋ ๋ชจ๋ K8s ๋ ธ๋์์ ๋ฉํธ๋ฆญ์ ๋ด๋ณด๋ด๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
bash$curl <Argo CD-Pod-IP>:8082/metricsPrometheus ํตํฉ์ ๋ํ ํน์ ๋ฌธ์ ํด๊ฒฐ ์ง์นจ์ ํ์ธํ ์๋ ์์ต๋๋ค.