Sensu Filter実践例

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

先日のSensu Deep Talks #2では「Filter・Mutator・Aggregateの使いドコロ」を発表しました.
今回は補足として,実際に最所研究室で使用しているFilterの設定を紹介します.

アラート通知数の削減

実験等で継続的にサーバに負荷を掛けている場合,アラートが大量に通知されることがあります.
それを防ぐために,以下の2つの条件でフィルタリングしています.

  • Checkの終了ステータスが2(CRITICAL)以上の場合
  • 最初のアラート(Occurrencesが1)の場合

本番環境では使い辛いかもしれませんが,PagerDutyからの電話が鳴り続けるのは防げると思います.

/etc/sensu/conf.d/filter-recurrence.json
{
  "filters": {
    "recurrence": {
      "attributes": {
        "check": {
          "status": "eval: value > 1"
        },
        "occurrences": 1
      }
    }
  }
}

サーバーメンテナンス中の通知無効

研究室では金曜日の20〜21時にサーバの定期メンテナンスを行っています.
(全サーバのaptの更新と,必要に応じて再起動.)
パッケージ更新で負荷が上がったり,一度に行うのでハイパーバイザが悲鳴を上げたりします.

そこで,強引ですがメンテナンス中のアラートは無条件で通知しないことにしました.
メンテナンスの時間で,Checkの実行時刻(Executed)をフィルタリングしています.
注目して欲しいのは,"negate": trueで条件を逆転させている点です.
これで「メンテナンスの時間以外」はフィルタリングされません.

/etc/sensu/conf.d/filter-maintenance.json
{
  "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に通知していました.)

handler-slack.png