現場実践|CloudWatch Logs運用

Amazon CloudWatch Logs実践ガイド|ログ収集・メトリクスフィルター・Insightsでの分析

「EC2のログをCloudWatchに集めたい」「ログから特定のエラーを検出してアラームを飛ばしたい」——CloudWatch Logsエージェントのセットアップ・メトリクスフィルター・Logs Insightsを使ったログ分析を解説します。

読了目安:約18分更新日:2026年4月

💡 ログ管理はインフラ運用の根幹。CloudWatch Logsを使えばEC2・Lambda・ECSの全てのログを一元管理・検索・分析できます。メトリクスフィルターで特定パターンのログをCloudWatchアラームと連携することも可能です。

この記事を書いた人
現役ITエンジニア・IT講師(経験14年)
CCNA・CCNP 取得LPIC-1 保有SES現場を複数経験

CloudWatch Logsを使ったログ管理・異常検知の仕組みを複数案件で構築してきた立場から解説します。

1. CloudWatch Unified Agentの設定例

// /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/nginx/access.log",
            "log_group_name": "/ec2/nginx/access",
            "log_stream_name": "{instance_id}",
            "retention_in_days": 30
          },
          {
            "file_path": "/var/log/app/application.log",
            "log_group_name": "/ec2/app/application",
            "log_stream_name": "{instance_id}",
            "retention_in_days": 30
          }
        ]
      }
    }
  }
}

2. メトリクスフィルターでエラー検出→アラーム(Terraform)

resource "aws_cloudwatch_log_metric_filter" "nginx_5xx" {
  name           = "nginx-5xx-errors"
  pattern        = "[host, ident, auth, timestamp, request, status_code=5*, ...]"
  log_group_name = "/ec2/nginx/access"
  metric_transformation {
    name      = "Nginx5xxCount"
    namespace = "Custom/Nginx"
    value     = "1"
  }
}

resource "aws_cloudwatch_metric_alarm" "nginx_5xx_alarm" {
  alarm_name          = "nginx-5xx-high"
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods  = 2
  metric_name         = "Nginx5xxCount"
  namespace           = "Custom/Nginx"
  period              = 60
  statistic           = "Sum"
  threshold           = 10
  alarm_actions       = [aws_sns_topic.alerts.arn]
}

3. CloudWatch Logs Insightsでのログ分析

// 遅いリクエストを分析
fields @timestamp, request_url, target_processing_time
| filter target_processing_time > 1.0
| sort target_processing_time desc
| limit 20

// エラーの時間帯別集計
filter @message like /ERROR/
| stats count() as error_count by bin(1h)
| sort bin desc

4. ログの保持期間とコスト管理

  • 保持期間を必ず設定する:CloudWatch Logsはデフォルトで無期限保存。ロググループごとに30日・90日等の保持期間を設定してコストを削減する
  • S3へのエクスポートで長期保存:90日を超える長期保存が必要なログはS3にエクスポートする
  • Contributor Insightsで上位の貢献者を分析:「最もエラーを出しているIPはどこか」「最も遅いAPIエンドポイントはどれか」を自動で上位表示する
📌 この記事のポイント
  • CloudWatch Unified AgentでEC2のNginx・アプリログをJSON設定で収集。IAMロールでアクセスキー不要
  • メトリクスフィルターでログの5XXパターン検出→CloudWatchアラームでSNS通知が自動化できる
  • Logs InsightsでSQLライクなクエリを使った遅いリクエスト・エラー時間帯分析が本番運用に有効

キャリアの疑問、一緒に解決しませんか?

Infra Academyでは、インフラ系ITエンジニアを目指す方への個別サポートを行っています。2026年7月からフリーランス講師として本格始動予定です。

※CloudWatch Logsの料金・機能はAWSにより変更される場合があります。

ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営