share facebook facebook2 twitter menu hatena pocket slack

2014.09.23 TUE

sensu と datadog を連携してちょっとリッチなメトリクスの可視化

川原 洋平

WRITTEN BY川原 洋平

ワン、ワン、ワン、犬の かっぱ (@inokara) です。

はじめに

sensu の community-plugin を眺めていたら datadog にメトリクスを送るプラグインを見つけたので使ってみました。
sensu と datadog でリッチなメトリクスの可視化 (1)

datadog については…

まずは、以下の URL やブログ記事を御覧ください。

で、datadog は ASP 型のモニタリングサービスで Hatena の mackerelnewrelic に近いのかなーと思っています。尚、メトリクスデータはエージェント(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 をクリックすると…
sensu と datadog でリッチなメトリクスの可視化 (2)

以下のように表示されるので API キーを確認して Application キーを作成します。
sensu と datadog でリッチなメトリクスの可視化 (3)

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

以下の通りに Check に登録されました。
sensu と datadog でリッチなメトリクスの可視化 (4)

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 として登録されてました。
sensu と datadog でリッチなメトリクスの可視化 (5)

さらにしばらく放置していると…以下のようにグラフが生成されました。(オリジナルのダッシュボードを以下の通りに作ってみました)
sensu と datadog でリッチなメトリクスの可視化 (6)

おお。カッコイイ。

最後に

Graphite 一択だと思っていた sensu で収集するメトリクスの可視化環境ですが datadog を使えば Graphite をセットアップ、運用する手間を省きつつ、かなりカッコよくて多機能な環境を手に入れることが出来そうです。(有償な点は注意ですが…)

元記事はこちらです。
sensu と datadog を連携してちょっとリッチなメトリクスの可視化