Apacheのアクセスログからステータスコード毎のアクセス数を集計する方法
目次
スポンサードリンク
Apacheのログ形式について
Apacheのアクセスログは以下のような形式で記録されています。アクセス元のIPアドレスに始まり、アクセス日次、リクエストメソッドとURL、ステータスコードなどが並びます。
66.XXX.XXX.XXX - - [23/Apr/2024:03:09:34 +0900] "GET /index.html HTTP/1.1" 200 8176 text/html "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.94 Mobile Safari/537.36 " 38567 11263
Apacheのログにステータスコードを記録する方法
ログの形式はApacheの設定ファイルで定めされており、LogFormat ディレクティブと呼ばれる項目で設定されています。デフォルトでは以下のような設定になっています。
LogFormat "%h %l %u %t \"%r\" %>s %b" commo
この中で ステータスコードを表すのは「%>s」の部分です。当記事では、このステータスコード毎にアクセス数を集計するコマンドを紹介します。
集計コマンドのサンプル
ステータスコード毎のアクセス数は以下コマンドで集計できます。
cat ssl_access_log | awk -F " " '{print $9}'| sort | uniq -c | sort -nr
まず、catコマンドで集計対象のアクセスログを標準出力に出力します。ログの内容を awk コマンドを使い、ステータスコードを表す列のみを抽出します。awk コマンドの -F オプションでは区切り文字を指定することができます。今回は半角スペースを「” “」で表現しています。半角スペースでログを区切り、先頭から9文字目を表示しています。実行してみると、以下のようにステータスコードのみ抽出した結果が表示されます。
[root@hostname logs]$ cat yamamoto-mfg.mvt.jp-access_log | awk -F " " '{print $9}'
200
200
200
200
200
404
404
404
404
302
302
404
200
200
さらに、sortコマンドとuniqコマンドを組み合わせて、ステータスコード毎に出現回数をカウントします。uniqコマンドは -c オプションで、行数をカウントすることができますが、事前に同じ内容は並び様、ソートしておく必要があるため、uniqコマンドの前にsortコマンドを実行しています。以下のような結果になります。
[root@hostname logs]$ cat ssl_access_log | awk -F " " '{print $9}'| sort | uniq -c | sort -nr
30 200
27 404
12 302
最後に、 sort コマンドに -nr オプションをつけて実行することで、出現回数の降順でソートして表示します。 awk -F “ “ ‘{print $9}’ の部分で、ステータスコードの列を指定しましたが、この部分の列数を変更することで、ステータスコード毎やコンテントタイプ毎に集計するなど応用が利きます。
ログ収集〜可視化について学べるおすすめ書籍
Webシステムの基礎について徹底的に学べるUdemy講座
【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎
Search
Recent Posts
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)
- .php以外の拡張子でPHPを動作させようとして発生したエラー「Got error 'Access to the script '/var/www/html/php.html' has been denied (see security.limit_extensions)'」の原因と対処方法