prometheus
์๋ฒ์ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋ง์ ํ๊ธฐ ์ํ ํด
๋ณดํต์ ๊ทธ๋ผํ๋์ ๊ฐ์ด ์ฌ์ฉํ์ฌ ์๋ฒ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋งํ๋ค.
what is kube-prometheus
k8s์์ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋ง ํ๊ธฐ ์ํ ํด
์ฟ ๋ฒ๋คํฐ์คํด๋ฌ์คํฐ๋น ๊ฐ์ 1๊ฐ์ฉ ์ถ์ฒ . ์๋๋ฉด ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ ๋ด๋ถ pod๊ฐ ํต์ ์ด ๋์ผํ๋ค. ์ธ๋ถ๋ ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅ์ ํ๋ ๊ตฌ์ง ๊ทธ๋ดํ์ ์์ด ๋ณด์ธ๋ค.
์ด๊ฑด k8s ํด๋ฌ์คํฐ๋ง ๋ชจ๋ํฐ๋ง ํ๋๊ฒ์ผ๋ก ์ฌ์ฉํ์.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋๋ฏ ๋ณด์ธ๋ค. ๊ทธ๋์ ์ํ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ์ถ๊ฐ ์์
์ด ํ์ํ๋ค.
ํด๋ฌ์คํฐ์ ์ค์นํ๊ธฐ
jb๋ผ๋ ์ ํธ๋ฆฌํฐ๊ฐ ํ์ํ๋ค.
Copy brew install jsonnet-bundler # for jb command
Copy cd ~/Desktop
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
๋๋ argocd๋ฅผ k8s ์ค์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ argocd git repo์ ๋ฃ๊ณ ์ถ๋ค.
3๊ฐ ํ์ผ์ ๋ณต์ฌํ์ฌ argocd repo์ ๋ฃ์.
Copy cp build.sh ~/Desktop/argocd-repo/core/prometheus
cp jsonnetfile.json.sh ~/Desktop/argocd-repo/core/prometheus
cp cluster.jsonnet ~/Desktop/argocd-repo/core/prometheus/cluster.jsonnet
๋น๋ํ์.
Copy cd ~/Desktop/argocd-repo/core/prometheus
jsonnetfile.json ์์ ์ํ๋ ๋ฒ์ ์ผ๋ก ์์ ํ์. k8s๋ฒ์ ์ ๋ฐ๋ผ์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ ์ด ๋ค๋ฅด๋ค.
๋ค์์์ ํ์ธ
๋น๋ํ์.
Copy jb install # vendor ํด๋๊ฐ ์๊ธด๋ค.
docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh cluster.jsonnet
manifestํด๋๊ฐ ์๊ธด๋ค. ์ด๊ฑธ argocd repo์ ๋ฃ๊ณ argocd์์ app๋ฑ๋กํ๋ฉด ๋ํ๋ก์ด๊ฐ ๋๋ ๊ฒ์ ๋ณผ์ ์๋ค.
cluster.jsonnet์ ๊ฐ์์ ์ํฉ์ ๋ง๊ฒ ์ด๋ฆ์ ๋ฐ๊ฟ์ ์ฌ์ฉํ๋ค.
์ดํ์ผ์ ์์ ํ๋ฉด ์์ ๋ manifest๊ฐ ์์ฑ์ด ๋๋ค.
ํ์ธ
ํฌํธ ํฌ์๋ฉ์ผ๋ก ํ์ธํ ์ ์๋ค.
Copy kubectl -n monitoring port-forward svc/prometheus-k8s 9090
kubectl -n monitoring port-forward svc/alertmanager-main 9093
kubectl -n monitoring port-forward svc/grafana 3000
prometheus
alertmanager
grafana
customize manifest
cluster.jsonnet์ ์์ ํด์ manifest ์์
grafana/prometheus/alertmanager svc๊ฐ ํ์ฌ๋ clusterip ์ธ๋ฐ node port๋ก ๋ณ๊ฒฝํด๋ณด์.
kube-prometheus/addons/node-ports.libsonnet
์ด๋ถ๋ถ๋ง ์ฃผ์ ํด์ ํด์ฃผ๋ฉด๋๋ค.
Copy local kp =
(import 'kube-prometheus/main.libsonnet') +
(import 'kube-prometheus/addons/node-ports.libsonnet')
{
๋ค์ ๋น๋ํ๊ณ ์ปค๋ฐํ๋ฉด๋๋ค.
Copy docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh cluster.jsonnet
์ปค๋ฐํ svc๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋น์ค ํ์
์ด ๋
ธ๋ํฌํธ๋ก ๋ณ๊ฒฝ๋๋๊ฑธ ์์ ์๋ค.
์ด์ ๋ค์ ์ง์๊ณ ๋ค์ ๋น๋ ์ปค๋ฐ ํธ์ ํ๋ฉด ์๋๋๋ก ๋์์ค๋๊ฒ์ ์์ ์๋ค.
ingress๋ฅผ ํตํด์ public domain์ผ๋ก ์ ๊ทผ๊ฐ๋ฅํ๊ฒ
cluster.jsonnet์ ์ ํ์ผ์ฒ๋ผ ์์ ํ domain์ ๋ณ๊ฒฝํด์ฃผ๋ฉด๋๋ค.
basic auth ์ฌ์ฉ
auth๋ผ๋ ํ์ผ์ ์ฐธ์กฐํ๋๊ฒ์ ์์ ์๋ค.
์ด๊ฑธ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ค.
Copy USER=admin; PASSWORD=XXXXX; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" > auth
auth๋ผ๋ ํ์ผ์ด ์๊ฒผ๋ค. ๋ด์ฉ์ ๋ณต์ฌํ์ฌ cluster.jsonnetํ์ผ๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํด์ ๋ฃ์ด์ค๋ค.
๋๋ฉ์ธ์ผ๋ก ์ ๊ทผํ๋ฉด basic loginํ๋ฉด์ด ๋์ค๊ณ ์์ฑํด์ค id ๋น๋ฒ์ ๋ฃ์ผ๋ฉด ๋ก๊ทธ์ธ์ด ๋๋ค.
ํ๊ณ ๋ณด๋ฉด grafana๋ id/password๋ฅผ ๋๋ฒ ๋ฃ์ด์ผํ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ฐ?
grafana๋ ๊ธฐ๋ณธ์ธ์ฆ์์ ๋นผ๋ ๋ ๋ฏ ๋ณด์ธ๋ค. grafana๋ฅผ ์์ ํ๋ค. ingress๋ผ๋ ํจ์๋ฅผ ์์ฐ๊ณ ์ง์ ๋ฃ์ด์ค๋ค.
Copy grafana: {
apiVersion: 'networking.k8s.io/v1',
kind: 'Ingress',
metadata: {
name: 'grafana',
namespace: $.values.common.namespace,
},
spec: {
rules: [{
host: 'grafana.c3',
http: {
paths: [{
path: '/',
pathType: 'Prefix',
backend: {
service: {
name: 'grafana',
port: {
name: 'http',
},
},
},
}],
},
}],
},
},
etcd ๋ชจ๋ํฐ๋ง
Copy brew install cfssl # install cfssl
cd core/kube-prometheus
scp master1-eqix-sv5:/etc/ssl/etcd/ssl/ca.pem etcd/
scp master1-eqix-sv5:/etc/ssl/etcd/ssl/ca-key.pem etcd/
chmod 755 etcd/*.pem
vi etcd/client.json
cat <<EOF > etcd/client.json
{
"CN": "etcd-ca",
"hosts": [""],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{}]
}
EOF
Copy # Generate client certificate
cfssl gencert -ca ca.pem -ca-key ca-key.pem client.json | cfssljson -bare etcd-client
jsonnet ์ค์
์ฌ๊ธฐ ์ฐธ๊ณ ํ๋ฉด๋๋ค.
์์ดํผ๋ ์ฌ์ฉํ๋ ์์ดํผ ์ ๋ถ ๋ฃ์ด์ฃผ๋ฉด๋๊ณ ์๋ฒ์ด๋ฆ์ ๋น์นธ์ผ๋ก ํด๋ ๋๋ค. insecureSkipVerify ๋ false๋ก
Copy etcd+: {
ips: ['172.16.3.11', '172.16.3.12', '172.16.3.13'],
clientCA: importstr 'etcd/ca.pem',
clientKey: importstr 'etcd/etcd-client-key.pem',
clientCert: importstr 'etcd/etcd-client.pem',
//serverName: 'etcd.kube-system.svc.cluster.local',
serverName: '',
insecureSkipVerify: true,
},
manifest๋ฅผ ์
๋ฐ์ดํธํ์.
Copy docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh c4.jsonnet
prometheus ์น์ ๊ฐ์ etcd_cluster_version ์ผ๋ก ๊ฒ์ํด์ ๋์ค๋ฉด ํ์ธ๋๋ค.
instance๊ฐ ํ๋์ ๋
ธ๋์ 2๊ฐ๋จ๋๊ฑธ ๋ฐฉ์ง
ํ์ฌ alertmanager-main์ด node05์ ๋๊ฐ๊ฐ ๋ ์๋ค. ์ด๊ฑธ ๋ค๋ฅธ๋
ธ๋์์ ๋์๋ณด์.
์ฐธ๊ณ ํด์ ์ฃผ์๋ง ํ์ค ํ์ด์คฌ๋ค.
์๋ก ๋ค๋ฅธ ๋
ธ๋์ ๋ฐฐํฌ๋๋๊ฒ์ ํ์ธํ๋ค.
alert
์ฌ๋์ผ๋ก alert๋ฅผ ๋ฐ๊ณ ์ถ๋ค.
์ผ๋จ ์ฌ๋์ฑ๋์ ๋ง๋ค์ด๋ณด์.
์ค์ ๋ฉ์ธ์ง๊ฐ ๊ฐ๋์ง ํ
์คํธ ํ๋ค.
Copy mkdir alertmanager
cat <<EOF > alertmanager/config.yml
global:
resolve_timeout: 1m
slack_api_url: 'https://hooks.slack.com/services/T/B01P/ddd'
route:
receiver: 'slack-notifications'
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#kube'
send_resolved: true
icon_url: 'https://avatars3.githubusercontent.com/u/3380462'
title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'
text: |-
{{ range .Alerts }}
*Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}`
*Description:* {{ .Annotations.description }}
*Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:>
*Details:*
{{ range .Labels.SortedPairs }} โข *{{ .Name }}:* `{{ .Value }}`
{{ end }}
{{ end }}
EOF
์น ํํฌ url์ ์ ์ด์ฃผ๊ณ ๋๋จธ์ง๋ ์ ์์ ํด์ ๋ณด๋ด์ค๋ค.
jsonnet ํ์ผ์ ์์ ํ๋ค.
Copy values+:: {
...
// Change Alertmanager configuration
alertmanager+: {
config: importstr 'alertmanager/config.yaml',
},
์ปดํ์ผ ํ๊ณ ์ฌ๋ ค๋ณด์.
๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ฌ๋์ผ๋ก ์๋ฆผ์ด ์ ์จ๋ค.
KubeSchedulerDown-alert
KubeSchedulerDown ์๋ฆผ์ด ๊ณ์์จ๋ค.
Copy values+:: {
common+: {
namespace: 'monitoring',
platform: 'kubespray',
},
์ด๊ฑธ ์ถ๊ฐํ๋ฉด ์๋ฌ๊ฐ ์์ด์ง๋ค๊ณ ํ๋๋ฐ ..ํด๋ณด์.
์์ด์ง๋ค.
CPUThrottlingHigh-alert
CPUThrottlingHigh๊ฐ ๊ณ์ ์๋ฆผ์ผ๋ก ์จ๋ค. node-exporter๊ฐ cpu๊ฐ ๋๋ค๋๊ฒ์ด๋ค.
๋ด์ฉ์ ํ์ธํด๋ณด์. manifestํ์ผ์ ํ์ธํด๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
Copy - alert: CPUThrottlingHigh
annotations:
description: '{{ $value | humanizePercentage }} throttling of CPU in namespace {{ $labels.namespace }} for container {{ $labels.container }} in pod {{ $labels.pod }}.'
runbook_url: https://github.com/prometheus-operator/kube-prometheus/wiki/cputhrottlinghigh
summary: Processes experience elevated CPU throttling.
expr: |
sum(increase(container_cpu_cfs_throttled_periods_total{container!="", }[5m])) by (container, pod, namespace)
/
sum(increase(container_cpu_cfs_periods_total{}[5m])) by (container, pod, namespace)
> ( 25 / 100 )
for: 15m
labels:
severity: info
๊ฐ์ด 25์ด์์ด๋ฉด ๋ณด๋ด๊ฒ ๋์๋ค. ํด๊ฒฐ๋ฐฉ์์ ๊ณ ๋ฏผํด๋ณด์.
25์ด์์ด ๋ฌด๋ฆฌ๊ฐ ์๋ค๊ณ ํ๋จ๋๋ฉด ์๋ฅผ๋ค์ด 50%๊น์ง๋ ์๋ฆผ์ ๋ณด๊ณ ์ถ์ง ์๋ค๊ณ ํ๋ฉด 25๋ฅผ 50์ผ๋ก ๋ฐ๊พธ๋ฉด ๋์ง ๋ณ์๊ฐ?
ํด๋น pod์ resource๋ฅผ ์ถ๊ฐํด ์ค์ผ ํ์ง ์์๊ฐ?
node-exporter-daemonset.yaml ์์ ๋ค์ ๋ถ๋ถ์ ์์ ํด์ผ ํ๋ค.
Copy resources:
limits:
cpu: 250m
memory: 180Mi
requests:
cpu: 102m
memory: 180Mi
์ผ๋จ request๋ฅผ cpu 250m์ผ๋ก ํด๋ณด๊ณ ์๋ฆผ์ด ์ค๋์ง ํ์ธํด๋ณด์.
์ผ๋จ ๊ธฐ์กด๋ณด๋ค๋ %๊ฐ ๋ด๋ ค๊ฐ๊ฒ์ ์์ ์๋ค.
์ฌ์ ํ 25๊ฐ ๋์ด๊ฐ๋ฉด ์๋ฆผ์ด ๋ฐ์ 50์ผ๋ก ๋ณ๊ฒฝํด์ ํ
์คํธ
์๋ฆผ์ด ์ค์ด๋ค์๋ค.
์ด์ ์ปดํ์ผ์ ์ ์ซ์๋ค์ ๋ณ๊ฒฝํด์ค์ผํ๋๋ฐ..
Copy values+:: {
...
kubernetesControlPlane+: {
mixin+: {
_config+: {
cpuThrottlingPercent: 60,
},
},
},
}
์ด๋ ๊ฒ ํ๊ณ ์ปดํ์ผ ํธ์ํ๋ฉด ๋๋ค.
api error burn rate
์ด ์๋ฌ๊ฐ๋์ ํ์ธํด๋ดฃ๋๋ ๋
ธ๋์์ ๋ค์ ์๋ฌ๊ฐ ๋์จ๋ค.
Copy Search Line limits were exceeded, some search paths have been omitted, the applied search line
/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
Copy grafana+:: {
// Add DataSource
datasources+: [
{
name: 'prometheus',
type: 'prometheus',
access: 'proxy',
orgId: 1,
url: 'http://prometheus-k8s:9090',
editable: false,
},
{
name: 'loki',
type: 'loki',
access: 'proxy',
orgId: 2,
url: 'http://core-loki-stack:3100',
editable: false,
},
],
config+: {
sections+: {
'security': {
admin_user: 'admin',
admin_password: 'yourpassword'
},
server+: {
root_url: 'https://grafana.yourdomain/',
},
},
},
},
ingress-nginx ๋ชจ๋ํฐ๋ง ํ๊ธฐ
์ฌ๊ธฐ๋ฅผ ๋ณด๋ฉด serviceMonitor ๋ณผ์ ์๋ค ์ด๊ฑธ ๋ง๋ค์ด ์ฃผ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค์์ ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฐ๋ฐ ingress-nginx๋ ๋ฒ์ ๊ฐ์ง๊ณ ์๋ค ํ์ฑํ๋ฉด ํด์ฃผ๋ฉด ๋๋ค.
Copy - name: controller.metrics.enabled
value: 'true'
- name: controller.metrics.serviceMonitor.enabled
value: 'true'
์ด๋ฌ๋ฉด ๋๋ค. ํ๋ก๋ฉํ
์ฐ์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ๊ทธ๋ผํ๋๋ก ๋ณด์ฌ์ค๋ค.
๊ทธ๋ผํ๋์์ ๋ค์ ์ฃผ์์ json์ ์ถ๊ฐํด์ ๋์๋ณด๋๋ฅผ ๋ณผ์ ์๋ค.
์ฌ์ฉํ๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ์ ์์ผ๋ tag๋ฅผ ๋ง์ถฐ์ ์ฌ์ฉํ๋ฉด๋๋ค.
ํ์ผ์ ์ถ๊ฐ๋๊ฑธ ์์๊ฐ ์๋ค.
helmchart์์ prometheusRule ๋ถ๋ถ์ ํ์ธํ๋ฉด alert rules๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
Copy prometheusRule:
enabled: true
additionalLabels: {}
# namespace: ""
rules:
# []
# # These are just examples rules, please adapt them to your needs
- alert: NGINXConfigFailed
expr: count(nginx_ingress_controller_config_last_reload_successful == 0) > 0
for: 1s
labels:
severity: critical
annotations:
description: bad ingress config - nginx config test failed
summary: uninstall the latest ingress changes to allow config reloads to resume
- alert: NGINXCertificateExpiry
expr: (avg(nginx_ingress_controller_ssl_expire_time_seconds) by (host) - time()) < 604800
for: 1s
labels:
severity: critical
annotations:
description: ssl certificate(s) will expire in less then a week
summary: renew expiring certificates to avoid downtime
- alert: NGINXTooMany500s
expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"5.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
for: 1m
labels:
severity: warning
annotations:
description: Too many 5XXs
summary: More than 5% of all requests returned 5XX, this requires your attention
- alert: NGINXTooMany400s
expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"4.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
for: 1m
labels:
severity: warning
annotations:
description: Too many 4XXs
summary: More than 5% of all requests returned 4XX, this requires your attention
serviceMonitor ์ถ๊ฐํ๊ธฐ
Copy kind: Service
apiVersion: v1
metadata:
name: example-app
labels:
app: example-app
spec:
selector:
app: example-app
ports:
- name: web
port: 8080
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: web
upgrade
๋ฒ์ ๋ฒํธ๋ฅผ jsonnetfile.json ์์ ์
๋ฐ์ดํธํ์.
Copy 'version': 'release-0.10'
๋น๋ํ์.
Copy jb update
docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh cluster.jsonnet
resource์ limit์ค์ ์ง์ฐ๊ธฐ
ํน๋ณํ ๊ฒฝ์ฐ์ ์ด๊ฒ ํ์ํ๋ค.
Copy (import 'kube-prometheus/addons/strip-limits.libsonnet') +
์ถ๊ฐํ๊ณ ๋น๋ํ์. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
limit์ด ์ง์์ง๊ฑธ ์์ ์๋ค.
nginx grafana dash board ์ถ๊ฐ
grafana ํด๋๋ฅผ ๋ง๋ค๊ณ ํ์ผ์ ์ถ๊ฐํ์.
์ฌ๊ธฐ์ jsonํ์ผ 2๊ฐ๋ฅผ ๋ฐ์์ ์ ์ฅํ๋ค. ๋๋ 1.1.0๋ฒ์ ์ ingress-nginx๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์์ ๋ง๋ ๋ฒ์ ์ผ๋ก ์ฌ์ฉํ์.
cluster.jsonnet์์ ๋ค์์ฝ๋ ์ถ๊ฐํ์.
Copy grafana+:: {
dashboards+: {
'nginx.json': (import 'grafana/nginx.json'),
'nginx-request-handling-performance.json': (import 'grafana/request-handling-performance.json'),
},
},
๋น๋ํ ์ ์ฉํ๋ฉด ๋ค์์ฒ๋ผ ๋ณด์ธ๋ค.
์๋ฃ
node exporter listen port ๋ณ๊ฒฝํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก 127.0.0.1์์๋ง node exporter๊ฐ์ ๋ฐ๊ฒ ์ค์ ์ด ๋์ด์๋ค. ์ด๊ฑธ 0.0.0.0์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ํด๋ฌ์คํฐ์ธ๋ถ์์ ๋ฉํธ๋ฆญ์ ๋ฐ์์๊ฐ ์๋ค.
๋ณ๊ฒฝ์ ํด์ผํ๋๋ฐ..
Copy values+:: {
....
// ์ด๋ถ๋ถ์ ์ถ๊ฐํ์.
nodeExporter+: {
listenAddress: '0.0.0.0',
},
๊ฐ๋จํ ์ค๋ช
์ ํ๋ฉด vendor/kube-prometheus/main.libsonnet ์ฌ๊ธฐ ํ์ผ์ ๊ฐ๋ณด๋ฉด ๋ค์์ฒ๋ผ ๋ณด์ธ๋ค.
node exporter์ ์ค์ ์ ํ๋๊ณณ์ด๋ค.
vendor/kube-prometheus/component/node-exporter.libsonnet ๋ฅผ ์ฐธ์กฐํ๊ณ ์์๋ ์์ ์๋ค.
ํ์ผ์ ์ด์ด๋ณด์.
์ด๋ ๊ฒ ๋ณ์๋ฅผ ์ค์ ํ๊ณ ์ด๊ฑธ ๋์ค์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก cluster.jsonnet์์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ์ค์ ์ ๋ฐ์ด๋ฃ์ด์ฃผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฎ์ด์ฐ๊ฒ ๋๋ค.
kubespray์ฌ์ฉ์ ์ฃผ์์ฌํญ
์ฟ ๋ฒ๋คํฐ์ค ์ค์น๋ฅผ kubespray๋ก ํ์ ๋ถ๋ค์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํด์ฃผ์ธ์
Copy values+:: {
common+: {
namespace: 'monitoring',
platform: 'kubespray'
},
platform ์ข
๋ฅ๋ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์.