cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平(@inokara)です。
とりあえず
- 作業メモ
やりたいこと
- Sensu Server 上の sensu-server.log を保存しておいてあとから見やすくしたい
- Sensu のイベントデータからアラートに該当するログだけを保存してレポーティング出来るようにしたい
やりたいことのイメージ
手書きですんません。
準備するもの
- Sensu Server(すでにあるもの)
- sensu-community-plugins/handlers/notification/fluentd.rb
- fluentd
- fluent-plugin-td
- Treasure data のアカウント
- Google Drive のアカウント
参考
準備
ハマったポイントから
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.log は in_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-server.log や sensu のイベントが登録されている。
Google SpreadSheet の準備
sensu という名前のスプレッドシートを一枚用意しておく。
クエリを Google Spreadsheet に送る
あとは Treasure Data のダッシュボードから New Query にアクセスして…
Export result to から Google Spreadsheet を選択して認証の情報等を設定する。
また、上図のようにクエリに始まり Spreadsheet の情報等を設定、記載して上で Submit をクリックすると…
Spreadsheet を見てみましょ
おお。
以下のように ALERT だけが抽出されているではないですか!
実際の現場でありそうなシチュエーション
Treasure Data は SQL ライクなクエリが書けるのが嬉しい。
あのクライアントの ALERT 発生数は?
SELECT
COUNT(*)
FROM
alert
WHERE
client = "sensu-client4"
以下のように Google Spreadsheet には出力される。
あの監視項目(check_name)の ALERT 発生数は?
SELECT
COUNT(*)
FROM
alert
WHERE
ACTION = "ALERT"
以下のように Google Spreadsheet には出力される。
さいごに
もう Excel へのコピペは要らない
監視ツール(某なぎおす)のレポート出力をコピペで Excel に貼り付けていた頃が懐かしくなったが…
- Sensu
- fluentd
- Treasure Data
- Google Spreadsheet
この 4 つのツールを組み合わせてレポーティングも自動化出来そうな気がします!
最後に一言
Treasure Data まじ凄いと思った。
元記事は、こちら