Help us understand the problem. What is going on with this article?

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 のクエリも変更しなければならないので、何か上手い方法がないか検討中...。

macloud
M&Aクラウドは「テクノロジーの力で、M&Aに流通革命を」をミッションにM&Aプラットフォーム「M&Aクラウド」を開発運営するスタートアップです。
https://macloud.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした