ワン、ワン、ワン、犬の かっぱ (@inokara) です。
はじめに
sensu の community-plugin を眺めていたら datadog にメトリクスを送るプラグインを見つけたので使ってみました。
datadog については…
まずは、以下の URL やブログ記事を御覧ください。
で、datadog は ASP 型のモニタリングサービスで Hatena の mackerel や newrelic に近いのかなーと思っています。尚、メトリクスデータはエージェント(Datadog Agent)か API を利用して datadog に送信されます。エージェントは Windows から各種 Linux のディストリビューション、MacOS X に対応しているようです。詳細は以下を御覧ください。
今回は sensu プラグインの datadog-metrics.rb を利用(それと Ruby から datadog API を叩く為の dogapi を利用)して sensu で収集したメトリクスデータを datadog で可視化してみます。
尚、datadog は基本的には有償ですが、以下のような条件付きですが Lite プランという無償版もありますので簡単に試す場合には Lite プランで良いかなと思います。
- 追跡可能なホストは 5 ホスト
- データの保存は 1 日
ということで、今回は Lite プランを利用します。
準備
datadog のアカウント作成
アカウントの作成等は割愛させて頂きます…が Gmail のアカウントでログインすることが出来ました。
API キーと Application キー
sensu プラグインと連携させる為に API キーと Application キーを確認します。
Integrations メニューから APIs をクリックすると…
以下のように表示されるので API キーを確認して Application キーを作成します。
sensu 側の設定
プラグインの設置
cd /etc/sensu/plugins wget https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/handlers/metrics/datadog-metrics.rb chmod 755 datadog-metrics.rb
プラグインの設定
dogapi のインストールと API キーと Application キーの設定をします。
dogapi のインストール
sensu の組み込み用 Ruby を利用している場合には以下のようにしてインストールします。
/opt/sensu/embedded/bin/gem install dogapi --no-ri --no-rdoc -V
API キーと Application キーの設定
cd /etc/sensu/conf.d vim datadog-metrics.json
以下のように設定します。
datadog-metrics.json
{ "datadog": { "api_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "app_key": "sensu", "tags": [""] } }
ハンドラの設定
datadog をハンドラとして定義します。
cd /etc/sensu/conf.d vim handler_datadog.json
以下のように設定します。
handler_datadog.json
{ "handlers": { "datadog": { "type": "pipe", "command": "/etc/sensu/plugins/datadog-metrics.rb" } } }
メトリクスを取得するプラグインの設定
今回は Windows Server のメモリ、CPU、ディスク使用量、空き容量を取得するプラグインを利用します。
cd /etc/sensu/conf.d vim check_windows.json
以下のように設定します。
check_windows.json
{ "checks": { "ram-usage-windows": { "type": "metric", "handlers": ["datadog"], "command": "/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/ram-usage-windows.rb", "interval": 60, "subscribers": [ "win" ] }, "windows-cpu-load-metrics": { "type": "metric", "handlers": ["datadog"], "command": "/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/windows-cpu-load-metrics.rb", "interval": 60, "subscribers": [ "win" ] }, "disk-usage-metrics": { "type": "metric", "handlers": ["datadog"], "command": "/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/disk-usage-metrics.rb", "interval": 60, "subscribers": [ "win" ] } } }
設定後に sensu-server を再起動します。
sudo service sensu-server restart
とりあえず Uchiwa
sensu-server のログを確認
以下のようにログが出力されればとりあえずメトリクスの収集が開始しています。
{"timestamp":"2014-09-06T11:04:36.753049+0000","level":"info","message":"publishing check request","payload":{"name":"windows-cpu-load-metrics","issued":1410001476,"command":"/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/windows-cpu-load-metrics.rb"},"subscribers":["win"]} {"timestamp":"2014-09-06T11:04:55.468500+0000","level":"info","message":"publishing check request","payload":{"name":"disk-usage-metrics","issued":1410001495,"command":"/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/disk-usage-metrics.rb"},"subscribers":["win"]} {"timestamp":"2014-09-06T11:04:36.752556+0000","level":"info","message":"publishing check request","payload":{"name":"ram-usage-windows","issued":1410001476,"command":"/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/ram-usage-windows.rb"},"subscribers":["win"]}
このログはクライアントに対して各メトリクスのチェック要求を sensu-server から出しているログです。チェック要求を受けたクライアントでは以下のようなログが出力されます。
{"timestamp":"2014-09-06T11:10:40.454607+0000","level":"info","message":"publishing check result","payload":{"client":"win-sensu-client","check":{"name":"windows-cpu-load-metrics","issued":1410001838,"command":"/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/windows-cpu-load-metrics.rb","executed":1410001839,"duration":1.406,"output":"WIN-xxxxxxxxMQP.cpu.loadavgsect3.129805t1410001839rnrn","status":0}}} {"timestamp":"2014-09-06T11:10:40.454607+0000","level":"info","message":"publishing check result","payload":{"client":"win-sensu-client","check":{"name":"ram-usage-windows","issued":1410001838,"command":"/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/ram-usage-windows.rb","executed":1410001839,"duration":1.406,"output":"WIN-xxxxxxxxMQP.ram.ramUsagePersect67.49t1410001839rnrn","status":0}}} {"timestamp":"2014-09-06T11:14:00.079747+0000","level":"info","message":"publishing check result","payload":{"client":"win-sensu-client","check":{"name":"disk-usage-metrics","issued":1410002038,"command":"/opt/sensu/embedded/bin/ruby.exe /opt/sensu/plugins/disk-usage-metrics.rb","executed":1410002039,"duration":0.156,"output":"WIN-xxxxxxxxMQP.disk_usage.disk_C.usedt19981.04t1410002040rnWIN-xxxxxxxxMQP.disk_usage.disk_C.availt10386.95t1410002040rnWIN-xxxxxxxxMQP.disk_usage.disk_C.used_percentaget66t1410002040rnrn","status":0}}}
datadog を確認
しばらく放置していると…Custom Metrics として登録されてました。
さらにしばらく放置していると…以下のようにグラフが生成されました。(オリジナルのダッシュボードを以下の通りに作ってみました)
おお。カッコイイ。
最後に
Graphite 一択だと思っていた sensu で収集するメトリクスの可視化環境ですが datadog を使えば Graphite をセットアップ、運用する手間を省きつつ、かなりカッコよくて多機能な環境を手に入れることが出来そうです。(有償な点は注意ですが…)
元記事はこちらです。
「sensu と datadog を連携してちょっとリッチなメトリクスの可視化」