AgentSkillsCN

observability

应用程序可观测性设计指南(不依赖于任何框架)。涵盖日志、指标与追踪三大支柱,包括结构化日志设计、请求追踪、指标设计(RED/USE)、健康检查、告警设计以及错误追踪等核心内容。适用于可观测性设计、日志设计以及监控设计等场景。

SKILL.md
--- frontmatter
name: observability
description: アプリケーションの可観測性設計ガイド(フレームワーク非依存)。ログ・メトリクス・トレースの3本柱、構造化ログ設計、リクエストトレーシング、メトリクス設計(RED/USE)、ヘルスチェック、アラート設計、エラートラッキングをカバー。可観測性の設計、ログ設計、モニタリング設計時に使用。

可観測性(Observability)設計ガイド

アプリケーションの可観測性に関するフレームワーク非依存の設計ガイド。

可観測性の 3 本柱

目的答える問い
ログ個別イベントの記録「何が起きたか?」
メトリクス数値的な計測「どのくらい起きているか?」
トレースリクエストの流れの追跡「どこで時間がかかっているか?」
code
優先順位:
  1. 構造化ログ(最低限これは必須)
  2. メトリクス(パフォーマンス監視に)
  3. 分散トレース(マイクロサービスで特に重要)

構造化ログ設計

ログレベル

レベル用途
ERROR即座に対応が必要DB 接続失敗、外部 API エラー
WARN潜在的な問題レート制限接近、非推奨 API 使用
INFO正常な業務イベントユーザーログイン、注文確定
DEBUG開発時の詳細情報SQL クエリ、変数の値

構造化ログの原則

code
必須フィールド:
  - timestamp: ISO 8601 / UTC
  - level: ログレベル
  - message: 人間が読めるメッセージ
  - service: サービス名
  - request_id: リクエスト追跡用 ID

推奨フィールド:
  - user_id: 操作ユーザー(認証後)
  - method: HTTP メソッド
  - path: リクエストパス
  - status_code: レスポンスステータス
  - duration_ms: 処理時間
  - error: エラー情報(スタックトレース含む)

出力形式: JSON(機械解析可能)

ログ設計の原則

code
DO:
  - ビジネスイベントをログに記録する
  - エラーにはコンテキスト情報を含める
  - リクエスト ID で関連ログを紐付ける
  - 本番では INFO 以上、開発では DEBUG 以上

DON'T:
  - パスワード、トークン、個人情報をログに出力しない
  - ループ内で大量のログを出力しない
  - ログレベルを不適切に使わない(正常処理を ERROR にしない)
  - スタックトレースを本番のレスポンスに含めない

詳細: references/logging-design.md

リクエストトレーシング

相関 ID(Correlation ID)

code
設計:
  1. リクエスト受信時に一意の ID を生成(または受信)
  2. すべてのログにこの ID を付与
  3. 下流サービスへのリクエストにも ID を伝播
  4. レスポンスヘッダーにも ID を含める

ヘッダー規約:
  - X-Request-ID(一般的)
  - traceparent(W3C Trace Context 標準)

用途:
  - エラー調査時にリクエスト全体の流れを追跡
  - サポート問い合わせ時にユーザーから ID を取得

分散トレーシング

code
構成要素:
  - Trace: リクエスト全体の追跡単位
  - Span: 個別の操作単位(DB クエリ、外部 API 呼び出し等)
  - Context Propagation: サービス間でのトレース情報の伝播

計装対象(優先度順):
  1. HTTP リクエスト/レスポンス
  2. データベースクエリ
  3. 外部 API 呼び出し
  4. キューのメッセージ処理
  5. 重要なビジネスロジック

メトリクス設計

RED メソッド(リクエスト指向 - API/サービス向け)

指標意味
Rateリクエスト数/秒HTTP リクエスト数
Errorsエラー率5xx レスポンスの割合
Durationレスポンス時間p50, p95, p99 レイテンシ

USE メソッド(リソース指向 - インフラ向け)

指標意味
Utilization使用率CPU 使用率、メモリ使用率
Saturation飽和度キュー長、待ちスレッド数
Errorsエラー数ディスク I/O エラー

カスタムメトリクス

code
ビジネスメトリクス:
  - アクティブユーザー数
  - 注文数 / 売上
  - 機能の利用率

技術メトリクス:
  - DB コネクションプール使用率
  - キャッシュヒット率
  - 外部 API レスポンス時間

詳細: references/metrics-design.md

ヘルスチェック

エンドポイント設計

code
GET /health  → 基本的な稼働確認(200 OK)
GET /ready   → 依存サービスを含めた準備完了確認

/health レスポンス:
  - status: "ok" | "degraded" | "unhealthy"
  - version: アプリバージョン
  - uptime: 稼働時間

/ready レスポンス:
  - 各依存サービスのステータス
  - DB 接続: ok/ng
  - キャッシュ: ok/ng
  - 外部 API: ok/ng

設計原則

code
- /health は軽量に(依存チェックなし、即座に応答)
- /ready は起動完了の判断に使用
- 認証不要にする(ロードバランサーから呼ばれる)
- タイムアウトを設定する(ヘルスチェック自体がハングしない)

アラート設計

アラートの原則

code
1. アクション可能なアラートのみ設定
   → 「見たけど何もしない」アラートは削除

2. 症状ベース > 原因ベース
   → ❌ "CPU 使用率が 80% 超過"
   → ✅ "レスポンス時間の p95 が 2秒 超過"

3. 適切な閾値設定
   → 過敏すぎない(アラート疲れの防止)
   → 遅すぎない(障害の早期検知)

4. 段階的なエスカレーション
   → Warning → Critical → Page

重要アラート例

対象条件重要度
エラー率5xx が 5% 超過Critical
レイテンシp95 が SLA 超過Critical
ヘルスチェック3回連続失敗Critical
ディスク容量90% 超過Warning
証明書期限30日以内に期限切れWarning

エラートラッキング

code
記録すべき情報:
  - エラーメッセージとスタックトレース
  - 発生環境(本番/ステージング)
  - リクエスト情報(URL, メソッド, ヘッダー)
  - ユーザー情報(匿名化)
  - 発生頻度と影響範囲

グルーピング:
  - 同一スタックトレースのエラーを集約
  - 新規 vs 既知のエラーを区別
  - リリースバージョンとの相関

レビューチェックリスト

  • 構造化ログが JSON 形式で出力されている
  • リクエスト ID がすべてのログに含まれている
  • 機密情報がログに含まれていない
  • ログレベルが適切に使い分けられている
  • ヘルスチェックエンドポイントが実装されている
  • エラー率・レイテンシのメトリクスが計測されている
  • アクション可能なアラートが設定されている

リファレンス