【AWS基本の”キ”:vol6】CloudWatch Logsでサーバーログを可視化する方法

AWS CloudWatch Logsは、サーバーログやアプリケーションログを収集し、それらを簡単に可視化できるサービスです。この記事では、CloudWatch Logsを使用してサーバーログを可視化する方法を解説します。具体例として、EC2インスタンスからログを収集し、ダッシュボードでの可視化方法を紹介します。

CloudWatch Logsの基本

CloudWatch Logsは、以下のような機能を提供します。

  • サーバーやアプリケーションからログを収集
  • 保存したログの検索やフィルタリング
  • 可視化のためのグラフ作成

これにより、システム運用の効率化や問題解決の迅速化が可能になります。

必要な準備

1. IAMロールの設定

EC2インスタンスからCloudWatch Logsにデータを送信するには、適切なIAMロールを設定する必要があります。以下のポリシーを持つIAMロールを作成します。

  • CloudWatchAgentServerPolicy

2. CloudWatchエージェントのインストール

EC2インスタンスでログを収集するために、CloudWatchエージェントをインストールします。

sudo yum install -y amazon-cloudwatch-agent

CloudWatch Logsへのログ送信

1. CloudWatchエージェントの設定ファイルを作成

エージェントの設定ファイルを作成し、どのログを収集するかを定義します。以下は、例としてApacheサーバーログを収集する設定です。

{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/httpd/access_log",
            "log_group_name": "ApacheAccessLogs",
            "log_stream_name": "{instance_id}"
          },
          {
            "file_path": "/var/log/httpd/error_log",
            "log_group_name": "ApacheErrorLogs",
            "log_stream_name": "{instance_id}"
          }
        ]
      }
    }
  }
}

2. 設定ファイルを適用

設定ファイルをエージェントに適用します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -c file:/home/ssm-user/config.json \
  -s

サンプルでは手順1.でconfig.jsonという名前で、/home/ssm-user配下にエージェント設定ファイルを作成したので上記のようなコマンドを実行します。
-cオプションで指定するファイルの場所は設定ファイルを作成した場所に合わせて適宜変更してください。

3. ログの送信を確認

CloudWatchコンソールで、指定したロググループ (ApacheAccessLogsなど) が作成されているか確認します。

新しくロググループが作成されていました。

ログの可視化

1. クエリを使用したログの検索

CloudWatch Logs Insightsを使用して、ログデータをクエリで検索できます。例えば、特定のHTTPステータスコード (例: 403エラー) を検索するクエリは以下のようになります。

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

実際に作成されたロググループに対して上記のクエリを実行してみます。

403が含まれるログを抽出してくれました。

2. メトリクスフィルターの作成

ログデータから特定の条件に一致するエントリをメトリクスとして抽出するには、メトリクスフィルターを設定します。

例:エラー数をカウントするフィルター

  • フィルターパターン: [ip, identity, user, timestamp, request, status=4*, size]
  • メトリクス名前空間: ApacheLogs
  • メトリクス名: ErrorCount

実際にロググループ「ApacheAccessLogs」にメトリクスフィルターを設定してみます。
設定画面はこんな感じ。メトリクス値の入力も求められますが、こだわりがなければ「1」で良いでしょう。

以下画像のように、メトリクスフィルターの作成後、フィルターパターンを満たすログが出力されると、同時にカスタム名前空間のCloudWatchメトリクスも出力されているはずです。

3. ダッシュボードの作成

CloudWatchダッシュボードで、メトリクスを視覚化できます。メトリクスフィルターで作成したデータをグラフに追加し、リアルタイムで監視可能です。

CloudWatchのトップページからダッシュボードのページに移動し、ダッシュボードの作成をクリックします。

ダッシュボードの名前とウィジェットのタイプを指定し、先ほど出力されていたCloudWatchメトリクスを選択します。
すると、以下のようなダッシュボードが作成されると思います。

このように特定のログ出力に対して、メトリクスを出力させることで視覚的にログ監視をすることができます。
よく確認する監視メトリクスをダッシュボードに集約すれば日々の監視業務の負担を抑えることにも繋がりますね。

まとめ

CloudWatch Logsを活用することで、サーバーログの監視を効率的に行えます。さらに、CloudWatch Insightsやダッシュボードを活用することで、システムの状態をリアルタイムで把握し、迅速なトラブルシューティングが可能になります。ぜひ、実際に試して運用に活用してみてください。

コメント

タイトルとURLをコピーしました