Amazon CloudWatchは、AWSリソースとアプリケーションのモニタリングと可観測性のためのサービスです。CloudWatchを使用することで、メトリクスの収集と追跡、ログファイルの収集と監視、アラームの設定、AWSリソースの変更への自動対応が可能になります。CloudWatchは、EC2インスタンス、RDSデータベースインスタンス、DynamoDBテーブルなどのAWSリソースだけでなく、アプリケーションが生成するカスタムメトリクスやログも監視できます。
CloudWatchは、以下の主要なコンポーネントで構成されています:
メトリクスは、CloudWatchの基本的な概念で、時系列データポイントの順序付けられたセットです。メトリクスは、モニタリング対象のリソースの変数(CPU使用率、ネットワークトラフィックなど)を表します。
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--start-time 2023-08-04T00:00:00Z \
--end-time 2023-08-05T00:00:00Z \
--period 3600 \
--statistics Average Maximum
CloudWatch Logsは、ログファイルを収集、監視、分析、保存するためのサービスです。EC2インスタンス、Lambda関数、その他のソースからのログを一元管理できます。
aws logs create-log-group --log-group-name my-log-group
aws logs get-log-events \
--log-group-name my-log-group \
--log-stream-name my-log-stream
CloudWatchアラームは、指定したメトリクスを監視し、しきい値を超えた場合に通知を送信したりアクションを実行したりします。
aws cloudwatch put-metric-alarm \
--alarm-name cpu-high \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 2 \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--period 300 \
--statistic Average \
--threshold 80 \
--alarm-actions arn:aws:sns:us-west-2:123456789012:my-topic \
--dimensions "Name=InstanceId,Value=i-1234567890abcdef0"
CloudWatchダッシュボードは、カスタマイズ可能なホームページで、複数のリージョンにまたがるリソースのメトリクスとアラームを一元的に表示できます。
aws cloudwatch put-dashboard \
--dashboard-name my-dashboard \
--dashboard-body '{"widgets":[{"type":"metric","x":0,"y":0,"width":12,"height":6,"properties":{"metrics":[["AWS/EC2","CPUUtilization","InstanceId","i-1234567890abcdef0"]],"period":300,"stat":"Average","region":"us-west-2","title":"EC2 Instance CPU"}}]}'
CloudWatch Events(現在はAmazon EventBridgeとして知られています)は、AWSリソースの変更に対応するルールを設定するためのサービスです。イベントが発生したときに、Lambda関数の呼び出し、SNSトピックへのメッセージの送信、その他のアクションを実行できます。
aws events put-rule \
--name my-rule \
--event-pattern '{"source":["aws.ec2"],"detail-type":["EC2 Instance State-change Notification"],"detail":{"state":["running"]}}'
aws events put-targets \
--rule my-rule \
--targets "Id"="1","Arn"="arn:aws:lambda:us-west-2:123456789012:function:my-function"
CloudWatchは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。
CloudWatchコンソールでは、メトリクスをグラフ化して視覚的に監視できます。また、AWS CLIやSDKを使用してプログラムでメトリクスにアクセスすることもできます。
aws cloudwatch list-metrics --namespace AWS/EC2
CloudWatchでは、独自のカスタムメトリクスを作成して、アプリケーション固有のデータを監視できます。
aws cloudwatch put-metric-data \
--namespace MyApplication \
--metric-name RequestCount \
--value 42 \
--dimensions Service=MyService,Region=us-west-2
CloudWatch Logsを使用して、ログファイルを収集、監視、分析できます。CloudWatch Logs Insightsを使用すると、ログデータをクエリして分析することができます。
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20
CloudWatchアラームを設定して、メトリクスがしきい値を超えたときに通知を受け取ったりアクションを実行したりできます。
aws cloudwatch put-metric-alarm \
--alarm-name high-cpu-alarm \
--alarm-description "Alarm when CPU exceeds 80%" \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 300 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--evaluation-periods 2 \
--alarm-actions arn:aws:sns:us-west-2:123456789012:my-topic
CloudWatchダッシュボードを作成して、重要なメトリクスとアラームを一元的に表示できます。
aws cloudwatch put-dashboard \
--dashboard-name my-dashboard \
--dashboard-body file://dashboard-body.json
dashboard-body.jsonの例:
{
"widgets": [
{
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties": {
"metrics": [
[ "AWS/EC2", "CPUUtilization", "InstanceId", "i-1234567890abcdef0" ]
],
"period": 300,
"stat": "Average",
"region": "us-west-2",
"title": "EC2 Instance CPU"
}
}
]
}
CloudWatch Insightsは、運用データの自動分析によるパターンの検出と異常の特定を支援する機能です。
Container Insightsは、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集約、要約します。Amazon ECS、Amazon EKS、Kubernetes on EC2、Fargateをサポートしています。
aws ecs update-cluster-settings \
--cluster my-cluster \
--settings name=containerInsights,value=enabled
Lambda Insightsは、AWS Lambda関数のパフォーマンスモニタリングと問題のトラブルシューティングを支援する機能です。CPU時間、メモリ、ディスク、ネットワークなどのシステムレベルのメトリクスを収集します。
aws lambda update-function-configuration \
--function-name my-function \
--layers arn:aws:lambda:us-west-2:580247275435:layer:LambdaInsightsExtension:14
Logs Insightsは、CloudWatch Logsのログデータをクエリして分析するためのツールです。シンプルで強力なクエリ言語を使用して、ログデータから有用な情報を抽出できます。
# エラーログの検索
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20
# HTTPステータスコード別のカウント
fields @timestamp, status
| stats count(*) as count by status
| sort count desc
Syntheticsは、エンドポイントとAPIをモニタリングするカナリアを作成するための機能です。カナリアは、スケジュールに従って実行されるスクリプトで、エンドポイントやAPIの可用性とレイテンシーを監視します。
aws synthetics create-canary \
--name my-canary \
--artifact-s3-location s3://my-bucket/canary/artifacts \
--execution-role-arn arn:aws:iam::123456789012:role/my-canary-role \
--schedule "rate(5 minutes)" \
--run-config '{"timeoutInSeconds":60,"memoryInMB":1024,"activeTracing":true}' \
--code '{"handler":"index.handler","s3Bucket":"my-bucket","s3Key":"canary/code.zip"}' \
--success-retention-period 30 \
--failure-retention-period 30
CloudWatchのセキュリティを確保するためのベストプラクティス:
aws logs associate-kms-key \
--log-group-name my-log-group \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/abcdef12-3456-7890-abcd-ef1234567890
CloudWatchの料金は、以下の要素に基づいています:
詳細な料金情報は、Amazon CloudWatch料金ページを参照してください。
CloudWatchは以下のようなユースケースに適しています:
CloudWatchは他のAWSサービスと統合して、より強力なモニタリングと可観測性のソリューションを構築できます:
サービス | 統合の利点 |
---|---|
Amazon EC2 | インスタンスのCPU使用率、ディスクI/O、ネットワークトラフィックなどを監視 |
Amazon RDS | データベースインスタンスのCPU使用率、空きメモリ、接続数などを監視 |
Amazon DynamoDB | テーブルのスループット、レイテンシー、エラーなどを監視 |
AWS Lambda | 関数の呼び出し回数、実行時間、エラーなどを監視 |
Amazon SNS | アラームの通知を送信 |
AWS Auto Scaling | メトリクスに基づいてリソースを自動的にスケール |
AWS CloudTrail | APIコールを記録して監査 |
Amazon EventBridge | イベントに基づいてアクションを実行 |
AWS X-Ray | アプリケーションのトレースデータを収集して分析 |
Amazon CloudWatchは、AWSリソースとアプリケーションのモニタリングと可観測性のための包括的なサービスです。メトリクスの収集と追跡、ログファイルの収集と監視、アラームの設定、AWSリソースの変更への自動対応など、幅広い機能を提供します。
CloudWatchの主な利点は以下の通りです:
CloudWatchを効果的に活用するには、監視するリソースとアプリケーションに適したメトリクスの選択、適切なアラームしきい値の設定、ダッシュボードの整理、ログの構造化、カスタムメトリクスの活用などのベストプラクティスを実践することが重要です。また、CloudWatch EventsとLambdaを組み合わせて自動修復を実装することで、運用効率を向上させることができます。