configure-alerting-rules
About
This skill configures Prometheus Alertmanager for actionable incident alerts, including routing trees, receivers (Slack, PagerDuty, email), and notification templates. It helps implement proactive monitoring by routing alerts to the right teams based on severity and reducing alert fatigue through grouping and deduplication. Use it when integrating with on-call systems or migrating from legacy alerts to Prometheus-based alerting.
Quick Install
Claude Code
Recommendednpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-alerting-rulesCopy and paste this command in Claude Code to install this skill
Documentation
name: configure-alerting-rules description: > アクション可能なインシデントアラートのために、ルーティングツリー、レシーバー (Slack、PagerDuty、メール)、インヒビションルール、サイレンス、通知テンプレートを 含むPrometheus Alertmanagerを設定する。自動インシデント検出のプロアクティブな モニタリングを実装する場合、重大度に基づいて適切なチームにアラートをルーティングする場合、 グルーピングと重複排除によるアラート疲れを軽減する場合、PagerDutyなどのオンコール システムと統合する場合、またはレガシーアラートからPrometheusベースのアラートに 移行する場合に使用する。 locale: ja source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: observability complexity: intermediate language: multi tags: alertmanager, alerting, routing, pagerduty, slack
アラートルールの設定
信頼性が高くアクション可能なインシデント通知のために、Prometheusのアラートルールと Alertmanagerをセットアップする。
完全な設定ファイルとテンプレートは拡張例を参照。
使用タイミング
- 自動インシデント検出のプロアクティブなモニタリングを実装する場合
- 重大度とサービスオーナーシップに基づいて適切なチームにアラートをルーティングする場合
- インテリジェントなグルーピングと重複排除によるアラート疲れを軽減する場合
- モニタリングをオンコールシステム(PagerDuty、Opsgenie)と統合する場合
- 重大な本番問題のためのエスカレーションポリシーを確立する場合
- レガシーモニタリングシステムからPrometheusベースのアラートに移行する場合
- 対応者を解決策に導くアクション可能なアラートを作成する場合
入力
- 必須: アラート対象のPrometheusメトリクス(エラーレート、レイテンシ、飽和度)
- 必須: オンコールローテーションとエスカレーションポリシー
- 任意: 移行する既存のアラート定義
- 任意: 通知チャンネル(Slack、メール、PagerDuty)
- 任意: 一般的なアラートのためのランブックドキュメント
手順
ステップ1: Alertmanagerのデプロイ
AlertmanagerをインストールしてPrometheusからアラートを受信するよう設定する。
Docker Composeデプロイ(基本構造):
version: '3.8'
services:
alertmanager:
image: prom/alertmanager:v0.26.0
ports:
- "9093:9093"
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
# ... (完全な設定はEXAMPLES.mdを参照)
基本的なAlertmanager設定(alertmanager.ymlの抜粋):
global:
resolve_timeout: 5m
slack_api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
route:
receiver: 'default-receiver'
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- match:
severity: critical
receiver: pagerduty-critical
# ... (完全なルーティング、インヒビションルール、レシーバーはEXAMPLES.mdを参照)
AlertmanagerをPrometheusに設定(prometheus.yml):
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
timeout: 10s
api_version: v2
期待結果: AlertmanagerのUIがhttp://localhost:9093でアクセス可能で、Prometheusの「Status > Alertmanagers」がUPステータスを表示する。
失敗時:
- Alertmanagerのログを確認する:
docker logs alertmanager - PrometheusがAlertmanagerに到達できることを確認する:
curl http://alertmanager:9093/api/v2/status - WebhookのURLをテストする:
curl -X POST <SLACK_WEBHOOK_URL> -d '{"text":"test"}' - YAML構文を検証する:
amtool check-config alertmanager.yml
ステップ2: Prometheusでアラートルールを定義する
条件が満たされたときに発火するアラートルールを作成する。
アラートルールファイルを作成(/etc/prometheus/rules/alerts.ymlの抜粋):
groups:
- name: instance_alerts
interval: 30s
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: critical
team: infrastructure
annotations:
summary: "Instance {{ $labels.instance }} is down"
description: "{{ $labels.instance }} has been down for >5min."
runbook_url: "https://wiki.example.com/runbooks/instance-down"
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 10m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
# ... (完全なアラートはEXAMPLES.mdを参照)
アラート設計のベストプラクティス:
forの時間: フラッピングアラートを防ぐ。ほとんどのアラートには5〜10分を使用する。- 説明的なアノテーション: 現在の値、影響を受けるリソース、ランブックリンクを含める。
- 重大度レベル: critical(オンコールをページング)、warning(調査)、info(FYI)
- チームラベル: 正しいチーム/チャンネルへのルーティングを可能にする
- ランブックリンク: すべてのアラートにランブックのURLが必要
ルールをPrometheusに読み込む:
# prometheus.yml
rule_files:
- "rules/*.yml"
検証とリロード:
promtool check rules /etc/prometheus/rules/alerts.yml
curl -X POST http://localhost:9090/-/reload
期待結果: アラートがPrometheusの「Alerts」ページに表示され、しきい値を超えたときにアラートが発火し、Alertmanagerが発火したアラートを受信する。
失敗時:
- ルール評価エラーのためにPrometheusのログを確認する
promtool check rulesでルール構文を確認する- PrometheusのUIでアラートクエリを独立してテストする
- アラートの状態遷移を確認する:Inactive → Pending → Firing
ステップ3: 通知テンプレートを作成する
読みやすくアクション可能な通知メッセージを設計する。
テンプレートファイルを作成(/etc/alertmanager/templates/default.tmplの抜粋):
{{ define "slack.default.title" }}
[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}
{{ end }}
{{ define "slack.default.text" }}
{{ range .Alerts }}
*Alert:* {{ .Labels.alertname }}
*Severity:* {{ .Labels.severity }}
*Summary:* {{ .Annotations.summary }}
{{ if .Annotations.runbook_url }}*Runbook:* {{ .Annotations.runbook_url }}{{ end }}
{{ end }}
{{ end }}
# ... (完全なメールとPagerDutyのテンプレートはEXAMPLES.mdを参照)
レシーバーでテンプレートを使用:
receivers:
- name: 'slack-custom'
slack_configs:
- channel: '#alerts'
title: '{{ template "slack.default.title" . }}'
text: '{{ template "slack.default.text" . }}'
期待結果: 通知が一貫してフォーマットされ、すべての関連コンテキストを含み、ランブックリンクによりアクション可能。
失敗時:
- テンプレートのレンダリングをテストする:
amtool template test --config.file=alertmanager.yml - Alertmanagerのログのテンプレート構文エラーを確認する
- テンプレートのデータ構造をデバッグするために
{{ . | json }}を使用する
ステップ4: ルーティングとグルーピングの設定
インテリジェントなルーティングルールでアラートの配信を最適化する。
高度なルーティング設定(抜粋):
route:
receiver: 'default-receiver'
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
routes:
- match:
team: platform
receiver: 'team-platform'
routes:
- match:
severity: critical
receiver: 'pagerduty-platform'
group_wait: 10s
repeat_interval: 15m
continue: true # Also send to Slack
# ... (時間間隔付きの完全なルーティングはEXAMPLES.mdを参照)
グルーピング戦略:
# Group by alertname: All HighCPU alerts bundled together
group_by: ['alertname']
# Group by alertname AND cluster: Separate notifications per cluster
group_by: ['alertname', 'cluster']
期待結果: アラートが正しいチームにルーティングされ、論理的にグループ化され、重大度に適切なタイミング。
失敗時:
- ルーティングをテストする:
amtool config routes test --config.file=alertmanager.yml --alertname=HighCPU --label=severity=critical - ルーティングツリーを確認する:
amtool config routes show --config.file=alertmanager.yml - アラートが複数のルートにマッチすべき場合は
continue: trueを確認する
ステップ5: インヒビションとサイレンシングの実装
インヒビションルールと一時的なサイレンスでアラートノイズを削減する。
インヒビションルール(依存アラートを抑制):
inhibit_rules:
# Cluster down suppresses all node alerts in that cluster
- source_match:
alertname: 'ClusterDown'
severity: 'critical'
target_match_re:
alertname: '(InstanceDown|HighCPU|HighMemory)'
equal: ['cluster']
# Service down suppresses latency and error alerts
- source_match:
alertname: 'ServiceDown'
target_match_re:
alertname: '(HighLatency|HighErrorRate)'
equal: ['service', 'namespace']
# ... (その他のインヒビションパターンはEXAMPLES.mdを参照)
サイレンスをプログラムで作成:
# Silence during maintenance
amtool silence add \
instance=app-server-1 \
--author="ops-team" \
--comment="Scheduled maintenance" \
--duration=2h
# List and manage silences
amtool silence query
amtool silence expire <SILENCE_ID>
期待結果: インヒビションがカスケードアラートを自動的に削減し、計画メンテナンス中はサイレンスが通知を防ぐ。
失敗時:
- ライブアラートでインヒビションロジックをテストする
- AlertmanagerのUIの「Silences」タブを確認する
- サイレンスマッチャーが正確であることを確認する(ラベルは完全に一致しなければならない)
ステップ6: 外部システムとの統合
AlertmanagerをPagerDuty、Opsgenie、Jiraなどに接続する。
PagerDuty統合(抜粋):
receivers:
- name: 'pagerduty'
pagerduty_configs:
- routing_key: 'YOUR_INTEGRATION_KEY'
severity: '{{ .CommonLabels.severity }}'
description: '{{ range .Alerts.Firing }}{{ .Annotations.summary }}{{ end }}'
details:
firing: '{{ .Alerts.Firing | len }}'
alertname: '{{ .GroupLabels.alertname }}'
# ... (完全な統合例はEXAMPLES.mdを参照)
カスタム統合のためのWebhook:
receivers:
- name: 'webhook-custom'
webhook_configs:
- url: 'https://your-webhook-endpoint.com/alerts'
send_resolved: true
期待結果: アラートがPagerDutyでインシデントを作成し、チームのコミュニケーションチャンネルに表示され、オンコールのエスカレーションをトリガーする。
失敗時:
- APIキー/トークンが有効であることを確認する
- 外部サービスへのネットワーク接続を確認する
- curlでWebhookエンドポイントを独立してテストする
- デバッグモードを有効にする:
--log.level=debug
バリデーション
- AlertmanagerがPrometheusからアラートを正常に受信する
- アラートがラベルと重大度に基づいて正しいチームにルーティングされる
- Slack、メール、またはPagerDutyに通知が配信される
- アラートのグルーピングが通知量を適切に削減する
- インヒビションルールが依存アラートを正しく抑制する
- サイレンスがメンテナンスウィンドウ中に通知を防ぐ
- 通知テンプレートにランブックリンクとコンテキストが含まれている
- 繰り返し間隔が長時間続く問題のアラート疲れを防ぐ
- アラートが解消されたときに解決通知が送信される
- 外部統合(PagerDuty、Opsgenie)がインシデントを作成する
よくある落とし穴
- アラート疲れ: 優先度の低いアラートが多すぎると、対応者が重要なアラートを無視するようになる。厳格なしきい値を設定し、インヒビションを使用する。
forの時間がない:forなしのアラートは一時的なスパイクで発火する。常に5〜10分のウィンドウを使用する。- 過度に広いグルーピング:
['...']によるグルーピングは個別の通知を送信する。特定のラベルグルーピングを使用する。 - ランブックリンクなし: ランブックのないアラートは対応者を推測に任せる。すべてのアラートにランブックのURLが必要。
- 不正な重大度: 警告をcriticalとして誤ってラベル付けするとチームの感覚が鈍くなる。criticalは緊急事態のために予約する。
- 忘れられたサイレンス: 期限のないサイレンスは本物の問題を隠す可能性がある。常に終了時間を設定する。
- 単一ルート: すべてのアラートを1つのチャンネルに送るとコンテキストが失われる。チーム固有のルーティングを使用する。
- インヒビションなし: 停止中のカスケードアラートがノイズを生む。インヒビションルールを実装する。
関連スキル
setup-prometheus-monitoring- アラートルールにフィードするメトリクスと記録ルールを定義するdefine-slo-sli-sla- エラーバジェット管理のためにSLOバーンレートアラートを生成するwrite-incident-runbook- アラートアノテーションからリンクされるランブックを作成するbuild-grafana-dashboards- アラート発火履歴とサイレンスパターンを可視化する
GitHub Repository
Related Skills
himalaya-email-manager
CommunicationThis Claude Skill enables email management through the Himalaya CLI tool using IMAP. It allows developers to search, summarize, and delete emails from an IMAP account with natural language queries. Use it for automated email workflows like getting daily summaries or performing batch operations directly from Claude.
imsg
Communicationimsg is a CLI tool for macOS that lets you programmatically interact with iMessage/SMS via the Messages.app. It enables developers to list chats, view message history, watch conversations in real-time, and send messages or attachments. Use this skill to automate messaging tasks or integrate iMessage/SMS functionality into your development workflows.
internationalization-i18n
CommunicationThis Claude Skill provides comprehensive guidance for implementing internationalization (i18n) and localization in applications. It covers key tasks like message extraction, translation management, locale-specific formatting, and RTL support using libraries like i18next and gettext. Use it when building multi-language applications or adding localization features for international users.
wacli
Communicationwacli is a command-line tool that enables WhatsApp messaging, search, and synchronization via the WhatsApp Web protocol. It's primarily used within Clawdis workflows for automated handling but can be called directly to send messages, sync chats, or query history. Key features include QR-based authentication, continuous background syncing, and the ability to send both text and files.
