背景
うちのパソコン、たまに負荷をかけると勝手に再起動してしまう問題がありました。
再起動してもdocker-compose.yamlでrestart: alwaysを設定しておけばDockerのサービスが走った段階で勝手にコンテナが立ち上がってくれるのですが、どうせなら現在どんな状態にあるのかもウェブから見れたら便利だなと思った次第です。
まあDocker自体がコケたらウェブサービスもコケるので意味があるのかないのかは微妙なところなのですが、死活監視というのは結構楽しそうでCloudflareにも似たような機能があるっぽいのですがnxapiでも利用されているGrafanaを利用してみることにしました。
Grafana
Grafanaはサーバーのデータのビジュアライズをしてくれるフレームワークです。
クラウドのサービスも展開しているのですが、小規模であればオンプレでやってしまっても良いでしょう。Dockerのイメージも公開されているのでそれを利用します。

データの流れとしてはこんな感じで、直接Dockerの様子を覗きにいくのはcAdvisorです。
ただしcAdvisor自体はビジュアライズ面がそこまで強力ではないので、Grafanaを利用しようわけですね。
grafana-docker-resource-monitor
めんどくさかったので全部Dockerで動くようにしました。
Cloudflare Tunnelは必須ではありません。
参考にしたページはDocker Container Monitoring with cAdvisor, Prometheus, and Grafana using Docker Composeで、ファイルもだいたい同じ感じですが不要なポートはDockerから外に出さないようにしてアクセスは全てCloudflare Tunnelを経由するようにしています。
そのせいなのかわかりませんが、Public dashboardを立ち上げるとInternal Server ErrorがData Sourceで返ってきて何も表示されません
datasources.ymlのURLで直接指定してみてもダメだったのでダメなのかもしれません。単にaccess=proxyなのがダメなのかもしれないんですが、原因がわからないのとまあ使えなくてもそこまで不便ではないのでとりあえず放置しています。
わかった方はPR出していただけると助かります。
備忘録
起動するとError response from daemon: error while creating mount source path '/var/lib/docker': mkdir /var/lib/docker: read-only file systemと表示されることがある。これはDockerがaptではなくsnapでインストールされていることが原因である。
snapとaptの比較についてはSnap vs APT: What’s the Difference?がわかりやすい。
| 項目 | Snap | APT |
|---|---|---|
| パッケージタイプ | .snap | .deb |
| ツール名 | snaped | APT |
| CLI | snap | apt |
| フォーマット | SquashFS archive | ar archive |
| リリース | Snap Store | Debian repositories |
| インストールサイズ | 大きい | 小さい |
| 依存関係 | パッケージに梱包 | 共有 |
| アップデート | 自動 | 手動 |
| セキュリティ制限 | 制限 | 限定的に制限 |
| 複数インストール | 可能 | 不可能 |
| 複数バージョンインストール | 可能 | 不可能 |
どちらが良いかは一長一短のようなのだが、特に困っていることがなければsnapのほうが安全そうな気はする。
dockerがどこにインストールされているかはwhich dockerで確認できる。/snap/bin/dockerと表示された場合にはsnapでdockerがインストールされている。
# Snap - /var/snap/docker/common/var-lib-docker:/var/snap/docker/common/var-lib-docker:ro # APT # - /var/lib/docker/:/var/lib/docker:roそのときはcadvisorで指定しているvolumesを上のように変更する。すると正しく起動できるようになるはず。
記事は以上。