Amazon CloudWatch

出典:AWS Blackbelt

モニタリング・オブザーバビリティ

オブザーバビリティ(可観測性)

  • システムで何がなぜ起こっているかといった動作状況を把握できている状態のこと
  • システムがどのように動作しているかを理解することで、運用上の優秀性・ビジネス目標を達成することにも役立つ
  • モニタリングとの違いについては明確な定義がないが、監視はエラーに対応するために検知することが目的としていることのみを指すことが多い

システムの状態把握に必要な3要素

  • メトリクス(Amazon CloudWatch Metrics)
    • 時間感覚で計測されたデータの数値表現
    • 傾向の把握、予測に役立つ
  • ログ(Amazon CloudWatch Logs)
    • タイムスタンプに記録された、イベントの記録
    • 予測不可能な振る舞いの発見に役立つ
  • トレース(AWS X-Ray)
    • 関連する一連の分散イベントの表現、エンドツーエンドのリクエストフローの記録
    • 因果関係の追跡に役立つ

イベントとの組み合わせ

  • イベント=状態の変化(EventBridge)
  • モニタリングと業務機能双方で活用される

AWSにおけるObservability全体像

2つの実現方式

  • AWS Native Servicesでの実現
    • CloudWatch、X-Ray(トレースデータの送信についてはOSSも活用することは一般的)
  • Open Source Managed Servicesでの実現
    • OpenSearch ServiceやGrafanaなど

Amazon CloudWatch全体像

CloudWatchの機能一覧

Infrastructure
CloudWatch Metrics メトリクス
CloudWatch Log ログ
CloudWatch Alarm アラーム
CloudWatch Dashboard ダッシュボード
CloudWatch Metrics Explorer メトリクス検索
CloudWatch Metrics Stream メトリクス連携
CloudWatch Events イベント(現在はEventBridgeに統合)
CloudWatch Resource Health EC2の健全性、パフォーマンス可視化
Application Monitoring
CloudWatch Synthetics 外形監視
CloudWatch RUM リアルユーザーモニタリング
CloudWatch Evidently フィーチャーフラグA/Bテスト
CloudWatch Internet Monitor インターネット監視
CloudWatch ServiceLens トレース
Insights
CloudWatch Contributer Insights ログの時系列分析
CloudWatch Container Insights コンテナ分析
CloudWatch Lambda Insights Lambda分析
CloudWatch Application Insights アプリケーション分析
CloudWatch Logs Insights ログ分析
CloudWatch Metrics Insights メトリクス分析

メトリクス

取得間隔

  • 標準メトリクス 5分間隔
  • 詳細モニタリングの有効化 1分間隔
  • 高解像度のカスタムメトリクス 1秒
  • データの保管期間は解像度で異なる
    • デフォルトは15ヶ月間保管
    • 60秒以下は3時間のみ保持される
    • 長く保管するとデータが丸められていくので、注意が必要

集計

  • 平均、Trim、パーセンタイル、最小、最大などを利用可能
  • CloudWatchMetricsはデータポイントを収集
  • これらはメトリクス名で表現される、名前空間にあり、ディメンション単位でまとめられている(InstanceIdなど)
  • これにStatistic(集計方法)とPeriod(期間など)で取り扱う

CloudWatch Metric Insights

柔軟なクエリ機能で分析が可能

  • SQLベースのクエリ
  • クエリビルダー

Metric Math

CloudWatchメトリクスに数式を使用して新しいメトリクスを作成

  • メトリクスに[Id]フィールドを設定し、関数で利用
  • AVG、SUM、METRICSなどを使用可能

例)全リクエストのうち4xx,5xxレスポンスの割合を表示

1
SUM([METRIC("res4xx"),METRICS(#res5xx")])/SUM(METRICS("reqall"))

CloudWatch Alarms

  1. 静的閾値に基づくアラーム
  2. Metrics Insightsクエリに基づくCloudWatchアラーム
  3. CloudWatch異常検知にもどついたアラーム
  4. 複合アラーム

メトリクスアラームの状態

  • OK:正常値
  • ALARM:異常値
  • INSUFFICIENT DATA:判定不能

EventBridgeでCloudWatch Alarmのイベントを取り扱う例

  • CloudWatch Alarmのステータス変化がEventBridgeで取得可能
  • CloudWatch Alarmの機能では送信先としてEC2、SNS、AutoScaling、Systems Managerのみが選択可能
  • EventBridgeを介せばAlarmのイベントが実装なしで様々なサービスに連携可能

CloudWatch Metrics streams

  • KinesisData Firehoseやサードパーティへ送信

ログ

収集方法

  • エージェントやログドライバー・サイドカー等(EC2、Fargate)
  • CloudWatch Logsに統合されたマネージドサービス(CloudTrail、Lambda,RDS、VPC Flow Log)
  • 設定によりCloudWatch Logsに追加でログ発行するサービス(API GW,Step Functions,Route53クエリログ)

仕組み

  • ログイベント
    1つのログエントリ、アクティビティのレコード、タイムスタンプとメッセージ
  • ログストリーム
    同じソースの一連のログイベント、タイムスタンプ順でイベントを表す
  • ロググループ
    複数のログストリームで構成され、保持・監視・アクセス制御で同じ設定を共有してグループ化

CloudWatch Logs Insights

  • 専用のクエリ言語
  • 時系列データの可視化し、ここのログイベントへのドリルダウンが可能

統合CloudWatchエージェント

  • CloudWatch Logs/Metrics双方に対応しているエージェント
  • クラウドでもオンプレミスでも利用可能
  • Linux,Windowsの両方で稼働
  • 以前のCloudWatch Logs エージェントは非推奨

インストール方法

  • インストール方法として、CLI、SSM、IaCなどを利用可能

SSMでの導入

  • SSM AgentはAWSオフィシャルイメージには導入済み、それ以外はインストール
  • SSM ParameterStoreへ設定ファイルを格納
  • RunCommandで統合CloudWatchエージェントを一括インストール
  • RunCommandでParameterStoreの設定を一括ロード

オンプレミスと閉域網接続の場合

  • SSMとCloudWatchの各エージェントが通信するサービスエンドポイントへの経路をVPC endpointで構成
  • Route53 Resolverでの名前解決

VPC Endpoint

サービスごとに使い分けが必要

VPC Endpoint
com.amazonaws.region.monitoring CloudWatch
com.amazonaws.region.evidently CloudWatch Evidentlyサービス通信
com.amazonaws.region.evidently-dataplane CloudWatch Evidently管理通信
com.amazonaws.region.rum CloudWatch RUMサービス通信
com.amazonaws.region.rum-dataplane CloudWatch RUMM管理通信
com.amazonaws.region.synthetics CloudWatch Synthetics
com.amazonaws.region.events EventBridge
com.amazonaws.region.logs CloudWatch Logs

※SSM、EC2、S3などもエンドポイントが必要

awslogsログドライバー

  • コンテナ化されたアプリケーションログをCloudWatch Logsに送信
  • タスク定義にlogConfigurationパラメータを追加するだけで有効化が可能
  • ECS on EC2、ECS on Fargateのいずれでも利用可能

ECS対応FireLens

  • Fluentd / FluentBitを利用した柔軟なログルーティング

EKS on Fargate対応FireLens

  • FluentBitをベースにした組み込みのログルーター

ログからメトリクスを抽出

CloudWatch Logsメトリクスフィルタ

CloudWatch Logsに集めた後、ロググループ単位で分析し、通知に活用

  • ログデータから特定の文字列のフィルタリングが可能
  • フィルターとパターンの構文で指定できる範囲内で文字列フィルターが可能
  • 特定文字列のエントリ頻度等によりアラーム作成、SNS連携が可能

CloudWatch Embedded Metrics Format(EMF)

ログ出力時に埋め込み分析に活用

  • 複雑なアプリケーションデータをログ形式で取り込み、実用的なメトリクス生成
  • カスタムメトリクスかをログから自動的に抽出
  • クライアントライブラリを使用してEMF形式のログを生成(手動も可能)
  • ADOTにもEMF Exporterがあり対応

ログデータエクスポート

CloudWatch LogsメトリクスフィルタAmazon S3へのログデータのエクスポート

  • コンソールかAWS CLIで設定可能
  • エクスポートするデータの期間、バケット、プレフィックスの指定
  • エクスポートするまで最大12時間かかる場合がある

CloudWatch Logsサブスクリプションフィルタ

  • AWS CLIからのみ設定可能
  • Kinesis Data Streams/Firehose/Lambdaへ転送可能
  • 1つのロググループにつき、2つのサブスクリプションフィルタを設定可能

アカウント横断の監視

  • メトリクスとログは追加料金なし
  • トレースは1つの監視アカウントでの利用は追加料金なし
  • 全商用リージョンで利用可能