LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

Kibana の Visualize で利用しているクエリを使って Slack にアラート通知する

Kibana で Visualize している集計値が何かしらの条件に合致した場合に Slack にアラート通知を送りたい。
Alerting から実現できたので、その設定方法をメモ。

題材として Elasticsearch に溜め込まれた Web サーバのアクセスログについて、正常レスポンス(ステータスコード 5xx 以外)が 99.95% を下回った場合に Slack に通知するような Trigger を作成してみる。

FireShot Capture 005 - 可用性 - Kibana - kibana-log.macloud.jp.png

環境

  • Kibana 7.1.1

クエリ作成

クエリの表示

Vizualize の設定そのものを Alerting 側でそのままソースとして利用することはできないようなので、 Vizualize のクエリをコピーして利用する。

サイドメニューから "Visualize" を選択。
左上の "Inspect" を選択すると右上にドロップダウンメニューが現れるので、これを "View: Requests" に切り替える。
"Request" タブを選択するとクエリが表示されるので、これをコピーしておく。

FireShot Capture 006 - 可用性 - Kibana - kibana-log.macloud.jp.png

クエリの修正

後述する Monitor に設定するためにコピーしたクエリを修正する。

集計期間

元々のクエリには静的な集計期間が設定されているため、これを動的な期間に修正する。
例えば過去30日間のように指定する場合は以下のようになる。

{
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "date": {
                            "from": "{{period_end}}||-30d",
                            "to": "{{period_end}}",
                            "include_lower": true,
                            "include_upper": true,
                            "format": "epoch_millis",
                            "boost": 1
                        }
                    }
                }
            ],
        }
    },
}

集計値のキー名

後述する Trigger condition でヒット数を参照するためにキーがあると便利なので、設定しておく。

{
    "aggregations": {
        "aggregation_name": {
            "range": {
                "ranges": [
                    {
                        "key": "success",
                        "from": 200,
                        "to": 499
                    },
                    {
                        "key": "failure",
                        "from": 500,
                        "to": 599
                    }
                ]
            }
        }
    },
}

合計カウント数の上限撤廃

デフォルトでは合計ヒット数の上限が 10,000 に設定されているので、その制約を外す。

{
    "track_total_hits": true
}

Alerting の設定

サイドメニューの "Alerting" から設定を行う。

Monitor の作成

"Monitors" タブを開き、右上の "Create monitor" を選択。
"How do you want to define the monitor?" で "Define using extraction query" を選択し、作成したクエリを貼り付ける。

"Run" からクエリを実行して、右側のパネルに集計値が出力されればオーケー。

Destination の作成

"Destination" タブを開き、右上の "Create destination" を選択。
"Type" に "Slack" を選択し、 Incoming webhook を別途作成して URL を貼り付ける。

Trigger の作成

再び "Monitors" タブを開き、先程作成した Monitor を選択する。
画面中部の "Triggers" の "Create" を選択する。

"Trigger condition" を以下のように設定する。
1.0 を掛けているのは実数として演算させるため(やっつけ仕事)だが、もっとスマートな方法がありそう。

ctx.results[0].aggregations.2.buckets.success.doc_count * 1.0 / ctx.results[0].hits.total.value * 1.0 < 0.9995

"Notification" の "Destination" には先程作成したものを選択する。

動作確認

次のように通知が来ればオーケー!

Screen Shot 2020-03-13 at 10.02.47.png

今後の課題

Visualize のクエリに変更が必要な場合は併せて Alerting のクエリも変更しなければならないので、何か上手い方法がないか検討中...。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1