ようへいの日々精進XP

よかろうもん

Debian 8.1 で Datadog Agent 動かした際に Docker のメモリ使用量が取得出来なくて困ったのでメモ

困ったこと

  • Docker コンテナの監視を設定したら Memory 使用量の監視が行われない

経緯

  • Debian 8.1 に dd-agent をインストールした
  • ホスト自体の CPU やメモリ等の基本的な監視を開始した
  • docker integration を有効にした
  • コンテナ数、コンテナの CPU 使用率のリソースは取得出来るが Memory 使用量が取れないことに気づく
  • datadog のログには以下のようなログが吐かれていた
2015-08-21 10:47:38 JST | INFO | dd.collector | checks.docker(docker.py:466) | Can't open None/system.slice/docker-f54f5d40ae8190ed4c84c6007c801be8caf83ad26737a9ca376a1a850c7557c6.scope/memory.stat. Metrics for this container are skipped.
2015-08-21 10:47:38 JST | INFO | dd.collector | checks.docker(docker.py:466) | Can't open None/system.slice/docker-85bfb90a711c7ae491686e8731f43a1d3ca64e2baf5f813d5759cfeb3408305f.scope/memory.stat. Metrics for this container are skipped.
2015-08-21 10:47:57 JST | INFO | dd.collector | checks.docker(docker.py:466) | Can't open None/system.slice/docker-288bfe1cd050eef71eaab989d7b8cf1db077507e302bc59ab014de9b43e4274d.scope/memory.stat. Metrics for this container are skipped.

原因と対処

原因

  • /sys/fs/cgroup 以下に memory がマウントされていない
  • Ubuntu / Debian の場合にはデフォルトで memory controller はマウントされない FAQ でした

対処

# /etc/default/grub を修正
$ diff -u /etc/default/grub.original /etc/default/grub
--- /etc/default/grub.original  2015-08-21 10:46:41.828000000 +0900
+++ /etc/default/grub   2015-08-21 10:46:50.968000000 +0900
@@ -7,7 +7,7 @@
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
 GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS0,115200n8r"
-GRUB_CMDLINE_LINUX=""
+GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
 
 # Uncomment to enable BadRAM filtering, modify to suit your needs
 # This works with Linux (no patch required) and with any kernel that obtains

# update-grub を実行
$ sudo update-grub

# 再起動
$ sudo shutdown -r now

しばらくするとメモリの使用量も取得出来るようになった。

f:id:inokara:20150821121126p:plain


メモ

メモリコントローラを有効にするデメリット

Docker のドキュメントに以下のように記載されているのが気になる。

To prevent these messages, enable memory and swap accounting on your system. Enabling memory and swap accounting does induce both a memory overhead and a performance degradation even when Docker is not in use. The memory overhead is about 1% of the total available memory. The performance degradation is roughly 10%.

ざっくり意訳すると...

  • Memory と Swap を計上する機能を有効にする必要がある
  • 機能を有効にした場合にはメモリのオーバーヘッドとパフォーマンス低下が発生する
  • オーバーヘッドはメモリ容量(使用可能な)の約 1 %
  • 性能低下は約 10 %

とのこと。

なぜ...

  • デフォルトでメモリコントローラが無効になっているのかが気になる

以上。