AWSに戻る

Amazon CloudWatch

Amazon CloudWatchとは

Amazon CloudWatchは、AWSリソースとアプリケーションのモニタリングと可観測性のためのサービスです。CloudWatchを使用することで、メトリクスの収集と追跡、ログファイルの収集と監視、アラームの設定、AWSリソースの変更への自動対応が可能になります。CloudWatchは、EC2インスタンス、RDSデータベースインスタンス、DynamoDBテーブルなどのAWSリソースだけでなく、アプリケーションが生成するカスタムメトリクスやログも監視できます。

Amazon CloudWatchの主な特徴

Amazon CloudWatchのコンポーネント

CloudWatchは、以下の主要なコンポーネントで構成されています:

CloudWatch メトリクス

メトリクスは、CloudWatchの基本的な概念で、時系列データポイントの順序付けられたセットです。メトリクスは、モニタリング対象のリソースの変数(CPU使用率、ネットワークトラフィックなど)を表します。

メトリクスの主な特徴

AWS CLIを使用したメトリクスの取得

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

CloudWatch Logsは、ログファイルを収集、監視、分析、保存するためのサービスです。EC2インスタンス、Lambda関数、その他のソースからのログを一元管理できます。

CloudWatch Logsの主な概念

AWS CLIを使用したロググループの作成

aws logs create-log-group --log-group-name my-log-group

AWS CLIを使用したログイベントの取得

aws logs get-log-events \
    --log-group-name my-log-group \
    --log-stream-name my-log-stream

CloudWatch アラーム

CloudWatchアラームは、指定したメトリクスを監視し、しきい値を超えた場合に通知を送信したりアクションを実行したりします。

アラームの主な特徴

AWS CLIを使用したアラームの作成

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 ダッシュボード

CloudWatchダッシュボードは、カスタマイズ可能なホームページで、複数のリージョンにまたがるリソースのメトリクスとアラームを一元的に表示できます。

AWS CLIを使用したダッシュボードの作成

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)

CloudWatch Events(現在はAmazon EventBridgeとして知られています)は、AWSリソースの変更に対応するルールを設定するためのサービスです。イベントが発生したときに、Lambda関数の呼び出し、SNSトピックへのメッセージの送信、その他のアクションを実行できます。

AWS CLIを使用したイベントルールの作成

aws events put-rule \
    --name my-rule \
    --event-pattern '{"source":["aws.ec2"],"detail-type":["EC2 Instance State-change Notification"],"detail":{"state":["running"]}}'

AWS CLIを使用したイベントターゲットの追加

aws events put-targets \
    --rule my-rule \
    --targets "Id"="1","Arn"="arn:aws:lambda:us-west-2:123456789012:function:my-function"

Amazon CloudWatchの使用方法

CloudWatchは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。

メトリクスの監視

CloudWatchコンソールでは、メトリクスをグラフ化して視覚的に監視できます。また、AWS CLIやSDKを使用してプログラムでメトリクスにアクセスすることもできます。

AWS CLIを使用したメトリクスの一覧表示

aws cloudwatch list-metrics --namespace AWS/EC2

カスタムメトリクスの作成

CloudWatchでは、独自のカスタムメトリクスを作成して、アプリケーション固有のデータを監視できます。

AWS CLIを使用したカスタムメトリクスの作成

aws cloudwatch put-metric-data \
    --namespace MyApplication \
    --metric-name RequestCount \
    --value 42 \
    --dimensions Service=MyService,Region=us-west-2

ログの監視と分析

CloudWatch Logsを使用して、ログファイルを収集、監視、分析できます。CloudWatch Logs Insightsを使用すると、ログデータをクエリして分析することができます。

CloudWatch Logs Insightsクエリの例

fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20

アラームの設定

CloudWatchアラームを設定して、メトリクスがしきい値を超えたときに通知を受け取ったりアクションを実行したりできます。

AWS CLIを使用したアラームの作成

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 CLIを使用したダッシュボードの作成

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"
      }
    }
  ]
}

Amazon CloudWatch Insights

CloudWatch Insightsは、運用データの自動分析によるパターンの検出と異常の特定を支援する機能です。

CloudWatch Container Insights

Container Insightsは、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集約、要約します。Amazon ECS、Amazon EKS、Kubernetes on EC2、Fargateをサポートしています。

AWS CLIを使用したContainer Insightsの有効化(Amazon ECS)

aws ecs update-cluster-settings \
    --cluster my-cluster \
    --settings name=containerInsights,value=enabled

CloudWatch Lambda Insights

Lambda Insightsは、AWS Lambda関数のパフォーマンスモニタリングと問題のトラブルシューティングを支援する機能です。CPU時間、メモリ、ディスク、ネットワークなどのシステムレベルのメトリクスを収集します。

AWS CLIを使用したLambda Insightsの有効化

aws lambda update-function-configuration \
    --function-name my-function \
    --layers arn:aws:lambda:us-west-2:580247275435:layer:LambdaInsightsExtension:14

CloudWatch Logs Insights

Logs Insightsは、CloudWatch Logsのログデータをクエリして分析するためのツールです。シンプルで強力なクエリ言語を使用して、ログデータから有用な情報を抽出できます。

Logs Insightsクエリの例

# エラーログの検索
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

CloudWatch Synthetics

Syntheticsは、エンドポイントとAPIをモニタリングするカナリアを作成するための機能です。カナリアは、スケジュールに従って実行されるスクリプトで、エンドポイントやAPIの可用性とレイテンシーを監視します。

AWS CLIを使用したSyntheticsカナリアの作成

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

Amazon CloudWatchのセキュリティ

CloudWatchのセキュリティを確保するためのベストプラクティス:

CloudWatch Logsの暗号化の有効化

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

Amazon CloudWatchの料金

CloudWatchの料金は、以下の要素に基づいています:

詳細な料金情報は、Amazon CloudWatch料金ページを参照してください。

Amazon CloudWatchのユースケース

CloudWatchは以下のようなユースケースに適しています:

Amazon 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のベストプラクティス

まとめ

Amazon CloudWatchは、AWSリソースとアプリケーションのモニタリングと可観測性のための包括的なサービスです。メトリクスの収集と追跡、ログファイルの収集と監視、アラームの設定、AWSリソースの変更への自動対応など、幅広い機能を提供します。

CloudWatchの主な利点は以下の通りです:

CloudWatchを効果的に活用するには、監視するリソースとアプリケーションに適したメトリクスの選択、適切なアラームしきい値の設定、ダッシュボードの整理、ログの構造化、カスタムメトリクスの活用などのベストプラクティスを実践することが重要です。また、CloudWatch EventsとLambdaを組み合わせて自動修復を実装することで、運用効率を向上させることができます。