kibana-alerting-rules について
kibana-alerting-rulesは、Kibana管理者がアラートルールを作成・確認・更新・管理するためのスキルです。条件、実行間隔、任意の通知アクションを設定でき、読み取り専用の検索や有効化・無効化・ミュート・削除などの操作にも対応します。
主な機能
- 01アラートルールの作成と更新
- 02タグやテキストによるルール検索
- 03しきい値・時間枠・グルーピングの設定
- 04ルールの有効化・ミュート・スヌーズ管理
- 05必要に応じた通知アクションの追加
活用シーン
- 01メトリックしきい値のアラート作成
- 02本番ルールの絞り込みと確認
- 03ルールの条件やスケジュールの変更
- 04ルールの一時無効化やアラートのミュート
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ elastic/ agent-skills --skill kibana-alerting-rulesインストール後、Claude Code で/kibana-alerting-rulesを入力して読み込まれたか確認します。
同梱ファイルreferences/connectors-actions-terraform.mdreferences/rule-types-reference.md
詳細
Kibana アラートルール
Kibana アラートルールの作成、確認、更新、管理を行います。適切なルールタイプを選び、しきい値とグループ化のセマンティクスを設定し、依頼された場合にのみアクションを追加します。既存のカバレッジを調べるよう求められた場合は、ルールを読み取り専用で一覧表示または絞り込みます。
環境設定
このスキルは、elastic CLI を介して Elasticsearch の操作を実行します。
elastic CLI がインストールされていない場合は、何に必要なのかをユーザーに伝えてください。認証情報を推測したり、HTTP API を直接呼び出したり、ほかの回避策を試したりしないでください。
このスキルでは、HTTP の省略形で操作を記載しています(例:GET /、GET /_cat/indices、GET /{index}/_mapping、GET /{index}/_settings/index.mode、POST /_query)。このドキュメントの末尾にある操作の表には、各省略形に相当する elastic CLI コマンドが記載されています。HTTP API を直接呼び出すのではなく、必ず CLI を使用してください。
基本概念
ルールは、条件(params + rule_type_id)、スケジュール(条件をチェックする頻度)、アクション(アラート発生時に実行する任意のコネクター)の3つで構成されます。条件が満たされると、ルールによってアラートが作成され、アクションによってコネクター経由で通知が配信されます。ユーザーが通知の設定を明示的に依頼しない限り、コネクターやアクションを作成しないでください。ルールの定義だけで十分なタスクも多くあります。
必要な権限:対象の Kibana 機能(Stack Rules、Observability、Security など)で all、および Rules Settings で all。コネクターの管理には Actions and Connectors で all が必要です。ルールアクションとして既存のコネクターを追加するだけなら read で十分です。
**オンプレミスでの前提条件:**ルールを作成する前に、kibana.yml で安定した xpack.encryptedSavedObjects.encryptionKey を設定してください。このキーはルールの API キーとコネクターのシークレットを暗号化します。未設定の場合、再起動のたびにキーが再生成され、既存のルールが動作しなくなります。クラスター内のすべての Kibana ノードで同じキーを使用する必要があります。
手順
-
タスクを分類します。ユーザーが求めているのが、ルールの作成、ルールの検索/一覧表示(読み取り専用)、既存ルールの更新、またはライフサイクルの変更(有効化、無効化、ミュート、スヌーズ、削除)のいずれかを判断します。ルールの表示または一覧表示のみを求められた場合は、読み取り専用の依頼として扱い、作成、更新、有効化、削除を行わないでください。
-
**検索/一覧表示タスクでは、適切に絞り込み、ページ分割します。**結果をすべて出力するのではなく、検索結果を絞り込むクエリパラメーターを指定して
GET kbn:/api/alerting/rules/_findを呼び出します。- タグで絞り込む場合:
filter=alert.attributes.tags:"production"(保存オブジェクトの属性に対する KQL)。 - **テキストで絞り込む場合:**必要に応じて
search_fieldsとdefault_search_operatorを指定してsearchを使用します。 - **ページ分割:**結果が1ページを超える可能性がある場合は
per_pageを設定し、pageを変えて繰り返します。 - **並べ替え:**安定した一覧にするには
sort_field=nameとsort_order=ascを指定します。
一致したルールの ID と名前を列挙します。一致するルールがない場合は、その旨を明確に伝え、結果を作り上げないでください。コネクターやストリームではなく、アラートルールを検索してください。
- タグで絞り込む場合:
-
**作成タスクでは、パラメーターを記述する前にルールタイプを選びます。**ユーザーの意図に合ったメトリック/しきい値ルールタイプを選びます。ログ、異常検知、または無関係なタイプは選ばないでください。
- 時間枠内の数値メトリック(ホスト/サービス単位でのグループ化は任意) →
.index-thresholdをconsumer: "stackAlerts"と組み合わせます。 - ドキュメント数または Query DSL 条件 →
.es-queryをconsumer: "stackAlerts"と組み合わせます。 - Metrics アプリの Observability メトリック →
metrics.alert.thresholdをconsumer: "metrics"または"infrastructure"と組み合わせます。
パラメータースキーマ、有効なコンシューマー、アクショングループについては、rule-types-reference.md を参照してください。ユーザーがインデックス、フィールド、しきい値、期間、グループ化フィールドを指定した場合は、4つすべてを
paramsに明示的に設定してください。条件の代わりにコネクターやアクションを使用しないでください。 - 時間枠内の数値メトリック(ホスト/サービス単位でのグループ化は任意) →
-
しきい値、継続時間、グループ化を正しく設定します。 これら3つの要素はそれぞれ独立しています。
- しきい値: 集計値に対して
thresholdとthresholdComparatorを設定します。フィールドのスケールに合わせます。ECS のsystem.cpu.total.pctは通常、小数表記です(90%の場合は0.9)。90を使用するのは、フィールドが0~100のスケールの場合に限ります。 - 「N分間」:
paramsにtimeWindowSizeとtimeWindowUnitを設定します(各実行時に評価されるルックバック期間です)。 この期間にschedule.intervalを合わせます(たとえば、両方を5分に設定します)。これにより、短時間の急増が異なる実行間隔で検出されてアラートを発するのを防げます。ユーザーが単一のルックバック期間ではなく、N 回連続で条件に一致することを望む場合にのみ、alert_delay: {"active": N}を追加します。 - ホスト/エンティティごとのグループ化:
.index-thresholdでは、groupBy: "top"を設定し、termFieldにグループ化フィールド(例:host.name)を指定して、すべてのエンティティを対象にするのに十分なtermSize(「任意のホスト」)を設定します。グループ化しない場合、ルールは全体を集計するため、ホストごとにアラートを発しません。
- しきい値: 集計値に対して
-
作成用のペイロードを作成します。 必須フィールド:
name、rule_type_id、consumer、schedule、params。任意フィールド:tags、enabled、actions、alert_delay、flapping。ユーザーがルール ID を指定した場合は URL にその ID を使用します。 それ以外の場合は、Kibana に生成させます。パラメーターの例 —
eval-alert-metricsに対し、任意のホストでCPU使用率が5分間90%を超えた場合:{ "name": "CPU exceeds 90% for 5 minutes", "rule_type_id": ".index-threshold", "consumer": "stackAlerts", "schedule": { "interval": "5m" }, "params": { "index": ["eval-alert-metrics"], "timeField": "@timestamp", "aggType": "avg", "aggField": "system.cpu.total.pct", "groupBy": "top", "termField": "host.name", "termSize": 1000, "threshold": [0.9], "thresholdComparator": ">", "timeWindowSize": 5, "timeWindowUnit": "m" }, "tags": ["production"] }ユーザーがルール条件の作成のみを求めている場合は、
actionsを省略します。 -
作成して確認します。 ペイロードを指定して
POST kbn:/api/alerting/rule/{id}を呼び出します。409 Conflict の場合は ID がすでに存在します。確認するにはGET kbn:/api/alerting/rule/{id}を呼び出すか、別の ID を選択します。作成に成功したらGET kbn:/api/alerting/rule/{id}を呼び出し、Kibana 上で確認してから、実際のルール ID、名前、有効状態をユーザーに伝えます。Kibana で確認する前に成功したと伝えてはいけません。 -
更新タスクでは、読み取ってから置き換えます。
rule_type_idとconsumerは変更できません。GET kbn:/api/alerting/rule/{id}を呼び出し、意図した変更を統合してから、完全なルール本文を指定してPUT kbn:/api/alerting/rule/{id}を呼び出します。409 Conflict の場合は、別のユーザーがルールを変更しています。再取得して再試行します。アクションごとにfrequencyオブジェクトを設定します。ルールレベルのnotify_whenとthrottleは非推奨です。 -
ライフサイクルタスクでは、必要最小限のエンドポイントを呼び出します。 一時的に無効にするには
POST kbn:/api/alerting/rule/{id}/_disableを呼び出します(ルールの設定は保持されます)。再度有効にするにはPOST kbn:/api/alerting/rule/{id}/_enableを呼び出します。すべてのアラートをミュートするにはPOST kbn:/api/alerting/rule/{id}/_mute_allを呼び出し、解除するにはPOST kbn:/api/alerting/rule/{id}/_unmute_allを呼び出します。アクティブなアラートを1つだけミュートするにはPOST kbn:/api/alerting/rule/{rule_id}/alert/{alert_id}/_muteを呼び出し、解除するにはPOST kbn:/api/alerting/rule/{rule_id}/alert/{alert_id}/_unmuteを呼び出します。スケジュールされたスヌーズを設定するにはPOST kbn:/api/alerting/rule/{id}/snooze_scheduleを呼び出し、削除するにはDELETE kbn:/api/alerting/rule/{ruleId}/snooze_schedule/{scheduleId}を呼び出します。完全に削除するにはDELETE kbn:/api/alerting/rule/{id}を呼び出します。API キーの所有権が原因でルールが失敗する場合は、POST kbn:/api/alerting/rule/{id}/_update_api_keyを呼び出します。
例
しきい値アラートを作成する
ユーザー:「任意のホストでCPU使用率が5分間90%を超えたらアラートしてください。クエリは eval-alert-metrics を使用します(system.cpu.total.pct を host.name でグループ化)。ID eval-cpu-rule でルールを作成してください。」
.index-threshold/stackAlertsを選択します。- 小数のしきい値
[0.9]、5分間のtimeWindowSize/timeWindowUnit、およびhost.nameに対するgroupBy/termFieldを設定します。 schedule.interval: "5m"を指定してPOST kbn:/api/alerting/rule/eval-cpu-ruleを呼び出します。アクションは省略します。GET kbn:/api/alerting/rule/eval-cpu-ruleを呼び出し、結果をユーザーに伝えます。
タグでルールを検索する(読み取り専用)
ユーザー:「すべての本番環境のアラートルールを表示してください。」
GET kbn:/api/alerting/rules/_findを実行し、filter=alert.attributes.tags:"production"、適切なper_page、およびsort_field=nameを指定します。totalがper_pageを超える場合は、ページを移動して結果を取得します。- ID と名前のみを報告します。変更は行いません。
ルールを一時的に一時停止する
ユーザー:「ルール abc123 を次の月曜日まで無効にしてください。」
POST kbn:/api/alerting/rule/abc123/_disableを実行します。- 後で
POST kbn:/api/alerting/rule/abc123/_enableを実行して再有効化します。
複数のルールにまたがる計画的なダウンタイムでは、各ルールを個別に無効化またはスヌーズするより、メンテナンスウィンドウを使用してください。
ガイドライン
- 各アクションオブジェクト内で
frequencyを設定します。ルールレベルのnotify_whenとthrottleは非推奨です。 rule_type_idとconsumerは作成後に変更できません。変更するには削除して再作成してください。- デフォルト以外の Kibana Spaces では、パスの先頭に
kbn:/s/<space_id>/api/alerting/を付けます(コネクターもスペースごとにスコープされます)。 - ルールアクションで別のスペースのコネクターを参照することはできません。ルールとそのコネクターは同じ Space に属している必要があります。
- PagerDuty、Jira、ServiceNow では、アクティブな通知アクションと Recovered アクションを組み合わせます。
- 連続した一致を必須にするには
alert_delayを使用し、不安定なアラートを抑制するにはフラッピング設定を使用します。flappingオブジェクトによるルールごとの調整は 9.3 以降で GA です。それ以前のバージョンでは、スペースレベルのフラッピング設定のみをサポートしています。 - アクションテンプレートをデバッグするには、任意のテンプレートフィールドで
{{{.}}}を使用します。これにより変数コンテキスト全体が JSON として出力され、{{context.reason}}や{{alert.flapping}}のような正しいパスの確認に役立ちます。 - Security の検出ルールにはこのスキルを使用しないでください。
consumer: "securitySolution"/"siem"は専用の Security Detections API(/api/detection_engine/rules)に属しており、ルールタイプ ID とライフサイクルが異なります。 - find API でフィルタリングできるように、ルールには一貫したタグ(
production、staging、チーム名)を付けます。 - 推奨される最小チェック間隔は
1mです。高負荷なルールは、サーバー実行タイムアウト(デフォルトは5m)後にキャンセルされます。
よくある問題
- ルールタイプの誤り — メトリックのしきい値条件にログルールまたは ML ルールを使用している。
- エンティティごとのグループ化の欠落 — ユーザーが「任意のホスト」または「サービスごと」と指定しているのに、全体を集約している。
- しきい値のスケールの不一致 — 小数値の CPU フィールドで
90と0.9を取り違えている。 - 期間とスケジュールの混同 — 1 分間隔のスケジュールと 5 分間のウィンドウは、どちらも 5 分に設定した場合とは動作が異なります。
- 依頼されていないアクション — ユーザーがルールの作成のみを依頼しているのに、コネクターを追加している。
- 読み取り専用の制約違反 — ユーザーが一覧表示またはフィルタリングのみを依頼しているのに、ルールを作成または変更している。
- 同時更新の競合 — 最新の GET を行わずに PUT すると 409 が返される。
- インポート/エクスポート — 保存オブジェクトをインポートするとルールが無効化され、コネクターのシークレットが削除される。
参考資料
- rule-types-reference.md — ルールタイプ、パラメーター、コンシューマー、アクショングループ
- connectors-actions-terraform.md — アクション、ワークフロー、Terraform
- Kibana Alerting API
- アラートの概念
- ルールアクション変数
- アラートに関する本番環境での考慮事項
オペレーション
| HTTP API (shorthand) | elastic CLI command |
|---|---|
GET kbn:/api/alerting/rules/_find | elastic kb alerting get-alerting-rules-find [--filter '<kql>'] [--search '<q>'] [--per-page <n>] [--page <n>] [--sort-field <field>] [--sort-order asc|desc] |
POST kbn:/api/alerting/rule/{id} | elastic kb alerting post-alerting-rule-id --id '<id>' --name '<name>' --rule-type-id '<type>' --consumer '<consumer>' --schedule '<json>' --params '<json>' [--tags '<json>'] [--actions '<json>'] [--enabled] |
GET kbn:/api/alerting/rule/{id} | elastic kb alerting get-alerting-rule-id --id '<id>' |
PUT kbn:/api/alerting/rule/{id} | elastic kb alerting put-alerting-rule-id --id '<id>' --name '<name>' --schedule '<json>' --params '<json>' [--tags '<json>'] [--actions '<json>'] |
DELETE kbn:/api/alerting/rule/{id} | elastic kb alerting delete-alerting-rule-id --id '<id>' |
POST kbn:/api/alerting/rule/{id}/_enable | elastic kb alerting post-alerting-rule-id-enable --id '<id>' |
POST kbn:/api/alerting/rule/{id}/_disable | elastic kb alerting post-alerting-rule-id-disable --id '<id>' [--untrack] |
POST kbn:/api/alerting/rule/{id}/_mute_all | elastic kb alerting post-alerting-rule-id-mute-all --id '<id>' |
POST kbn:/api/alerting/rule/{id}/_unmute_all | elastic kb alerting post-alerting-rule-id-unmute-all --id '<id>' |
POST kbn:/api/alerting/rule/{id}/_update_api_key | elastic kb alerting post-alerting-rule-id-update-api-key --id '<id>' |
POST kbn:/api/alerting/rule/{rule_id}/alert/{alert_id}/_mute | elastic kb alerting post-alerting-rule-rule-id-alert-alert-id-mute --rule-id '<rule_id>' --alert-id '<alert_id>' |
POST kbn:/api/alerting/rule/{rule_id}/alert/{alert_id}/_unmute | elastic kb alerting post-alerting-rule-rule-id-alert-alert-id-unmute --rule-id '<rule_id>' --alert-id '<alert_id>' |
POST kbn:/api/alerting/rule/{id}/snooze_schedule | elastic kb alerting post-alerting-rule-id-snooze-schedule --id '<id>' --schedule '<json>' |
DELETE kbn:/api/alerting/rule/{ruleId}/snooze_schedule/{scheduleId} | elastic kb alerting delete-alerting-rule-ruleid-snooze-schedule-scheduleid --rule-id '<ruleId>' --schedule-id '<scheduleId>' |