0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kibana AlertにおけるActionとは

0
Posted at

この記事はKibana Alertについての連続記事の一部です。

Actionの概念・種類・設定方法について解説します。

Actionとは

Kibana AlertにおけるActionとは、AlertがトリガーされたときにKibanaが外部システムへ通知・操作を行う処理です。メールの送信、Slackへのメッセージ投稿、Webhookの呼び出し、Jiraチケットの作成などがActionの代表例です。

ActionとConnectorの関係

ActionはConnectorと切り離して設計されています。

  • Connector: 外部システムへの接続設定(認証情報やエンドポイントURLなど)を保持するテンプレート
  • Action: RuleにConnectorを紐付け、「どの内容で通知するか」を設定したもの

たとえば「SlackワークスペースへのAPI接続設定」がConnectorであり、「このRuleが発火したらそのSlackの#alertsチャンネルに○○という形式で投稿する」という設定がActionです。Connectorを一度作成すれば、複数のRuleから再利用できます。

AlertとActionの関係

AlertはRuleの条件が満たされている状態を表すオブジェクトです。ActionはそのAlertの状態変化をトリガーとして実行されます。重要な点はAlertとActionは独立しているということで、Snoozeなどで一時的にActionを止めてもAlertは生成・管理され続けます。

Action Frequency(通知タイミングの設定)

Actionには「どのタイミングで実行するか」を制御する Action Frequency という設定があります。まずActionの実行単位(モード)を選び、次にその中での通知タイミングを指定します。

実行モードの選択

Rule作成・編集画面のAction設定で、まず実行モードを選択します。

「For each alert」(アラートごとに実行)

各Alertインスタンスごとに個別にActionを実行するモードです。

  • アラートが1件発火するたびに1件のActionが実行される
  • アクショングループ(defaultrecoveredcriticalなど)単位でActionを細かく設定できる
  • 個別のアラートの詳細情報(ホスト名、メトリクス値など)をメッセージに埋め込める

多数のアラートが同時発火すると同数のActionが実行されるため、通知量の増大に注意が必要です。

「Summary of alerts」(アラートをまとめて通知)

その期間に発生した複数のAlertをまとめて1回のActionとして実行するモードです。

  • 新規・継続中・回復済みのアラート件数と一覧をまとめて通知できる
  • {{alerts.new.count}}{{alerts.all.count}} などの変数でAlertの件数や一覧を参照できる
  • 大量アラートが発生する環境でも通知を集約でき、通知疲れを防げる
項目 For each alert Summary of alerts
実行単位 Alertインスタンス1件ごと まとめて1回
利用できる変数 個別アラートの詳細(context.*state.*など) アラート集計(alerts.new.countなど)
向いている用途 アラートごとに詳細を通知したい場合 大量アラートを集約して定期報告したい場合

通知タイミングの選択

実行モードを選んだ後、さらに通知タイミングを選択します。選択肢はモードによって異なります。

「For each alert」で選択できる通知タイミング

UI表示 説明
On status changes アラートのステータスが変化したとき(アクティブ化・回復・アクショングループ変化)にのみ実行される
On check intervals ルールのチェック間隔ごとに、条件を満たしている限り毎回実行される
On custom action intervals 指定したカスタム間隔ごとに、条件を満たしている場合に実行される

「Summary of alerts」で選択できる通知タイミング

UI表示 説明
On check intervals ルールのチェック間隔ごとに、アラートが存在する場合に実行される
On custom action intervals 指定したカスタム間隔ごとに実行される

Note: 「On status changes」は「Summary of alerts」では選択できません。Summary of alertsは複数アラートを集約するモードのため、個別の状態変化をトリガーにする設定が存在しません。

「On custom action intervals」を選択した場合は、通知間隔(例: 5分、1時間)を追加で入力します。

Actionの保存形式

ActionはRuleのデータ(.kibana_alerting_cases インデックス)の actions 配列フィールドに保存されます。

フィールド 説明
uuid ActionのUUID(Rule内で一意)
group アクショングループ(defaultrecovered など)
id ConnectorのID
actionTypeId Connector TypeのID(.email.slack など)
params Actionのパラメータ。Mustache構文のテンプレートを含む
frequency.summary true で「Summary of alerts」、false で「For each alert」
frequency.notifyWhen 通知タイミング(onActionGroupChange = On status changes、onActiveAlert = On check intervals、onThrottleInterval = On custom action intervals)
frequency.throttle 通知間隔(例: "5m""1h")。「On custom action intervals」選択時に使用
alertsFilter フィルター条件(KQLクエリ・時間帯)。条件を満たすAlertのみActionを実行
useAlertDataForTemplate Alert As Dataのフィールドをテンプレートで使えるようにするか

Actionパラメータのテンプレート構文

Actionの params(メッセージ本文、件名など)にはMustache構文でAlertの情報を埋め込めます。

基本的な変数

変数 説明
{{alertName}} RuleのルールID
{{rule.name}} Ruleの名前
{{rule.id}} RuleのID
{{rule.type}} Rule TypeのID
{{rule.url}} KibanaのRule詳細ページURL
{{rule.tags}} Ruleに設定されたタグ
{{alert.id}} AlertインスタンスのID(例: ホスト名)
{{alert.uuid}} AlertのUUID
{{alert.actionGroup}} 現在のアクショングループID
{{alert.actionGroupName}} 現在のアクショングループの表示名
{{alert.flapping}} フラッピング状態かどうか(true/false
{{date}} Actionが実行された日時
{{spaceId}} KibanaスペースのID
{{kibanaBaseUrl}} KibanaのベースURL

Rule Type固有の変数(context.*state.*

{{context.*}}{{state.*}} はRule Typeごとに定義された変数です。たとえばMetric threshold ruleでは以下のような変数が利用できます。

変数例 説明
{{context.group}} 条件を満たしたグループの値(例: ホスト名)
{{context.value}} 検出された値(例: CPU使用率)
{{context.threshold}} 設定した閾値
{{context.reason}} アラートの理由を説明する文章

利用できる変数はRule Typeによって異なります。Rule作成・編集画面のAction設定時に「Add variable」ボタンから使用可能な変数を確認できます。

「Summary of alerts」専用の変数

「Summary of alerts」モードでは {{alerts.*}} でアラートの集計情報を参照できます。

変数 説明
{{alerts.new.count}} 今回の期間に新たに発生したアラート件数
{{alerts.new.data}} 新規アラートの配列(Mustacheでループ展開可能)
{{alerts.ongoing.count}} 継続中のアラート件数
{{alerts.ongoing.data}} 継続中アラートの配列
{{alerts.recovered.count}} 回復したアラート件数
{{alerts.recovered.data}} 回復アラートの配列
{{alerts.all.count}} 全アラート件数の合計
{{alerts.all.data}} 全アラートの配列

テンプレート記述例

Slackへの通知(For each alert)

Rule「{{rule.name}}」がアラートを検出しました。

- インスタンス: {{alert.id}}
- アクション: {{alert.actionGroupName}}
- 詳細: {{context.reason}}
- Rule URL: {{rule.url}}

SlackへのSummary of alerts通知

【アラートサマリー】{{rule.name}}

新規: {{alerts.new.count}}件
継続中: {{alerts.ongoing.count}}件
回復: {{alerts.recovered.count}}件

詳細はKibanaで確認してください: {{kibanaBaseUrl}}

Actionの実行の仕組み

非同期実行

ActionはRule評価と同期的には実行されません。Rule評価の結果Actionが必要と判断されると、Task Managerのキューに登録され、非同期で実行されます。これにより、外部システムへの通知がRule評価のパフォーマンスに影響しない設計になっています。

実行キューの上限

KibanaのTask Managerには同時にキューできるAction数に上限があります(xpack.alerting.maxQueuedActions で設定)。上限に達した場合、そのRule実行サイクルではActionのキューイングがスキップされ、警告ステータスが記録されます。

Event Logへの記録

Actionの実行結果はKibana内部のEvent Logに記録されます。Event LogはElasticsearchのデータストリーム .kibana-event-log-ds に保存されており、検索パターンとしては .kibana-event-log-* が使えます。

記録内容には以下が含まれます。

  • 実行日時・所要時間
  • 使用したConnector(Connector TypeのID)
  • 成否・エラー内容
  • 対象のAlertインスタンスID(「For each alert」モードの場合)

Rule詳細画面の「Execution log」タブからAction実行の履歴を確認できます。また、直接Elasticsearchからクエリすることもできます。

GET .kibana-event-log-*/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "event.action": "execute" } },
        { "term": { "kibana.alerting.rule_id": "<rule-id>" } }
      ]
    }
  },
  "sort": [{ "@timestamp": { "order": "desc" } }]
}
0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?