この記事は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が実行される
- アクショングループ(
default、recovered、criticalなど)単位で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 |
アクショングループ(default、recovered など) |
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" } }]
}