

# REL06-BP02 メトリクスを定義および計算する (集計)
<a name="rel_monitor_aws_resources_notification_aggregation"></a>

 ワークロードコンポーネントからメトリクスとログを収集し、そこから関連する集計メトリクスを計算します。これらのメトリクスは、ワークロードの広範で深いオブザーバビリティを提供し、耐障害性の態勢を大幅に改善できます。

 オブザーバビリティは、ワークロードコンポーネントからメトリクスを収集し、それらを表示してアラートを発するだけではありません。これは、ワークロードの動作を全体的に理解することです。この動作情報は、ワークロード内のすべてのコンポーネントから取得されます。これには、ワークロードが依存するクラウドサービス、適切に作成されたログ、メトリクスが含まれます。このデータにより、ワークロードの全体的な動作を監督し、すべてのコンポーネントとすべての作業単位のやり取りを詳細に把握できます。

 **期待される成果:** 
+  ワークロードコンポーネントと AWS サービスの依存関係からログを収集し、簡単にアクセスして処理できる一元的な場所に公開します。
+  ログには、忠実度が高く正確なタイムスタンプが含まれています。
+  ログには、トレース識別子、ユーザーまたはアカウント識別子、リモート IP アドレスなど、処理コンテキストに関する関連情報が含まれています。
+  おおまかな視点からワークロードの動作を表す集計メトリクスをログから作成します。
+  集約ログをクエリして、ワークロードに関する深く関連するインサイトを取得し、実際の問題と潜在的な問題を特定できます。

 **一般的なアンチパターン:** 
+  ワークロードが実行されるコンピューティングインスタンスや、ワークロードが使用するクラウドサービスから、関連するログやメトリクスを収集することはない。
+  ビジネスキーパフォーマンスインジケーター (KPI) に関連するログとメトリクスのコレクションは無視する。
+  ワークロード関連のテレメトリを集約や相関関係なしに個別に分析する。
+  メトリクスとログの有効期限が早すぎ、トレンド分析や問題の定期的な識別が妨げられる。

 **これらのベストプラクティスを活用するメリット:** より多くの異常を検出し、ワークロードのさまざまなコンポーネント間でイベントとメトリクスを関連付けることができます。メトリクスだけでは利用できないことが多いログに含まれる情報に基づいて、ワークロードコンポーネントからインサイトを作成できます。大規模にログをクエリすることにより、障害の原因をより迅速に特定できます。

 **このベストプラクティスを活用しない場合のリスクレベル:** 高 

## 実装のガイダンス
<a name="implementation-guidance"></a>

 ワークロードとそのコンポーネントに関連するテレメトリデータのソースを特定します。このデータは、オペレーティングシステム (OS) や Java などのアプリケーションランタイムなどのメトリクスを発行するコンポーネントだけでなく、アプリケーションやクラウドサービスのログからも取得されます。例えば、ウェブサーバーは通常、タイムスタンプ、処理レイテンシー、ユーザー ID、リモート IP アドレス、パス、クエリ文字列などの詳細情報を使用して各リクエストを記録します。これらのログの詳細レベルは、詳細なクエリを実行し、他の方法では利用できないメトリクスを生成するのに役立ちます。

 適切なツールとプロセスを使用してメトリクスとログを収集します。Amazon EC2 インスタンスで実行されているアプリケーションによって生成されたログは、[Amazon CloudWatch Agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) などのエージェントによって収集され、[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) などの中央ストレージサービスに発行されます。[AWS Lambda](https://aws.amazon.com/lambda/) や [Amazon Elastic Container Service](https://aws.amazon.com/ecs/) などの AWS マネージドコンピューティングサービスは、自動的に CloudWatch Logs にログを発行します。[Amazon CloudFront](https://aws.amazon.com/cloudfront/)、[Amazon S3](https://aws.amazon.com/s3/)、[Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/)、[Amazon API Gateway](https://aws.amazon.com/api-gateway/) などのワークロードで使用される AWS ストレージおよび処理サービスのログ収集を有効にします。

 動作パターンをより明確に把握し、相関する問題を関連するコンポーネントのグループに分離するのに役立つ*[ディメンション](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)*でテレメトリデータを強化します。追加すると、コンポーネントの動作をより詳細なレベルで観察し、相関する障害を検出し、適切な修復手順を実行できるようになります。便利なディメンションの例としては、アベイラビリティーゾーン、EC2 インスタンス ID、コンテナタスクまたはポッド ID などがあります。

 メトリクスとログを収集したら、クエリを記述し、それらから集計メトリクスを生成して、正常な動作と異常な動作の両方に関する有用なインサイトを提供できます。例えば、[Amazon CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) を使用してアプリケーションログからカスタムメトリクスを導き出し、[Amazon CloudWatch Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html) を使用してメトリクスを大規模にクエリし、[Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) を使用してコンテナ化されたアプリケーションとマイクロサービスからメトリクスとログを収集、集約、要約でき、AWS Lambda 関数を使用している場合は [Amazon CloudWatch Lambda Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights.html) を使用できます。集約エラーレートメトリクスを作成するには、コンポーネントログにエラーレスポンスやメッセージが見つかるたびにカウンターを増分したり、既存のエラーレートメトリクスの集約値を計算したりできます。このデータを使用して、パフォーマンスが最も低いリクエストやプロセスなどの*テール動作*を示すヒストグラムを生成できます。また、CloudWatch Logs の[異常検出](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/LogsAnomalyDetection.html)などのソリューションを使用して、このデータをリアルタイムでスキャンして異常パターンを検出することもできます。これらのインサイトはダッシュボードに配置して、ニーズや好みに応じて整理できます。

 ログのクエリは、ワークロードコンポーネントによって特定のリクエストがどのように処理されたかを理解し、ワークロードの回復力に影響を与えるリクエストパターンやその他のコンテキストを明らかにするのに役立ちます。アプリケーションやその他のコンポーネントの動作に関する知識に基づいて、事前にクエリを調査して準備しておくと、必要に応じてクエリをより簡単に実行できるため便利です。例えば、[CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) を使用すると、CloudWatch Logs に保存されているログデータをインタラクティブに検索、分析できます。[Amazon Athena](https://aws.amazon.com/athena/) を使用すると、ペタバイト規模で、[多くの AWS のサービス](https://docs.aws.amazon.com/athena/latest/ug/querying-aws-service-logs.html)を含む複数のソースからのログをクエリすることもできます。

 ログ保持ポリシーを定義するときは、履歴ログの価値を考慮してください。履歴ログは、ワークロードのパフォーマンスにおける長期的な使用状況と動作のパターン、リグレッション、改善を特定するのに役立ちます。完全に削除されたログは後で分析することはできません。ただし、履歴ログの価値は長期間にわたって低下する傾向があります。必要に応じてニーズのバランスを取り、適用される可能性のある法的または契約上の要件に準拠するポリシーを選択してください。

### 実装手順
<a name="implementation-steps"></a>

1.  オブザーバビリティデータの収集、ストレージ、分析、表示メカニズムを選択します。

1.  ワークロードの適切なコンポーネント (Amazon EC2 インスタンスや[サイドカーコンテナ](https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/)など) にメトリクスコレクターとログコレクターをインストールして設定します。これらのコレクターが予期せず停止した場合に自動的に再起動するように設定します。一時的な発行の失敗がアプリケーションに影響を与えたり、データが失われたりしないように、コレクターのディスクまたはメモリバッファリングを有効にします。

1.  ワークロードの一部として使用する AWS のサービスのログオンを有効にし、必要に応じて選択したストレージサービスにそれらのログを転送します。詳細な手順については、各サービスのユーザーガイドまたはデベロッパーガイドを参照してください。

1.  テレメトリデータに基づくワークロードに関連する運用メトリクスを定義します。これらは、ビジネス KPI 関連のメトリクスを含むワークロードコンポーネントから出力される直接メトリクスや、合計、レート、パーセンタイル、ヒストグラムなどの集計計算の結果に基づく場合があります。これらのメトリクスはログアナライザーを使用して計算し、必要に応じてダッシュボードに配置します。

1.  必要に応じて、ワークロードコンポーネント、リクエスト、またはトランザクションの動作を分析するための適切なログクエリを準備します。

1.  コンポーネントログのログ保持ポリシーを定義して有効にします。ポリシーで許可されているよりも古いログは定期的に削除します。

## リソース
<a name="resources"></a>

 **関連するベストプラクティス:** 
+  [REL06-BP01 ワークロードのすべてのコンポーネントをモニタリングする (生成)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_monitor_resources.html) 
+  [REL06-BP03 通知を送信する (リアルタイム処理とアラーム)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_notification_monitor.html) 
+  [REL06-BP04 レスポンスを自動化する (リアルタイム処理とアラーム)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_automate_response_monitor.html) 
+  [REL06-BP05 ログの分析](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_storage_analytics.html) 
+  [REL06-BP06 モニタリングの範囲とメトリクスを定期的に確認する](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_review_monitoring.html) 
+  [REL06-BP07 システムを通じたリクエストのエンドツーエンドのトレースをモニタリングする](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_end_to_end.html) 

 **関連ドキュメント:** 
+  [Amazon CloudWatch の仕組み](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html) 
+  [Amazon Managed Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html) 
+  [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html)。
+  [Analyzing Log Data with CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) 
+  [Amazon CloudWatch Lambda Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights.html) 
+  [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 
+  [CloudWatch Metrics Insights を使用して CloudWatch メトリクスをクエリする](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html) 
+  [AWS オープンテレメトリー用ディストロ](https://aws.amazon.com/otel/) 
+  [Amazon CloudWatch Logs Insights のサンプルクエリ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html) 
+  [Amazon CloudWatch Synthetics と AWS X-Ray でのデバッグ](https://aws.amazon.com/blogs/devops/debugging-with-amazon-cloudwatch-synthetics-and-aws-x-ray/) 
+  [ログデータの検索およびフィルタリング](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html) 
+  [Amazon S3 に直接ログを送信する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Sending-Logs-Directly-To-S3.html) 
+  [Amazon Builders' Library: 運用の可視性を高めるために分散システムを装備する](https://aws.amazon.com/builders-library/instrumenting-distributed-systems-for-operational-visibility/) 

 **関連するワークショップ:** 
+  [つのオブザーバビリティワークショップ](https://observability.workshop.aws/) 

 **関連ツール:** 
+  [AWS Distro for OpenTelemetry (GitHub)](https://aws-otel.github.io/) 