View a markdown version of this page

サービスイベントのモニタリング - Amazon CloudWatch

サービスイベントのモニタリング

サービスイベントでは、CloudWatch Application Signals でモニタリングされるサービスの自動ディープオブザーバビリティが可能です。エラーメトリクス、関数レベルのパフォーマンスデータ、インシデントスナップショット (リクエストがレイテンシーしきい値を超えた場合、または例外をスローする場合)、デプロイイベントが、追加のコード変更なしでキャプチャされます。

サービスイベントの仕組み

サービスイベントでは、計測されたサービスから次のタイプのシグナルが収集されます。

  • エラーメトリクス — 例外タイプごとのエラーの数と割合。発生の頻度と傾向が最も高い例外を特定できます。

  • 関数呼び出しメトリクス — アプリケーションコード内の個々の関数の呼び出し数、期間、エラー率。

  • インシデントスナップショット — スタックトレース、コールツリー、発信者の詳細、オペレーションコンテキストなど、リクエストがレイテンシーしきい値を超えたときや例外をスローしたときにトリガーされる詳細なキャプチャ。

  • デプロイイベント — アプリケーションの起動時および 24 時間ごとに発行され、コードデプロイとサービス動作の変化を関連付けるマーカー。アプリケーションによりデプロイイベントが自動的に発行されます。デプロイメタデータ (git commit、デプロイ ID) を指定すると、これらのイベントが追加のコンテキストで強化されます。

サービスイベントは、サービスの CloudWatch Application Signals を有効にすると自動的に有効になります。エラーメトリクスと例外の追跡はすぐにアクティブになります。関数呼び出しメトリクスには追加の設定が必要です。関数呼び出しデータが収集される前に、計測するパッケージを設定する必要があります (関数計装の有効化 を参照)。サービスイベントは、OTEL_AWS_SERVICE_EVENTS_ENABLED=false を設定することで無効にできます。データは ADOT SDK から CloudWatch エージェントに流れます。エージェントは、CloudWatch Logs (/aws/service-events/service-name ロググループ) と CloudWatch Metrics にイベントを発行します。

サポートされている言語: Java、Python、Node.js

注記

サービスイベントは Lambda 環境で自動的に無効になります。

データストレージ

サービスイベントは CloudWatch Logs にデータを保存します。CloudWatch は、プレフィックス /aws/application-signals/service-name があるロググループにサービスイベントデータを発行します。ここで、service-name は環境変数 OTEL_SERVICE_NAME の値です。サービスごとに 1 つのロググループが作成されます。

ログの取り込みと保存には、標準の CloudWatch Logs 料金が請求されます。

コンソールにおけるエラー表示

CloudWatch コンソールで、[Application Signals] に移動し、該当するサービスを選択し、[エラー] タブを選択します。このタブはサービスの例外メトリクスを示すものです。

タブには以下が表示されます。

  • エラーの経時的傾向を示す例外カウントチャート。これは、最近頻度が変化した例外タイプを検出するのに使用します。

  • 各例外タイプ、発生したオペレーション、発生数、および前期間と比較した変更が表示されている一覧表。

例外を選択して、スタックトレース、例外メッセージ、関連するトレースへのリンクなどの詳細をドリルダウンします。

エラーは、オペレーション別、例外タイプ別、上位スタックフレーム別にグループ化されます。各グループの最新の代表のみが表示されます。

注記

エラーデータを表示するには、アカウントに少なくとも 1 つの /aws/service-events/service-name ロググループが存在していなければなりません。ロググループが存在しない場合は、エラータブにオンボーディングプロンプトが表示されます。

ログにおけるサービスイベントの表示

サービスイベントデータは、CloudWatch Logs で、/aws/service-events/service-name というプレフィックスが付いたロググループに保存されます。CloudWatch Logs Insights を使用してこのデータを直接クエリすることで、カスタムビューの構築、ダッシュボードの作成、特定のインシデントの調査を行うことができます。

サービスイベントをクエリするには:

  1. CoudWatch Logs Insights コンソールを開き、[Logs Insights] に進みます。

  2. 対象サービスのロググループ /aws/service-events/service-name を選択します。

  3. クエリを入力して、サービスイベントデータのフィルタリングと分析を行います。

CloudWatch Application Signals MCP (モデルコンテキストプロトコル) サーバーのサービスイベント

サービスイベントデータには CloudWatch Application Signals MCP (モデルコンテキストプロトコル) サーバーを介してアクセスでき、AI コーディングアシスタントとエージェントはサービスのランタイム動作を直接クエリできます。

トラブルシューティング

  • フルスタックトレースや影響を受けるエンドポイントなど、コード内のエラーを本番環境のインシデントスナップショットに自動的に関連付けます。

  • インシデントコンテキスト (例外タイプ、コールパス、トレース ID) を使用して、ダッシュボードを手動でナビゲートすることなく、的を絞った修正を提案します。

  • デプロイイベントを取得して、最近のリリースでリグレッションが発生したかどうかを判断します。

パフォーマンスの改善

  • レイテンシー問題を調査する際に、関数レベルのパフォーマンスデータをクエリしてボトルネックを特定します。

  • デプロイ間で関数呼び出し時間を比較して、パフォーマンスの低下を特定します。

セットアップと使用手順については、GitHub ウェブサイトの「Application Signals MCP サーバー」を参照してください。

サービスイベントの設定

前提条件

サービスイベントを使用するには、以下のコンポーネントについて必要最小限のバージョンであることを確認してください。

  1. ADOT SDK の更新 — AWS Distro for OpenTelemetry (ADOT) 計装 SDK をお使いの言語 (Java、Python、または Node.js) に対応する最新バージョンに更新します。

  2. Amazon EKS アドオンの更新 (該当する場合) — CloudWatch Observability Amazon EKS アドオンを使用してアプリケーションを計測する場合は、最新バージョンのアドオンに更新します。

  3. CloudWatch エージェントの更新 — CloudWatch エージェントのバージョン 1.300069.0 以降に更新します。

Amazon EKS を使用する場合は、アドオンのセットアップ手順については「Amazon EKS クラスターでアプリケーションを有効にする」を参照してください。

デフォルトで有効になっている機能

CloudWatch Application Signals を使用する場合、次のサービスイベント信号はデフォルトで有効になっており、追加の設定は必要ありません。

  • インシデントスナップショット (例外時とレイテンシーしきい値違反時にトリガーされます)

  • エラーメトリクス (オペレーションごとの例外タイプ別エラー数)

  • デプロイイベント (常に出力され、デプロイメタデータを指定すると強化されます)

  • 関数計装 (デフォルトで有効になっていますが、計装するパッケージを設定するまでメトリクスを生成しません)

次の機能はオプトインであり、データを生成するには環境変数を設定する必要があります。

  • 関数レベルのメトリクス (OTEL_AWS_SERVICE_EVENTS_PACKAGES_INCLUDE の設定が必要)

  • カスタムのエンドポイントフィルタリング

  • エンドポイントごとのレイテンシーしきい値

全般設定

環境変数 デフォルト 説明
OTEL_AWS_SERVICE_EVENTS_ENABLED CloudWatch Application Signals に従う サービスイベントの切り替えを行います。CloudWatch Application Signals が有効になっている場合、サービスイベントは自動的に有効になります。明示的に無効にするには false に設定します。
OTEL_AWS_SERVICE_EVENTS_SAMPLING_MODE always 関数呼び出しデータサンプリング戦略を制御します。値: always (すべての関数呼び出しを記録する)、auto (ロードに基づいて SDK に決定させる)、never (関数呼び出しの記録を無効にする)。関数計装パッケージが設定されている場合にのみ適用されます。

関数計装の有効化

関数計装はデフォルトで有効になっていますが、計装するパッケージを設定するまでメトリクスを生成しません。関数ごとのテレメトリ収集を開始するには、パッケージ許可リストを指定します。

環境変数 デフォルト 説明
OTEL_AWS_SERVICE_EVENTS_FUNCTION_INSTRUMENT_ENABLED true 関数レベルの計装を有効または無効にします。完全に無効にするには false に設定します。
OTEL_AWS_SERVICE_EVENTS_PACKAGES_INCLUDE なし (メトリクスに必要) 計測するパッケージプレフィックスのカンマ区切りリスト。ワイルドカードは不要です。例えば、Java は com.myapp を、Python は myapp を、Node.js は src/myapp を使用します。
OTEL_AWS_SERVICE_EVENTS_PACKAGES_EXCLUDE なし 計装から除外するサブパッケージのカンマ区切りリスト。exclude (除外) は常に include (包含) よりも優先されます。たとえば、com.myapp を含め、com.myapp.models を除外すると、アプリケーションコードを計測しつつ、データモデルクラスは対象外とすることができます。

エンドポイントフィルタリング

エンドポイントフィルタリングは、エンドポイントエラーメトリクスとインシデントスナップショットを生成するエンドポイントを制御します。これらの設定は、関数の計装には影響しません。

環境変数 デフォルト 説明
OTEL_AWS_SERVICE_EVENTS_ENDPOINT_INCLUDE_PATTERNS すべてのエンドポイント 含めるエンドポイントのカンマ区切り glob パターン。METHOD /route と一致。
OTEL_AWS_SERVICE_EVENTS_ENDPOINT_EXCLUDE_PATTERNS なし 除外するエンドポイントのカンマ区切り glob パターン。exclude (除外) は、エンドポイントが両方に一致する場合に優先されます。

レイテンシーしきい値

次の環境変数を使用して、インシデントスナップショットトリガーのレイテンシーしきい値を設定します。

環境変数 デフォルト 説明
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_DURATION_THRESHOLD_MS 5000 ミリ秒単位のグローバルレイテンシーしきい値。この期間を超えるリクエストがインシデントスナップショットをトリガーします。
OTEL_AWS_SERVICE_EVENTS_LATENCY_THRESHOLDS なし グローバルデフォルトを上書きするエンドポイントごとのレイテンシーしきい値。形式: METHOD /route:ms (例: GET /health:200,POST /checkout:8000)。

レート制限

以下の環境変数を使用して、サービスイベントデータが収集されて報告される際のレートを制御します。

環境変数 デフォルト 説明
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_MAX_PER_MINUTE 100 1 分間にキャプチャされるインシデントスナップショットの最大数。
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_MAX_SAME_ERROR 1 同一のエラーに対するスナップショットのキャプチャウィンドウ 1 つ当たりの最大数。

デプロイイベントの設定

デプロイイベントはアプリケーションの起動時と 24 時間ごとに必ず出力されます。デプロイメタデータを指定すると、これらのイベントが強化されるため、インシデントとパフォーマンスの変化を特定のコードデプロイに関連付けることができます。

デプロイメタデータを提供するために、アプリケーションコンテナまたはプロセスに次の環境変数を設定します。

環境変数 説明
OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA デプロイされたコードの Git コミット SHA。
OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL Git リポジトリの URL。
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID デプロイの一意の識別子 (CI/CD パイプライン実行 ID など)。
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP デプロイの ISO 8601 タイムスタンプ。
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL デプロイビルドまたはパイプライン実行の URL。

GitHub Actions を使用したデプロイイベントの設定

GitHub Actions ワークフローで、組み込みの環境変数を使用してデプロイメタデータを入力します。デプロイステップまたはコンテナ環境に以下を追加します。

env: OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA: ${{ github.sha }} OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL: ${{ github.server_url }}/${{ github.repository }} OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID: ${{ github.run_id }} OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}

コンテナイメージをデプロイする場合は、これらの値をタスク定義またはポッド仕様の環境変数として渡します。ビルド時にイメージにベイクすることも、デプロイ設定を通じてデプロイ時に挿入することもできます。

GitLab CI/CD を使用したデプロイイベントの設定

GitLab CI/CD パイプラインで、事前定義された CI/CD 変数を使用してデプロイメタデータを入力します。デプロイジョブに以下を追加します。

deploy: variables: OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA: $CI_COMMIT_SHA OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL: $CI_PROJECT_URL OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID: $CI_PIPELINE_ID OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL: $CI_PIPELINE_URL

これらの変数をデプロイ時にコンテナオーケストレーションプラットフォームを介してアプリケーションコンテナに渡します (Amazon ECS タスク定義または Kubernetes デプロイマニフェストの環境変数などとして)。