share facebook facebook2 twitter menu hatena pocket slack

2014.10.27 MON

sensu のイベントを Google SpreadSheet に記録するハンドラを作ってみた

川原 洋平

WRITTEN BY川原 洋平

どうも、cloudpackかっぱ@inokara)です。

はじめに

sensu が検知した ALERT や RESOLVE の結果を Excel シートに纏められれば嬉しいかもしれんなあと思って作ってみました。Excel よりも Google SpreadSheet の方が作りやすそうだったのでとりあえずは Google SpreadSheet に手を付けました。

ちなみに以前には fluentd と Treasuredata を利用して Google SpreadSheet へ纏めるということをやってみましたが、今回は sensu から直接書き込むことになります。


参考


こんなの

ギットハヴ

  • これ
  • まともなエラーハンドリングが行われていません…(すいません)
  • まだ Merge されてません(このままだと Merge されんかも…)

使い方

google-drive-ruby をインストールする

環境は CentOS 6.5 で既に Sensu 関連パッケージは導入済みです。

sudo yum install libxml2 patch
sudo /opt/sensu/embedded/bin/gem install google_drive --no-ri --no-rdoc -V

google-drive-ruby のインストール途中には nokogiri のビルドがありますので事前に libxml2 や patch 等のツールもインストールしておきましょう。

Google ShpreadSheet の設定

sensuイベントをGoogle Spreadsheet に記録する: Worksheet ID(?)はurlに含まれる

ハンドラの定義

適当な sensu-check でハンドラの定義を入れておきます。もちろん keepalive でも構いません。

  "handlers": {
    "default": {
      "type": "set",
      "handlers": [
        "stdout",
        "gsp"
      ]
    },
    "stdout": {
      "type": "pipe",
      "command": "cat"
    },
    "gas": {
      "type": "pipe",
      "command": "/etc/sensu/plugins/gas.rb"
    }
  },

プラグイン自体の設定

プラグイン自体は /etc/sensu/plugins/ 以下に置きましょう。プラグインの設定は /etc/sensu/conf.d/ 以下あたりに以下のような設定で置きます。

{
  gsp: {
    sheet: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    username: "your@gmail.com",
    apppassword: "zzzzzzzzzzzzzzzz"
  }
}

ポイントは…

  • sheet には上図の Worksheet の ID を定義
  • apppassword はアプリケーション用のパスワードを定義

こんな感じ

適当にクライアントの sensu-client を停止して暫く時間を置くと…以下のように Google SpreadSheet に記録されました。

sensuイベントをGoogle Spreadsheet に記録する: 記録された様子

クライアント毎にソートしたりすれば立派(?)なお客様への報告資料が出来てしまいます!(笑)

次の予定

  • クライアント毎にシートを分けるオプションを付ける
  • イベント毎にシートを分けるオプションを付ける
  • 勝手にグラフとか作ってくれたりすると嬉しい

  • Ruby から手軽に Google SpreadSheet を扱うことが出来たのが嬉しす
  • 昔 Nagios の監視結果を csv で出力して Excel で集計していた頃が懐かしい…

元記事は、「sensu のイベントを Google SpreadSheet に記録するハンドラを作ってみた」です。