mackerel-agentでカスタムメトリックスを使いプロセス数を監視するまでの手順

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

俺これ書き終わったらサーモン食べに行くんだ、横山です。
今回は、mackerelに自分でカスタムメトリックスを追加していく手順のメモです。

前提

・APIKEYをmackerel-agent.confに記載しmackerel-agentが起動する段階
     → そこまでの設定は、こちらの記事を参考にしてください

スクリプトの準備

・/path/to/process.sh

#!/bin/bash

name="process.count.httpd"
monitor_time=`date +%s`
count=`ps aux | grep httpd | grep -v grep | wc -l`
echo -e "${name}\t${count}\t${monitor_time}"

プログラムを書いたら、実行出来るようにしておいてください

$ chmod +x /path/to/process.sh

mackerel-agent.confに記載

・/etc/mackerel-agent/mackerel-agent.conf

... (省略) ...

[plugin.metrics.process]
command="/path/to/process.sh"
type="metric"

mackerel-agent.confの末尾に追加して下さい。

Agent再起動

$ sudo service mackerel-agent start
or
$ sudo /etc/init.d/mackerel-agent start

mackerel_cm-demo01

これで登録出来ました。めでたしめでたし
…とはなりません。

カスタムメトリックス登録時にグラフを綺麗に出したい

実はこのままですと、mackerel-agent.confverbose = trueにして起動すると以下のエラーログが確認出来ると思います。

2015/04/10 10:01:14 DEBUG agent Failed to fetch meta information from plugin &{{/path/to/process.sh} %!s(*metrics.pluginMeta=<nil>)} (non critical); seems that this plugin does not have meta information: bad format of first line: "process.count.httpd\t9\t1428660074\n"

あとグラフのラベルが name が表示されるので、予めグラフの設定をスクリプト側で定義出来るようにします。

グラフ定義

・/path/to/process.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import os
import sys
import simplejson

def GraphDef():
    json_dic = {
        'graphs': {
            'process.count': {
                'label': 'Process Count',
                 'unit': 'integer',
                 'metrics': [
                     {
                        'name': 'httpd',
                        'label': 'HTTPd Server'
                     }
                ]
            }
        }
    }
    print "# mackerel-agent-plugin"
    print simplejson.dumps(json_dic)


if __name__ == "__main__":
    if os.environ.get('MACKEREL_AGENT_PLUGIN_META', '')  == '1':
        GraphDef()
        sys.exit(0)

    os.system('/path/to/process.sh')

こちらもプログラムを書いたら、実行出来るようにしておいてください

$ chmod +x /path/to/process.py

Shellでのjsonベタ書きは辛かったので、pythonで書いてjson出力しています。
環境変数、MACKEREL_AGENT_PLUGIN_META=’1’の時グラフ定義を出力させます。
その際、一行目に# mackerel-agent-pluginの文字を標準出力させないとグラフ定義として見てくれません。

また、Shell→Pythonコードになったことによりmackerel-agent.confの中身も変更、
並びにmackerel-agentの再起動します。

... (省略) ...

[plugin.metrics.process]
command="/path/to/process.py"
type="metric"

結果

mackerel_cm-demo02

グラフの情報が更新されない場合は、mackerel-agentを止めて、グラフを削除してからmackerel-agentを動かしてください。

まとめ

グラフ定義の部分が少し面倒ではありますが、ソースコード50行以内でカスタムメトリックスを登録出来るのでとても便利だと思いました。

参考