prometheus.ymlがcAdvisorを読み込まずどハマりした

■はじめに

前回の続きで、久しぶりに再構築をしようとしたコンテナ監視環境なんですが思いっきりハマってしまったので備忘録です。
本当に下らないミスで起こったどうしようもないこと。

■原因

コロンの後にホワイトスペースが入っていた。

- cadvisor: 8080

これはFQDNであってKey:Valueではない!

■事象

prometheusで監視設定する場合、ymlにターゲットを設定することになります。

prometheus.io

この際の記述の仕方は

-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"]

動かない、っていうか文字列にしろってなんだ。。?
調べてみると公式にサンプルコードがあったので、そちらを確認。

github.com

。。。ん?

- 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も確認します。
f:id:theboyalex:20200723175033p:plain さて、unhealthyだったけど一応Grafanaも確認します。

f:id:theboyalex:20200723181441p:plain

ダッシュボードはGrafanaLabで配布しているDocker and system monitoringを使いました。
ちょっと古いので一部のグラフがN/Aになりますが、一旦疎通確認としては問題なさそうです。


いやー疲れたw
本日はここまで。

ではでは。