Linuxでアクセスログを集計するコマンドについて紹介していきます!
【Linux】アクセスログを集計するコマンド集
アクセスログを集計するコマンドを場合別に分けて紹介していきます。アクセスログのフォーマットとしては、以下のような形式を想定しています。
access_log
example.com 192.0.2.0 - - [14/May/2022:12:09:17 +0900] "GET /?action=hoge HTTP/1.0" 200 2602 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"
ログ出力内容
バーチャルホスト IPアドレス クライアントユーザー名 認証ユーザー名 タイムスタンプ メソッド(URI+QUERY_STRING) ステータス 転送量 アクセス元URL ユーザーエージェント
日別のアクセス数を集計したい場合
$ cat access_log | awk {'print $5'} | cut -b 2-12 | sort | uniq -c
4080 14/May/2022
347 15/May/2022
(以下省略)
awk {'print $5'}
- 5列目のタイムスタンプを表示する。今回のフォーマットだと「[14/May/2022:12:09:17」部分が表示される
cut -b 2-12
- 切り出す位置のリストをバイト数で指定するbオプションを指定し、2バイト目から12バイト目までをcutする。今回のフォーマットだと「14/May/2022」部分が切り出される
sort
- パイプで渡された結果を時間順で並び替えている
uniq -c
- uniqコマンドで重複する行を削除して、cオプションで重複した行数も表示させる
時間別のアクセス数を集計したい場合
$ cat access_log | awk {'print $5'} | cut -b 2-15 | sort | uniq -c
145 14/May/2022:03
63 14/May/2022:04
89 14/May/2022:05
154 14/May/2022:06
(以下省略)
cut -b 2-15
- 切り出す位置のリストをバイト数で指定するbオプションを指定し、2バイト目から15バイト目までをcutする。今回のフォーマットだと「14/May/2022:03」部分が切り出される
分別のアクセス数を集計したい場合
$ cat access_log | awk {'print $5'} | cut -b 2-18 | sort | uniq -c
32 14/May/2022:03:44
2 14/May/2022:03:46
2 14/May/2022:03:47
2 14/May/2022:03:49
(以下省略)
cut -b 2-18
- 切り出す位置のリストをバイト数で指定するbオプションを指定し、2バイト目から18バイト目までをcutする。今回のフォーマットだと「14/May/2022:03:44」部分が切り出される
秒別のアクセス数を集計したい場合
$ cat access_log | awk {'print $5'} | cut -b 2-21 | sort | uniq -c
2 14/May/2022:03:44:23
1 14/May/2022:03:44:24
1 14/May/2022:03:44:25
1 14/May/2022:03:44:26
(以下省略)
cut -b 2-21
- 切り出す位置のリストをバイト数で指定するbオプションを指定し、2バイト目から21バイト目までをcutする。今回のフォーマットだと「14/May/2022:03:44:23」部分が切り出される
特定のキーワードを除外して集計を行いたい場合
$ cat access_log | grep -v "Zabbix" | awk {'print $5'} | cut -b 2-12 | sort | uniq -c
3812 14/May/2022
333 15/May/2022
(以下省略)
grep -v "Zabbix"
- grepコマンドのvオプションで、”Zabbix”にマッチしない行を表示して、集計を行います
IPアドレスごとのアクセス数を集計したい場合
$ cat access_log | awk {'print $2'} | uniq -c
23 103.140.113.234
36 104.174.175.235
(以下省略)
awk {'print $2'}
- 2列目のタイムスタンプを表示する。今回のフォーマットだと「192.0.2.0」部分が表示される
コメント