先日のSensu Deep Talks #2では「Filter・Mutator・Aggregateの使いドコロ」を発表しました.
今回は補足として,実際に最所研究室で使用しているFilterの設定を紹介します.
アラート通知数の削減
実験等で継続的にサーバに負荷を掛けている場合,アラートが大量に通知されることがあります.
それを防ぐために,以下の2つの条件でフィルタリングしています.
- Checkの終了ステータスが2(CRITICAL)以上の場合
- 最初のアラート(Occurrencesが1)の場合
本番環境では使い辛いかもしれませんが,PagerDutyからの電話が鳴り続けるのは防げると思います.
{
"filters": {
"recurrence": {
"attributes": {
"check": {
"status": "eval: value > 1"
},
"occurrences": 1
}
}
}
}
サーバーメンテナンス中の通知無効
研究室では金曜日の20〜21時にサーバの定期メンテナンスを行っています.
(全サーバのaptの更新と,必要に応じて再起動.)
パッケージ更新で負荷が上がったり,一度に行うのでハイパーバイザが悲鳴を上げたりします.
そこで,強引ですがメンテナンス中のアラートは無条件で通知しないことにしました.
メンテナンスの時間で,Checkの実行時刻(Executed)をフィルタリングしています.
注目して欲しいのは,"negate": true
で条件を逆転させている点です.
これで「メンテナンスの時間以外」はフィルタリングされません.
{
"filters": {
"maintenance": {
"attributes": {
"check": {
"executed": "eval: Time.at(value).wday == 5 && Time.at(value).hour == 20"
}
},
"negate": true
}
}
}
おまけ
最近,研究室で利用するチャットをSlackに乗り換えました.
それに合わせて,SensuからSlackにIncoming Webhooksを使って通知するHandlerをGo言語で書きました.
(以前はhubot-sensuを使ってアラートをTypetalkに通知していました.)