Amazon-CloudWatch

CloudWatch LogsでApacheのアクセスログにメトリクスフィルターを設定してみた

はじめに

こんにちは、ディーネットの山田です。

CloudWatch Logsを案件対応で利用しているのですが、メトリクスフィルターを設定する機会があったので、記事にしてみました。

CloudWatch Logs メトリクスフィルターとは

一言で言うと、「ログデータに対してフィルターを設定し、数値に変換してCloudWatchメトリクスとして送信する機能」です。
この機能により、ログに含まれる特定の文字列やパターンをカウントしたり、ログから数値を抽出してメトリクスとして可視化・監視することができます。

CloudWatch Logs メトリクスフィルターとは

実際に設定してみた

今回は、Apacheのアクセスログから、正常なリクエスト(ステータスコードが200応答)のレスポンス時間を抽出して、メトリクス化してみます。

Apacheのアクセスログについて

  • Apacheのアクセスログ形式は、以下の通りで設定しています。
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combinedD

各フィールドの詳細

フィールド 説明
%a リモートIPアドレス - クライアントのIPアドレス 192.168.1.100
%l リモートログ名 - identdによるリモートログ名(通常は- -
%u 認証ユーザー名 - HTTP認証で認証されたユーザー名(通常は- -
%t タイムスタンプ - リクエストを受信した時刻 [30/Jul/2025:09:59:36 +0900]
%r リクエストライン - HTTPメソッド、URI、プロトコルバージョン GET / HTTP/1.1
%>s ステータスコード - 最終的なHTTPレスポンスステータス 200
%b レスポンスサイズ - レスポンスボディのバイト数(ヘッダー除く) 8
%{Referer}i リファラー - リクエスト元のURL http://192.168.1.50/
%{User-Agent}i ユーザーエージェント - クライアントのブラウザ情報 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
%D 処理時間 - リクエスト処理にかかった時間(マイクロ秒) 15003628
  • 続いて実際のアクセスログは、以下のように出力されたものを対象にしています。
192.168.1.100 - - [30/Jul/2025:09:59:36 +0900] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 4093
192.168.1.100 - - [30/Jul/2025:09:59:37 +0900] "GET /favicon.ico HTTP/1.1" 404 196 "http://192.168.1.50/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 237
192.168.1.100 - - [30/Jul/2025:09:59:50 +0900] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 3186
192.168.1.100 - - [30/Jul/2025:09:59:51 +0900] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 525
192.168.1.100 - - [30/Jul/2025:09:59:51 +0900] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 476
192.168.1.100 - - [30/Jul/2025:09:59:51 +0900] "GET / HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 512
192.168.1.100 - - [30/Jul/2025:10:00:00 +0900] "GET /sleep.php HTTP/1.1" 200 6 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 15003628
192.168.1.100 - - [30/Jul/2025:10:00:10 +0900] "-" 408 - "-" "-" 22

CloudWatch Logs のメトリクスフィルターについて

  • フィルターパターン
[ip, user, remote_user, timestamp, request, status_code="200", response_size, referer, user_agent, response_time]
  • メトリクス名
ApacheResponseTime200
  • メトリクス値
$response_time

この設定によって、ステータスコードが200のリクエストのみを対象として、CloudWatchのカスタムメトリクスにレスポンス時間が記録されます。

AWSマネジメントコンソールでの設定手順

  1. CloudWatch Logs のコンソールを開いて対象の「ロググループ」を開きます。

  1. 「メトリクスフィルター」から「フィルターパターン」を作成します。

  1. テストパターンを使って想定されるログデータがマッチングすることを確認します。

  1. 「フィルター名」、「メトリクス」を設定します。

CloudWatch でのメトリクス表示

  • メトリクスフィルターで生成されたカスタムメトリクスをグラフで表示すると以下のようになります。

まとめ

  • CloudWatch Logs のメトリクスフィルターは、ログデータから数値を作成し、モニタリングに必要なメトリクスデータを作成することができます。
  • 実際のログデータから、レスポンス時間に関するKPIを設けてそれをCloudWatchアラームで監視設定やダッシュボードを設けることでシステムの健全性を分析することもできます。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA