paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

Homelabにモニタリングサーバ導入4 dockerホストをcAdvisorで監視する

今回はcAdvisorを導入してコンテナのリソースを取りたいと思います。

cAdvisorインストール

コンテナの監視はcAdvisorというものが有名のようです。
公式に沿ってインストールします。監視用のコンテナを立てるだけ。

github.com

ホストごとにしか乗せられないようなのでswarmではなくstandaloneで立てます。
監視コンテナをreplicateして両機に乗せるのもなんか違うなと思い、エージェントみたいなものと思って各ホストに載せます。

1号機にインストール

masashi@lab-docker1:~$ docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor:latest
Unable to find image 'gcr.io/cadvisor/cadvisor:latest' locally
latest: Pulling from cadvisor/cadvisor
188c0c94c7c5: Pull complete
2d4828968d6c: Pull complete
b28a9b13dc6d: Pull complete
031224e6222c: Pull complete
Digest: sha256:ddadf3e2fd880deb4e0f3606d34a0d9da1165e3801116075d98a1901635dc9e8
Status: Downloaded newer image for gcr.io/cadvisor/cadvisor:latest
2da2ddf130766c730348403622b5cba70ac256348e65126a29c0b4488dda1349

コンテナが立ち上がりました。

masashi@lab-docker1:~$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS                             PORTS
                          NAMES
2da2ddf13076   gcr.io/cadvisor/cadvisor:latest   "/usr/bin/cadvisor -…"   19 seconds ago   Up 17 seconds (health: starting)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   cadvisor
4910b4db6c72   pihole/pihole:latest              "/s6-init"               6 minutes ago    Up 6 minutes (healthy)             53/udp, 53/tcp, 80/tcp, 67/udp              pi-hole_pihole.1.bnq31qeabtjyncogacmvy1qfj
0a1ecf78ca39   portainer/portainer-ce:2.18.2     "/portainer -H tcp:/…"   6 minutes ago    Up 6 minutes                       8000/tcp, 9000/tcp, 9443/tcp                portainer_portainer.1.f0rk74q8x7vsnl0ai64t7ileu
9352d9b0acd3   portainer/agent:2.18.2            "./agent"                6 minutes ago    Up 6 minutes
                          portainer_agent.i06s83zzw3xyfjpvp8fj4jybk.4ckbckqmlnwwfnbdvna2lunqe

cAdvisorへアクセス

8080ポートで上げたのでアクセスしてみます。

OK。画面見えてます。
コンテナ上げるだけでここまで見れちゃうのは便利すぎる。

2号機でも同じことやります。

prometheus.yml

prometheusが認識できるようにcAdvisor用のconfigを書きます。
2機あるので2つ記載。
インターバルはグローバルに合わせるべくコメントアウトしました。

  - job_name: "cadvisor1"
    # scrape_interval: 5s
    static_configs:
    - targets: ["10.0.1.1:8080"]

  - job_name: "cadvisor2"
    # scrape_interval: 5s
    static_configs:
    - targets: ["10.0.1.2:8080"]

prometheusを再起動してtargetの認識もOK。

Grafanaで取得

ここは前回と同じなので割愛します。
pfSenseとは別のdocker監視用のダッシュボードを作成。 とりあえずCPU、メモリ率、I/Oの情報など取ってみました。

psSenseの画面とあまり変わり映えしませんがいったんこんなもので。
CPUは使用率が上がらないので見えませんがメモリは一応コンテナの分も取得して少し見た目変化を付けました。

これで家の監視環境もひとまず完成です。 アラート系は何も設定していないのでしばらくは手動で監視を行います。
家の環境だから大量トラフィックは起きないのでピーク等が測れないのが残念。