どうも僕です。タイトルどおりです。
Dockerコンテナのメトリクス監視してますか???
本番環境ならDataDogとかそのへんで監視していてもローカル環境のやつ確認してないこと多くないですか?
※ 僕はしてないです。dd-agentローカルにも入れれば終わりじゃんって話なんですが、なんかあれじゃないですか。。。
監視してなかったお陰で、高負荷時に突然死する原因を調査したい場合に、無事頭を抱えました。(原因はメモリ枯渇してた)
そこで、コンテナ名, コンテナID, CPU, MEM, NET RX/TX, IO R/W, PIDS 情報が見れたらいいのになーを調べてたらさくっと見れることに気づいたので記事にまとめておきます。
本家の付随機能を利用する
コンテナのリソース使用状況をライブで流し続ける
使い方
docker stats [オプション] [コンテナ...]
オプション
| 名前, 省略形 | デフォルト | 説明 |
|---|---|---|
| --all, -a | false | 全てのコンテナを表示(デフォルトは実行中のみ) |
| --format | Goテンプレートで整えて表示 | |
| --no-stream | false | ストリームを無効化し、初回結果のみ表示 |
フォーマット
| プレースホルダー | 説明 |
|---|---|
| .Container | コンテナ名 もしくは コンテナID(user input) |
| .Name | コンテナ名 |
| .ID | コンテナID |
| .CPUPerc | CPUパーセンテージ |
| .MemUsage | メモリ使用量 |
| .NetIO | ネットワークIO |
| .BlockIO | ディスクIO |
| .MemPerc | メモリパーセンテージ(Windowsは使用不可) |
| .PIDs | PID番号(Windowsは使用不可) |
使用例
$ docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
77dd929886dd 0.01% 41.3MiB / 995.8MiB 4.15% 648B / 0B 315kB / 0B 12
68e984e2c6a4 0.07% 225.9MiB / 995.8MiB 22.69% 648B / 0B 2.04MB / 12.9MB 27
$ docker stats --format "table {{.ID}}\t{{.CPUPerc}}\t{{.MemUsage}}"
CONTAINER ID CPU % MEM USAGE / LIMIT
77dd929886dd8a6e75ee2a53624431186ec43f60d446067ad57b94641ce22912 0.01% 41.3MiB / 995.8MiB
68e984e2c6a4024f3d85ddc46252a433098573935baebe269567fa5a65848d37 0.05% 225.9MiB / 995.8MiB
ctopを使う
topライクなコンテナのメトリクス監視
使い方
デフォルトでDOCKER_HOSTを使用します。connectorオプションを使うことでDocker or RunCに対応することができるみたいです。(デフォルトでしか試していないです)
$ ctop [オプション]
オプション
| 名前 | 説明 |
|---|---|
| -a | 起動してるコンテナのみ表示 |
| -connector | 使用するコンテナコネクタを設定(docker, runc) |
| -f | 初期のフィルター文字列を設定 |
| -h | ヘルプ表示 |
| -i | デフォルトの色を反転 |
| -r | コンテナの逆順ソート |
| -s | 初期のコンテナのソートフィールド選択(cpu, id, io, mem, mem %, name, net, pids, state) |
| -v | バージョン情報 |
キーバインド
| 名前 | 説明 |
|---|---|
| a | 全コンテナ表示と起動してるコンテナ表示の切り替え |
| f | 表示するコンテナのフィルター |
| H | ctopのヘッダー表示の非表示の切り替え |
| h | ヘルプ表示 |
| s | ソートフィールドの変更 |
| r | コンテナの逆順ソート |
| q | 終了 |
使用例
公式のdocから引用してます。
詳しく見たいコンテナを選んでenterを押すと
まとめ
デフォルトの機能でもできるけど若干見づらいのでグラフィカルに調査したい場合はctop使いましょう!もちろん開発環境の話です。

