prometheus.ymlがcAdvisorを読み込まずどハマりした
■はじめに
前回の続きで、久しぶりに再構築をしようとしたコンテナ監視環境なんですが思いっきりハマってしまったので備忘録です。
本当に下らないミスで起こったどうしようもないこと。
■原因
コロンの後にホワイトスペースが入っていた。
- cadvisor: 8080
■事象
prometheusで監視設定する場合、ymlにターゲットを設定することになります。
この際の記述の仕方は
-targets:[ip:port]
と書くか
-targets: - hostname:port
と書くかのいずれかです。
ボクは後者を好んで書くのでcAdvisorの時は
- targets: - cadvisor: 8080
と書いてました。
これでdocker-compose up すると何故がprometheusだけリスタートがかかります。
prometheus % docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------------- cadvisor /usr/bin/cadvisor -logtostderr Up (healthy) 127.0.0.1:8080->8080/tcp grafana /run.sh Up (health: starting) 127.0.0.1:3000->3000/tcp loki /usr/bin/loki -config.file ... Up (healthy) 127.0.0.1:3100->3100/tcp prometheus /bin/prometheus --config.f ... Restarting
ログを確認します。
level=error ts=2020-07-23T07:15:36.802Z caller=main.go:758 err="error loading config from \"/etc/prometheus/prometheus.yml\": couldn't load configuration (--config.file=\"/etc/prometheus/prometheus.yml\"): parsing YAML file /etc/prometheus/prometheus.yml: yaml: unmarshal errors:\n line 19: cannot unmarshal !!map into string"
文字列にしろ!って怒られます。
ここからが迷走でした。
- cadvisor: "8080"
ぶぶー
- cadvisor: '8080'
はいだめー もういっそ前者の書き方に変えるか。。
- targets: ["localhost:8080"]
動かない、っていうか文字列にしろってなんだ。。?
調べてみると公式にサンプルコードがあったので、そちらを確認。
。。。ん?
- localhost:9090
あー!!
そういうことか、これはFQDNなわけですね。
ずっとyamlのkey:valueだと思ってた。。
思い込みって怖い。
というわけで以下が動作したprometheus.ymlです。
global: scrape_interval: 15s evaluation_interval: 15s external_labels: monitor: 'codelab-monitor' alerting: alertmanagers: - static_configs: - targets: rule_files: scrape_configs: - job_name: "cadvidsor" scrape_interval: 5s static_configs: - targets: - cadvisor:8080 labels: group: "cadvisor"
起動確認です。
prometheus % docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------- cadvisor /usr/bin/cadvisor -logtostderr Up (healthy) 127.0.0.1:8080->8080/tcp grafana /run.sh Up (unhealthy) 127.0.0.1:3000->3000/tcp loki /usr/bin/loki -config.file ... Up (healthy) 127.0.0.1:3100->3100/tcp prometheus /bin/prometheus --config.f ... Up (healthy) 127.0.0.1:9090->9090/tcp
prometheusはちゃんとHealthCheck通ってますね。
(grafanaがunhealthyだけど、あとで確認)
ログも確認しましょう。
level=info ts=2020-07-23T07:16:55.411Z caller=main.go:695 msg="TSDB started" level=info ts=2020-07-23T07:16:55.411Z caller=main.go:799 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml level=info ts=2020-07-23T07:16:55.414Z caller=main.go:827 msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml level=info ts=2020-07-23T07:16:55.415Z caller=main.go:646 msg="Server is ready to receive web requests."
正常に起動しています。
prometheusのtargetsも確認します。
さて、unhealthyだったけど一応Grafanaも確認します。
ダッシュボードはGrafanaLabで配布しているDocker and system monitoringを使いました。
ちょっと古いので一部のグラフがN/Aになりますが、一旦疎通確認としては問題なさそうです。
いやー疲れたw
本日はここまで。
ではでは。