mackerelでLXC毎のCPU利用率を記録する

mackerelでユーザメトリックのグラフを作れるので、先日作ったlxc-cpu-usageを 利用してホスト上で稼働しているコンテナのCPU利用率を表示させる様にしてみました。

mackerelでは、ユーザ定義のメトリックを送出するのには

# /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.vmstat]
command = "ruby /path/to/vmstat-metrics.rb"
type = "metric"

といった内容を設定ファイルに追記する必要があって、 ここで [plugin.metrics.****] が項目名、command の部分が実際にメトリックを取得するコマンドになって、 Mackerelのドキュメントを参照すると、このコマンドの出力は以下のフォーマットで出力されることが期待されています。

{メトリック名}\t{メトリック値}\t{エポック時間}

ということで、lxc-cpu-usage のコマンドを拡張して以下の様な形でオプションを渡せる様にしました。*1

$ lxc-cpu-usage --name="remp001|storyboards001|castory001|mongo001|manage001" --metric
storyboards001  0.09    1401521140636
remp001 0.17    1401521140647
mongo001        0.53    1401521140652
castory001      0.02    1401521140659
manage001       0.12    1401521140669

--name のパラメータとして"|"区切りで複数のコンテナ名を渡せる様に対応して、 --metric でタブ区切りでコンテナ名, CPU利用率, エポック時が表示される様になっています。

これを利用して、Mackerelの設定ファイルを以下の様に追記します。

# /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.lxc]
command = "lxc-cpu-usage --name='remp001|storyboards001|manage001|castory001|mongo001' --metric"
type = "metric"

Mackerel agentをRestart

$ sudo /etc/init.d/mackerel-agent restart
 * Restarting  mackerel-agent
   ...done.

しばらくするとMackerel上で各コンテナのCPU利用率が確認できる様になります。

とてもあっさりと任意のメトリックが追加できて便利。