share facebook facebook2 twitter menu hatena pocket slack

2014.06.16 MON

Sensu のイベントデータを fluentd + Treasuredata + Google Spreadsheet で集計する環境を作ってみる

川原 洋平

WRITTEN BY川原 洋平

cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平@inokara)です。


とりあえず

  • 作業メモ


やりたいこと

  • Sensu Server 上の sensu-server.log を保存しておいてあとから見やすくしたい
  • Sensu のイベントデータからアラートに該当するログだけを保存してレポーティング出来るようにしたい


やりたいことのイメージ

手書きですんません。

sensu-fluentd-treasuredata-google-spreadsheet_01



準備するもの



参考



準備

ハマったポイントから


Google アカウントの二段階認証

  • こちらを参考
  • 当初は Google Drive の SpreadSheet に API でってノリで考えていたけど断念(個人的に敷居が高かった…)


Sensu のイベントハンドラの設定

以下のように準備した。

cd /etc/sensu/handlers
curl -k -o fluentd.rb https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/handlers/notification/fluentd.rb
chmod 755 fluentd.rb
cd /etc/sensu/conf.d/
curl -k -s -o fluentd.json https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/handlers/notification/fluentd.json

尚、/etc/sensu/conf.d/fluentd.json は以下のように設定。

{
  "fluentd": {
    "host": "localhost",
    "port": 9880,
    "tag_prefix": "sensu-event"
  }
}

さらに /etc/sensu/config.json は以下のように修正。

  "handlers": {
    "default": {
      "type": "set",
      "handlers": [
        "stdout",
        "fluentd" // 追加
      ]
    },
    "stdout": {
      "type": "pipe",
      "command": "cat"
    },
    "fluentd": { // 追加
      "type": "pipe", // 追加
      "command": "/etc/sensu/handlers/fluentd.rb" // 追加
    }
  },
  "checks": {
    "test": {
      "handlers": ["default"], // 追加
      "command": "echo -n OK",
      "subscribers": [
        "test"
      ],
      "interval": 60
    }

カンマ区切りの消し忘れ、つけ忘れに注意。


td-agent.conf

以下のように sensu-server.login_tail プラグインで、イベントログは in_http プラグインで集めておいて tdlog プラグインで TreasureData に投げる。

<source>
  type http
  port 9880
  bind 0.0.0.0
  body_size_limit 32m
  keepalive_timeout 10s
</source>

<source>
  type tail
  format json
  path /var/log/sensu/sensu-server.log
  tag sensu.streame
  pos_file /tmp/fluentd.pos
</source>

<match sensu.*>
  type copy

  <store>
    type file
    path /tmp/sensu.log
  </store>

  <store>
    type tdlog
    apikey ${API KEY}
    auto_create_table
    buffer_type file
    buffer_path /var/log/td-agent/buffer/sensu
    use_ssl true
  </store>
</match>

<match sensu-event.*>
  type copy

  <store>
    type file
    path /tmp/sensu-event.log
  </store>

  <store>
    type tdlog
    apikey ${API KEY}
    auto_create_table
    buffer_type file
    buffer_path /var/log/td-agent/buffer/sensu-event
    use_ssl true
  </store>
</match>


こんなかんじ


Treasure Data のダッシュボードで…

sensu-fluentd-treasuredata-google-spreadsheet_02

sensu-server.logsensu のイベントが登録されている。


Google SpreadSheet の準備

sensu-fluentd-treasuredata-google-spreadsheet_03

sensu という名前のスプレッドシートを一枚用意しておく。


クエリを Google Spreadsheet に送る

あとは Treasure Data のダッシュボードから New Query にアクセスして…

sensu-fluentd-treasuredata-google-spreadsheet_04

Export result to から Google Spreadsheet を選択して認証の情報等を設定する。

sensu-fluentd-treasuredata-google-spreadsheet_05

また、上図のようにクエリに始まり Spreadsheet の情報等を設定、記載して上で Submit をクリックすると…

sensu-fluentd-treasuredata-google-spreadsheet_06


Spreadsheet を見てみましょ

おお。

sensu-fluentd-treasuredata-google-spreadsheet_07

以下のように ALERT だけが抽出されているではないですか!



実際の現場でありそうなシチュエーション

Treasure DataSQL ライクなクエリが書けるのが嬉しい。


あのクライアントの ALERT 発生数は?

SELECT 
  COUNT(*)
FROM
  alert
WHERE
  client = "sensu-client4"

以下のように Google Spreadsheet には出力される。

sensu-fluentd-treasuredata-google-spreadsheet_08


あの監視項目(check_name)の ALERT 発生数は?

SELECT 
  COUNT(*)
FROM
  alert
WHERE
  ACTION = "ALERT"

以下のように Google Spreadsheet には出力される。

sensu-fluentd-treasuredata-google-spreadsheet_09



さいごに


もう Excel へのコピペは要らない

監視ツール(某なぎおす)のレポート出力をコピペで Excel に貼り付けていた頃が懐かしくなったが…

  • Sensu
  • fluentd
  • Treasure Data
  • Google Spreadsheet

この 4 つのツールを組み合わせてレポーティングも自動化出来そうな気がします!


最後に一言

Treasure Data まじ凄いと思った。

元記事は、こちら