Amazon CloudWatch
モニタリング・オブザーバビリティ
オブザーバビリティ(可観測性)
- システムで何がなぜ起こっているかといった動作状況を把握できている状態のこと
- システムがどのように動作しているかを理解することで、運用上の優秀性・ビジネス目標を達成することにも役立つ
- モニタリングとの違いについては明確な定義がないが、監視はエラーに対応するために検知することが目的としていることのみを指すことが多い
システムの状態把握に必要な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
- 静的閾値に基づくアラーム
- Metrics Insightsクエリに基づくCloudWatchアラーム
- CloudWatch異常検知にもどついたアラーム
- 複合アラーム
メトリクスアラームの状態
- 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つの監視アカウントでの利用は追加料金なし
- 全商用リージョンで利用可能