Datadog で独自メトリックをグラフ化する
はじめに
Datadog の Agent Check を書いてみたので簡単に記録しておく。
公式ドキュメントを読めばわかることだが、「それがめんどくさいんじゃ」という人の参考になれば幸いである。
環境
概要
Datadog の Agent をインストールすると自動的にサーバー監視が始まり、ダッシュボードにグラフが追加されるのだが、初期状態では CPU、メモリ、ネットワークの使用状況など、標準的なグラフのみである。ここに独自の監視項目を追加したい、という場合には Agent Check という仕組みを利用する。簡単に言うと「Python スクリプトを置いておけば勝手に実行してくれる」という仕掛けになっている。 http://docs.datadoghq.com/guides/agent_checks/
手順
/etc/dd-agent/conf.d/mytest.yaml を用意する。このファイル内にタブ(=0x09)があると読んでもらえないので注意。
init_config: instances: [{}]
/etc/dd-agent/checks.d/mytest.py を用意する。クラス名とファイル名は無関係。
from checks import AgentCheck import random class MyTest(AgentCheck): def check(self, instance): key = 'user.mygauge1' value = random.random() * 1000 self.gauge(key, value)
パーミッションは下記のようにした。
-rw-r--r--. 1 dd-agent dd-agent 181 11月 4 16:56 2014 /etc/dd-agent/checks.d/mytest.py -rw-r--r--. 1 dd-agent root 35 11月 4 16:31 2014 /etc/dd-agent/conf.d/mytest.yaml
テスト。
# service datadog-agent configtest
agent を起動。
# service datadog-agent start
Dashboard を見るとグラフが増えている。
グラフを開く。
完成。
さらに
同一のカテゴリーだがグラフとしては分けたい、という場合。tag を利用する。
Python の部分。'user.net.traffic' に特別な意味があるわけではなく、単純に好みで。
self.gauge('user.net.traffic', value, tags = ['direction:in', 'port:80', 'protocol:tcp']) self.gauge('user.net.traffic', value, tags = ['direction:out', 'port:80', 'protocol:tcp']) self.gauge('user.net.traffic', value, tags = ['direction:in', 'port:443', 'protocol:tcp']) self.gauge('user.net.traffic', value, tags = ['direction:out', 'port:443', 'protocol:tcp']) self.gauge('user.net.traffic', value, tags = ['direction:in', 'port:8080', 'protocol:tcp']) self.gauge('user.net.traffic', value, tags = ['direction:out', 'port:8080', 'protocol:tcp'])
グラフ。
{ "viz": "timeseries", "requests": [ { "q": "diff(user.net.traffic{$host, protocol:tcp, direction:in, port:80})" }, { "q": "diff(user.net.traffic{$host, protocol:tcp, direction:out, port:80})" }, { "q": "diff(user.net.traffic{$host, protocol:tcp, direction:in, port:443})" }, { "q": "diff(user.net.traffic{$host, protocol:tcp, direction:out, port:443})" }, { "q": "diff(user.net.traffic{$host, protocol:tcp, direction:in, port:8080})" }, { "q": "diff(user.net.traffic{$host, protocol:tcp, direction:out, port:8080})" } ] }
補足
- check を書き換えたら restart。
- グラフにはいくつかの種類がある。
- "host:コンピューター名" というタグは勝手に入る。
- キーの名前の最初の「.」までが大分類になるようだが、詳細はわからない。
- タグのあたりはグラフを実際に描いてみないと掴むのが難しい。とくかくやってみる。
- たとえば「自分のアプリケーションなどからバッチ的に独自メトリックを送信してグラフ化したい」という場合には dogstatsd というものを利用する。こちらも驚くほど簡単なのでトライしてください。 http://docs.datadoghq.com/guides/metrics/