Kube prometheus
prometheus
์๋ฒ์ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋ง์ ํ๊ธฐ ์ํ ํด
๋ณดํต์ ๊ทธ๋ผํ๋์ ๊ฐ์ด ์ฌ์ฉํ์ฌ ์๋ฒ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋งํ๋ค.
what is kube-prometheus
https://github.com/prometheus-operator/kube-prometheus
k8s์์ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋ง ํ๊ธฐ ์ํ ํด
์ฟ ๋ฒ๋คํฐ์คํด๋ฌ์คํฐ๋น ๊ฐ์ 1๊ฐ์ฉ ์ถ์ฒ . ์๋๋ฉด ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ ๋ด๋ถ pod๊ฐ ํต์ ์ด ๋์ผํ๋ค. ์ธ๋ถ๋ ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅ์ ํ๋ ๊ตฌ์ง ๊ทธ๋ดํ์ ์์ด ๋ณด์ธ๋ค.
์ด๊ฑด k8s ํด๋ฌ์คํฐ๋ง ๋ชจ๋ํฐ๋ง ํ๋๊ฒ์ผ๋ก ์ฌ์ฉํ์.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋๋ฏ ๋ณด์ธ๋ค. ๊ทธ๋์ ์ํ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
ํด๋ฌ์คํฐ์ ์ค์นํ๊ธฐ
jb๋ผ๋ ์ ํธ๋ฆฌํฐ๊ฐ ํ์ํ๋ค.
๋๋ argocd๋ฅผ k8s ์ค์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ argocd git repo์ ๋ฃ๊ณ ์ถ๋ค.
3๊ฐ ํ์ผ์ ๋ณต์ฌํ์ฌ argocd repo์ ๋ฃ์.
๋น๋ํ์.
jsonnetfile.json ์์ ์ํ๋ ๋ฒ์ ์ผ๋ก ์์ ํ์. k8s๋ฒ์ ์ ๋ฐ๋ผ์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ ์ด ๋ค๋ฅด๋ค.
๋ค์์์ ํ์ธ
https://github.com/prometheus-operator/kube-prometheus#compatibility
๋น๋ํ์.
manifestํด๋๊ฐ ์๊ธด๋ค. ์ด๊ฑธ argocd repo์ ๋ฃ๊ณ argocd์์ app๋ฑ๋กํ๋ฉด ๋ํ๋ก์ด๊ฐ ๋๋ ๊ฒ์ ๋ณผ์ ์๋ค.
cluster.jsonnet์ ๊ฐ์์ ์ํฉ์ ๋ง๊ฒ ์ด๋ฆ์ ๋ฐ๊ฟ์ ์ฌ์ฉํ๋ค.
์ดํ์ผ์ ์์ ํ๋ฉด ์์ ๋ manifest๊ฐ ์์ฑ์ด ๋๋ค.
ํ์ธ
ํฌํธ ํฌ์๋ฉ์ผ๋ก ํ์ธํ ์ ์๋ค.
prometheus
alertmanager
grafana
customize manifest
cluster.jsonnet์ ์์ ํด์ manifest ์์
grafana/prometheus/alertmanager svc๊ฐ ํ์ฌ๋ clusterip ์ธ๋ฐ node port๋ก ๋ณ๊ฒฝํด๋ณด์.
kube-prometheus/addons/node-ports.libsonnet
์ด๋ถ๋ถ๋ง ์ฃผ์ ํด์ ํด์ฃผ๋ฉด๋๋ค.
๋ค์ ๋น๋ํ๊ณ ์ปค๋ฐํ๋ฉด๋๋ค.
์ปค๋ฐํ svc๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋น์ค ํ์ ์ด ๋ ธ๋ํฌํธ๋ก ๋ณ๊ฒฝ๋๋๊ฑธ ์์ ์๋ค.
์ด์ ๋ค์ ์ง์๊ณ ๋ค์ ๋น๋ ์ปค๋ฐ ํธ์ ํ๋ฉด ์๋๋๋ก ๋์์ค๋๊ฒ์ ์์ ์๋ค.
ingress๋ฅผ ํตํด์ public domain์ผ๋ก ์ ๊ทผ๊ฐ๋ฅํ๊ฒ
https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/ingress.jsonnet
cluster.jsonnet์ ์ ํ์ผ์ฒ๋ผ ์์ ํ domain์ ๋ณ๊ฒฝํด์ฃผ๋ฉด๋๋ค.
basic auth ์ฌ์ฉ
auth๋ผ๋ ํ์ผ์ ์ฐธ์กฐํ๋๊ฒ์ ์์ ์๋ค.
์ด๊ฑธ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ค.
auth๋ผ๋ ํ์ผ์ด ์๊ฒผ๋ค. ๋ด์ฉ์ ๋ณต์ฌํ์ฌ cluster.jsonnetํ์ผ๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํด์ ๋ฃ์ด์ค๋ค.
๋๋ฉ์ธ์ผ๋ก ์ ๊ทผํ๋ฉด basic loginํ๋ฉด์ด ๋์ค๊ณ ์์ฑํด์ค id ๋น๋ฒ์ ๋ฃ์ผ๋ฉด ๋ก๊ทธ์ธ์ด ๋๋ค.
ํ๊ณ ๋ณด๋ฉด grafana๋ id/password๋ฅผ ๋๋ฒ ๋ฃ์ด์ผํ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ฐ?
grafana๋ ๊ธฐ๋ณธ์ธ์ฆ์์ ๋นผ๋ ๋ ๋ฏ ๋ณด์ธ๋ค. grafana๋ฅผ ์์ ํ๋ค. ingress๋ผ๋ ํจ์๋ฅผ ์์ฐ๊ณ ์ง์ ๋ฃ์ด์ค๋ค.
etcd ๋ชจ๋ํฐ๋ง
jsonnet ์ค์
https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/etcd.jsonnet
์ฌ๊ธฐ ์ฐธ๊ณ ํ๋ฉด๋๋ค.
์์ดํผ๋ ์ฌ์ฉํ๋ ์์ดํผ ์ ๋ถ ๋ฃ์ด์ฃผ๋ฉด๋๊ณ ์๋ฒ์ด๋ฆ์ ๋น์นธ์ผ๋ก ํด๋ ๋๋ค. insecureSkipVerify ๋ false๋ก
manifest๋ฅผ ์ ๋ฐ์ดํธํ์.
prometheus ์น์ ๊ฐ์ etcd_cluster_version ์ผ๋ก ๊ฒ์ํด์ ๋์ค๋ฉด ํ์ธ๋๋ค.
instance๊ฐ ํ๋์ ๋
ธ๋์ 2๊ฐ๋จ๋๊ฑธ ๋ฐฉ์ง
ํ์ฌ alertmanager-main์ด node05์ ๋๊ฐ๊ฐ ๋ ์๋ค. ์ด๊ฑธ ๋ค๋ฅธ๋ ธ๋์์ ๋์๋ณด์.
https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/anti-affinity.jsonnet
์ฐธ๊ณ ํด์ ์ฃผ์๋ง ํ์ค ํ์ด์คฌ๋ค.
์๋ก ๋ค๋ฅธ ๋ ธ๋์ ๋ฐฐํฌ๋๋๊ฒ์ ํ์ธํ๋ค.
alert
์ฌ๋์ผ๋ก alert๋ฅผ ๋ฐ๊ณ ์ถ๋ค.
์ผ๋จ ์ฌ๋์ฑ๋์ ๋ง๋ค์ด๋ณด์.
์น ํํฌ ๊ด๋ จ ์ค์ ์ ํ๋ค. https://api.slack.com/messaging/webhooks
์ค์ ๋ฉ์ธ์ง๊ฐ ๊ฐ๋์ง ํ ์คํธ ํ๋ค.
https://prometheus.io/docs/alerting/latest/notification_examples/
์น ํํฌ url์ ์ ์ด์ฃผ๊ณ ๋๋จธ์ง๋ ์ ์์ ํด์ ๋ณด๋ด์ค๋ค.
jsonnet ํ์ผ์ ์์ ํ๋ค.
์ปดํ์ผ ํ๊ณ ์ฌ๋ ค๋ณด์.
๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ฌ๋์ผ๋ก ์๋ฆผ์ด ์ ์จ๋ค.
KubeSchedulerDown-alert
KubeSchedulerDown ์๋ฆผ์ด ๊ณ์์จ๋ค.
์ด๊ฑธ ์ถ๊ฐํ๋ฉด ์๋ฌ๊ฐ ์์ด์ง๋ค๊ณ ํ๋๋ฐ ..ํด๋ณด์.
์์ด์ง๋ค.
CPUThrottlingHigh-alert
CPUThrottlingHigh๊ฐ ๊ณ์ ์๋ฆผ์ผ๋ก ์จ๋ค. node-exporter๊ฐ cpu๊ฐ ๋๋ค๋๊ฒ์ด๋ค.
๋ด์ฉ์ ํ์ธํด๋ณด์. manifestํ์ผ์ ํ์ธํด๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ์ด 25์ด์์ด๋ฉด ๋ณด๋ด๊ฒ ๋์๋ค. ํด๊ฒฐ๋ฐฉ์์ ๊ณ ๋ฏผํด๋ณด์.
25์ด์์ด ๋ฌด๋ฆฌ๊ฐ ์๋ค๊ณ ํ๋จ๋๋ฉด ์๋ฅผ๋ค์ด 50%๊น์ง๋ ์๋ฆผ์ ๋ณด๊ณ ์ถ์ง ์๋ค๊ณ ํ๋ฉด 25๋ฅผ 50์ผ๋ก ๋ฐ๊พธ๋ฉด ๋์ง ๋ณ์๊ฐ?
ํด๋น pod์ resource๋ฅผ ์ถ๊ฐํด ์ค์ผ ํ์ง ์์๊ฐ?
node-exporter-daemonset.yaml ์์ ๋ค์ ๋ถ๋ถ์ ์์ ํด์ผ ํ๋ค.
์ผ๋จ request๋ฅผ cpu 250m์ผ๋ก ํด๋ณด๊ณ ์๋ฆผ์ด ์ค๋์ง ํ์ธํด๋ณด์.
์ผ๋จ ๊ธฐ์กด๋ณด๋ค๋ %๊ฐ ๋ด๋ ค๊ฐ๊ฒ์ ์์ ์๋ค.
์ฌ์ ํ 25๊ฐ ๋์ด๊ฐ๋ฉด ์๋ฆผ์ด ๋ฐ์ 50์ผ๋ก ๋ณ๊ฒฝํด์ ํ ์คํธ
์๋ฆผ์ด ์ค์ด๋ค์๋ค.
์ด์ ์ปดํ์ผ์ ์ ์ซ์๋ค์ ๋ณ๊ฒฝํด์ค์ผํ๋๋ฐ..
์ด๋ ๊ฒ ํ๊ณ ์ปดํ์ผ ํธ์ํ๋ฉด ๋๋ค.
https://github.com/prometheus-operator/kube-prometheus/issues/1165
api error burn rate
์ด ์๋ฌ๊ฐ๋์ ํ์ธํด๋ดฃ๋๋ ๋ ธ๋์์ ๋ค์ ์๋ฌ๊ฐ ๋์จ๋ค.
/etc/resolve.conf
์ ๋ณด๋ฉด ์ฌ๋ฌ๊ฐ์ search์ ํญ๋ชฉ์ด ์์๋ค. ์ ๋ถ ์ง์์ฃผ๋ ์๋ฌ๋ ์์ด์ก๊ณ ์๋๋ ์์ด์ก๋ค.
grafana customize
DataSource prom/loki ๋ฅผ ๊ธฐ๋ณธ์ถ๊ฐ, id/pass์ถ๊ฐ
// datasource๊ฐ ํ๋๋ ์์ผ๋ฉด prometheus datasource๋ ์๋์ผ๋ก ๋ฃ์ด์ค๋ค. ๊ทธ๋ฐ๋ฐ ์๋์ฒ๋ผ loki๋ฅผ ๋ฃ์ด๋ฒ๋ฆฌ๋ฉด prometheus datasource๊ฐ ์๋์ผ๋ก ์์ฑ์ด ์๋๋๋ฏ ๋ณด์ธ๋ค. ๊ทธ๋์ ์๋์ฒ๋ผ ๋ฐ๋ก ์ถ๊ฐํด์ฃผ์๋ค.
์๋ url์ ๊ฐ์ namespace์์๋ ์๋น์ค์ด๋ฆ์ผ๋ก ์ ์์ด ๊ฐ๋ฅํ๋ค. ๋ค๋ฅด๋ฉด servicename.namespace.svc.cluster.local ์ด๋ฐ์์ผ๋ก ์ ์์ด ๊ฐ๋ฅํ๋ค. ๋๋ servicename.namespace.svc
ingress-nginx ๋ชจ๋ํฐ๋ง ํ๊ธฐ
์ฌ๊ธฐ๋ฅผ ๋ณด๋ฉด serviceMonitor ๋ณผ์ ์๋ค ์ด๊ฑธ ๋ง๋ค์ด ์ฃผ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค์์ ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฐ๋ฐ ingress-nginx๋ ๋ฒ์ ๊ฐ์ง๊ณ ์๋ค ํ์ฑํ๋ฉด ํด์ฃผ๋ฉด ๋๋ค.
์ด๋ฌ๋ฉด ๋๋ค. ํ๋ก๋ฉํ ์ฐ์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ๊ทธ๋ผํ๋๋ก ๋ณด์ฌ์ค๋ค.
๊ทธ๋ผํ๋์์ ๋ค์ ์ฃผ์์ json์ ์ถ๊ฐํด์ ๋์๋ณด๋๋ฅผ ๋ณผ์ ์๋ค.
https://github.com/kubernetes/ingress-nginx/tree/main/deploy/grafana/dashboards
์ฌ์ฉํ๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ์ ์์ผ๋ tag๋ฅผ ๋ง์ถฐ์ ์ฌ์ฉํ๋ฉด๋๋ค.
ํ์ผ์ ์ถ๊ฐ๋๊ฑธ ์์๊ฐ ์๋ค.
helmchart์์ prometheusRule ๋ถ๋ถ์ ํ์ธํ๋ฉด alert rules๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
serviceMonitor ์ถ๊ฐํ๊ธฐ
upgrade
๋ฒ์ ๋ฒํธ๋ฅผ jsonnetfile.json ์์ ์ ๋ฐ์ดํธํ์.
๋น๋ํ์.
resource์ limit์ค์ ์ง์ฐ๊ธฐ
ํน๋ณํ ๊ฒฝ์ฐ์ ์ด๊ฒ ํ์ํ๋ค.
์ถ๊ฐํ๊ณ ๋น๋ํ์. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
limit์ด ์ง์์ง๊ฑธ ์์ ์๋ค.
nginx grafana dash board ์ถ๊ฐ
grafana ํด๋๋ฅผ ๋ง๋ค๊ณ ํ์ผ์ ์ถ๊ฐํ์.
https://github.com/kubernetes/ingress-nginx/tree/controller-v1.1.0/deploy/grafana/dashboards
์ฌ๊ธฐ์ jsonํ์ผ 2๊ฐ๋ฅผ ๋ฐ์์ ์ ์ฅํ๋ค. ๋๋ 1.1.0๋ฒ์ ์ ingress-nginx๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์์ ๋ง๋ ๋ฒ์ ์ผ๋ก ์ฌ์ฉํ์.
cluster.jsonnet์์ ๋ค์์ฝ๋ ์ถ๊ฐํ์.
๋น๋ํ ์ ์ฉํ๋ฉด ๋ค์์ฒ๋ผ ๋ณด์ธ๋ค.
์๋ฃ
node exporter listen port ๋ณ๊ฒฝํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก 127.0.0.1์์๋ง node exporter๊ฐ์ ๋ฐ๊ฒ ์ค์ ์ด ๋์ด์๋ค. ์ด๊ฑธ 0.0.0.0์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ํด๋ฌ์คํฐ์ธ๋ถ์์ ๋ฉํธ๋ฆญ์ ๋ฐ์์๊ฐ ์๋ค.
๋ณ๊ฒฝ์ ํด์ผํ๋๋ฐ..
๊ฐ๋จํ ์ค๋ช ์ ํ๋ฉด vendor/kube-prometheus/main.libsonnet ์ฌ๊ธฐ ํ์ผ์ ๊ฐ๋ณด๋ฉด ๋ค์์ฒ๋ผ ๋ณด์ธ๋ค.
node exporter์ ์ค์ ์ ํ๋๊ณณ์ด๋ค.
vendor/kube-prometheus/component/node-exporter.libsonnet ๋ฅผ ์ฐธ์กฐํ๊ณ ์์๋ ์์ ์๋ค.
ํ์ผ์ ์ด์ด๋ณด์.
์ด๋ ๊ฒ ๋ณ์๋ฅผ ์ค์ ํ๊ณ ์ด๊ฑธ ๋์ค์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก cluster.jsonnet์์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ์ค์ ์ ๋ฐ์ด๋ฃ์ด์ฃผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฎ์ด์ฐ๊ฒ ๋๋ค.
kubespray์ฌ์ฉ์ ์ฃผ์์ฌํญ
์ฟ ๋ฒ๋คํฐ์ค ์ค์น๋ฅผ kubespray๋ก ํ์ ๋ถ๋ค์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํด์ฃผ์ธ์
platform ์ข ๋ฅ๋ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์.
Last updated
Was this helpful?