トレーシングベースのアラート・通知設定 - プロアクティブ監視の実装
トレーシングの価値は、問題が発生してから調査するだけではなく、問題が発生する前に予測し、事前に対応できることにあります。このセクションでは、トレーシングデータを活用したアラート・通知体制の構築方法を、各ツール別に実務的に解説します。
トレーシングベースのアラート設計
アラート設定において重要な3つの要素があります。
1. 監視対象メトリクス
トレーシングデータから導き出されるメトリクス:
- エラー率: 特定時間内でエラーが発生したトレースの割合(%)
- レイテンシ(遅延): P50、P95、P99などの応答時間パーセンタイル
- スループット: 秒あたりのリクエスト数
- エラーメッセージ数: 特定の例外が発生した回数
2. しきい値設定
メトリクスごとに正常・警告・アラートの3段階を定義します。
エラー率の例:
- 正常: 0-1%
- 警告: 1-5%
- アラート: 5%以上
レイテンシ(P99)の例:
- 正常: 0-500ms
- 警告: 500-1000ms
- アラート: 1000ms以上
3. 通知チャネル
異なる重大度に応じた通知先:
- 警告: Slack #alerts チャネル(自動記録)
- アラート: PagerDuty(オンコール担当者呼び出し)
- Critical: SMS、電話(重大な本番障害)
Jaegerのアラート実装
Jaegerそのものにはネイティブアラート機能がありません。代わりに、以下のアプローチでアラートを実現します。
アプローチ1:PrometheusメトリクスとAlertmanager
Jaegerは内部メトリクスをPrometheus形式で公開できます。
Prometheus設定例:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'jaeger'
static_configs:
- targets: ['localhost:14269']Alertmanagerルール例 (alert_rules.yml):
groups:
- name: jaeger_alerts
interval: 30s
rules:
- alert: JaegerHighErrorRate
expr: rate(jaeger_traces_received_total{error="true"}[5m]) > 0.05
for: 5m
annotations:
summary: "High error rate detected"
description: "Error rate is {{ $value | humanizePercentage }}"
- alert: JaegerHighLatency
expr: histogram_quantile(0.99, rate(jaeger_span_duration_seconds[5m])) > 1
for: 5m
annotations:
summary: "High P99 latency detected"
description: "P99 latency is {{ $value }}s"このルールにより:
- エラー率が5分間で5%を超え、5分以上継続 → アラート
- P99レイテンシが1秒を超え、5分以上継続 → アラート
アプローチ2:カスタムスクリプトによる定期確認
Jaeger APIを使用してトレースを定期的にチェックするスクリプトを実装。
Python例:
import requests
import os
from datetime import datetime, timedelta
JAEGER_API = "http://localhost:16686/api"
SLACK_WEBHOOK = os.getenv("SLACK_WEBHOOK_URL")
def check_error_rate():
"""過去1時間のエラー率を確認"""
now = datetime.utcnow()
lookback = int((now - timedelta(hours=1)).timestamp()) * 1e6
# Jaeger APIでエラートレース取得
response = requests.get(
f"{JAEGER_API}/traces",
params={
"service": "payment-service",
"tags": "error=true",
"lookback": lookback
}
)
error_traces = response.json()["data"]
# 全トレース数を取得(APIのlimitに注意)
response_total = requests.get(f"{JAEGER_API}/traces", params={"service": "payment-service", "lookback": lookback})
total_traces = len(response_total.json().get("data", []))
error_rate = (len(error_traces) / total_traces * 100) if total_traces > 0 else 0
if error_rate > 5:
# Slackに通知
send_slack_alert(
f"⚠️ High error rate: {error_rate:.1f}%",
f"Service: payment-service\nError rate: {error_rate:.1f}%"
)
def send_slack_alert(title, message):
"""Slackにアラートを送信"""
requests.post(SLACK_WEBHOOK, json={
"text": title,
"blocks": [{"type": "section", "text": {"type": "mrkdwn", "text": message}}]
})このスクリプトを定期実行(cronで5分ごと等)することで、アラートを実現できます。
Datadog APMのアラート機能
Datadogはネイティブのアラート機能を備えており、セットアップが最も直感的です。
Watchdog - AI駆動の異常検知
Datadogの「Watchdog」機能は、機械学習により異常を自動検出します。
特徴:
- ゼロコンフィグレーション(設定不要)
- 過去データとの比較で自動的に異常判定
- 誤検知を自動フィルタリング
Watchdogが検出した異常は、Datadogのダッシュボードに自動表示され、通知設定により即座にアラート可能です。
カスタムアラート設定
より細かい条件でのアラートを設定できます。
Datadogコンソール操作フロー:
Monitors → Create Monitor → APM
↓
Metric: Trace Queries を選択
↓
Metric: service.errors{service:payment-service}
Threshold: > 0.05 (エラー率5%以上)
Duration: 5 minutes
↓
Notify: @slack-alerts @pagerduty設定YAML例:
name: "Payment Service High Error Rate"
type: metric_alert
query: |
sum:trace.requests.errors{service:payment-service}.as_count() /
sum:trace.requests{service:payment-service}.as_count() > 0.05
thresholds:
critical: 0.05
warning: 0.02
notification_channels:
- slack_alerts
- pagerduty複合アラート
複数の条件を組み合わせたアラートも可能です。
例: エラー率がX%以上かつレイテンシがY秒以上 → アラート
query: |
(avg:trace.errors{service:api} > 0.05)
AND
(avg:trace.latency{service:api,p:99} > 1000000000) # 1000ms = 1sAWS X-Rayのアラート設定
AWS X-RayはCloudWatch Alarmsと統合して、アラート機能を実現します。
CloudWatch Alarmsベースのアラート
AWS Management Consoleでの設定フロー:
CloudWatch → Alarms → Create Alarm
↓
Metric: AWS/X-Ray
Service: X-Ray
↓
Metric Name: TracedRequestCount(トレースリクエスト数)
Statistic: Sum
Period: 5 minutes
Threshold: < 100 (リクエスト数が100未満)
↓
Actions: SNS topic → 通知カスタムメトリクス用アラーム
X-Rayから特定メトリクスを抽出してCloudWatchメトリクスに変換し、アラームを設定。
CloudWatch Logsインサイト を使用した例:
fields @timestamp, @message, @duration, @error
| stats count() as error_count by bin(5m)
| filter error_count > 10このクエリ結果をメトリクスに変換し、アラームを作成。
DevOps Guru による自動推奨
DevOps Guruはアノマリ検出と改善提案を自動生成します。
有効化フロー:
- DevOps Guru コンソールで有効化
- X-Ray データの自動分析開始
- 異常検出時に自動通知
- 改善提案をダッシュボードに表示
ツール別アラート機能比較
| 機能 | Jaeger | Datadog | AWS X-Ray |
|---|---|---|---|
| ネイティブアラート | ✗ | ◎ | ○ |
| AI異常検知 | ✗ | ◎(Watchdog) | ○(DevOps Guru) |
| カスタムしきい値 | △(Prometheus経由) | ◎ | ◎ |
| 通知チャネル | △ | ◎ | ◎ |
| 複合条件アラーム | ○(Alertmanager) | ◎ | ○ |
実務的なアラート戦略
アラート疲れ対策
不適切なしきい値設定により、アラートが頻繁に鳴る「アラート疲れ」は、実際には重要な問題を見落とさせます。
対策方法:
段階的しきい値設定
- Warning: 通知のみ
- Alert: オンコール担当者へ
- Critical: 複数チャネルへ即座に通知
自動解除機能の活用
- アラート発生後、条件が改善されたら自動的に解除
- 手動での確認・承認ステップを不要にする
定期的な見直し
- 実際に発火したアラートと、見落とされた問題を定期(月1回等)で分析
- しきい値を継続的に調整
サービス・チームごとの通知先分離
大規模組織では、通知先を明確に分離することが重要です。
組織構造例:
Payment Service エラー率 > 5%
→ PagerDuty: on-call-payment
→ Slack: #payment-alerts
Order Service レイテンシ P99 > 2s
→ PagerDuty: on-call-order
→ Slack: #order-alerts
Shared Infrastructure
→ PagerDuty: on-call-infra
→ Slack: #infra-alerts外部API制限への先制アラート
外部サービス(決済API、SNS等)の制限に達する前にアラートを設定。
例: 決済API呼び出しレート制限1000 req/minの場合
- Warning: 800 req/min
- Alert: 950 req/min
これにより、制限に達する前に対応が可能です。
トレーシングアラートのベストプラクティス
1. ビジネスインパクトを考慮
ビジネスの影響度が高い操作ほど、厳しいしきい値でアラート。
Critical(即座に対応が必要):
- 決済処理
- ユーザー認証
High(1時間以内に対応):
- 注文作成
- レコメンデーション取得
Medium(4時間以内に対応):
- ユーザープロフィール更新
- ログ処理2. 文脈情報の包含
アラートメッセージには、対応に必要な情報を全て含める。
❌ 不十分: "High error rate detected"
✅ 十分:
"⚠️ Payment Service: Error rate 8% (threshold: 5%)
Duration: Last 5 minutes (13:45-13:50 JST)
Affected operations: process_payment (120 errors)
Action: Check Dashboard [ダッシュボードへのリンク] | PagerDuty page [PagerDutyページへのリンク]"3. アラート無音化(Silencing)機能の活用
計画的なメンテナンスやデプロイ中にアラートを一時的に無音化。
Datadog例:
Downtime を設定
時刻: 2025-11-10 14:00-16:00
範囲: payment-service
理由: Database migrationまとめ:アラート体制の構築ロードマップ
Phase 1(初期段階)
- エラーレートの基本的なアラート設定
- 単一チャネル(Slack)への通知
Phase 2(成長段階)
- 複数メトリクス(レイテンシ、エラーレート、スループット)の監視
- サービス別の通知先分離
- PagerDutyによるオンコール統合
Phase 3(成熟段階)
- AI異常検知の導入
- 複合条件アラーム
- 自動修復・スケーリングのトリガー
シリーズ完了: このガイドで、トレーシング可視化ツール選択から運用まで、一連の実務的なナレッジをカバーしました。環境に応じた適切なツール選択と、段階的なアラート体制構築により、堅牢で効率的な分散トレーシング基盤を実現できます。