apacheのアクセスログを分単位・秒単位に件数を集計
ぱっと、アクセスログの集計をしたい際に出すコマンド
- まずアクセスログを確認
$ cat /var/log/httpd/access_log | tail
==========
...
192.168.XX.XX - - [02/Sep/2020:23:34:59 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:34:59 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:34:59 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
192.168.XX.XX - - [02/Sep/2020:23:35:00 +0900] "GET /index.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
...
==========
分間のアクセスログを集計
- コマンド
cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3 -d':' | grep '23:' | uniq -c
==========
5 23:31
122 23:32
1 23:33
162 23:34
8 23:35
39 23:45
1 23:46
↑ ↑
件数 時間
==========
cut -f4 -d' '
$ cat /var/log/httpd/access_log | cut -f4 -d' '
[02/Sep/2020:23:35:00
[02/Sep/2020:23:35:41
[02/Sep/2020:23:45:40
[02/Sep/2020:23:45:41
[02/Sep/2020:23:45:41
[02/Sep/2020:23:45:41
[02/Sep/2020:23:45:41
cut -f4 -d' '
-f : 切り出す位置を(デフォルト)タグ区切りのフィールドで指定
-d : 区切り文字
区切り文字をスペース( )を指定 → -d' '
切り出す位置は④番目 → -f4
==========
①192.168.XX.XX ②- ③- ④[02/Sep/2020:23:35:00 +0900] ⑤"GET ⑥/index.html.....
==========
cut -f3 -d'/'
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/'
2020:23:35:00
2020:23:35:41
2020:23:45:40
2020:23:45:41
2020:23:45:41
2020:23:45:41
2020:23:45:41
cut -f3 -d'/'
-f : 切り出す位置を(デフォルト)タグ区切りのフィールドで指定
-d : 区切り文字
区切り文字を/を指定 → -d'/'
切り出す位置は③番目 → -f3
==========
①[02/②Sep/③2020:23:35:00 +0900]
==========
cut -f2,3 -d':'
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3 -d':'
23:35
23:45
23:45
23:45
23:45
23:45
23:45
23:45
cut -f2,3 -d':'
-f : 切り出す位置を(デフォルト)タグ区切りのフィールドで指定
-d : 区切り文字
区切り文字を:を指定 → -d':'
切り出す位置は②番目(時)と③番目(分) → -f2,3
==========
①2020:②23:③35:④00 +0900]
==========
grep '23:'
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3 -d':' | grep '23:'
23:35
23:45
23:45
23:45
23:45
23:45
23:45
23:45
grep '23:'
特定の文字列が含まれている行を表示する
もし、アクセスログに24:05などが含んでいた場合に23時台のみ、抽出するため。
uniq -c
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3 -d':' | grep '23:' | uniq -c
5 23:31
122 23:32
1 23:33
162 23:34
8 23:35
39 23:45
1 23:46
uniq -c
重複している行を取り除くコマンド
-c : 各行数の前に出現回数を出力
出現回数を出力することで、アクセスログの件数を表示することができる
秒間のアクセスログを集計
- コマンド
cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3,4 -d':' | grep '23:' | uniq -c
==========
6 23:34:54
6 23:34:55
5 23:34:56
7 23:34:57
6 23:34:58
7 23:34:59
7 23:35:00
1 23:35:41
1 23:45:40
5 23:45:41
5 23:45:42
6 23:45:43
5 23:45:44
6 23:45:45
7 23:45:46
4 23:45:47
1 23:46:32
↑ ↑
件数 時間
==========
cut -f4 -d' '
$ cat /var/log/httpd/access_log | cut -f4 -d' '
[02/Sep/2020:23:35:00
[02/Sep/2020:23:35:41
[02/Sep/2020:23:45:40
[02/Sep/2020:23:45:41
[02/Sep/2020:23:45:41
[02/Sep/2020:23:45:41
[02/Sep/2020:23:45:41
cut -f4 -d' '
-f : 切り出す位置を(デフォルト)タグ区切りのフィールドで指定
-d : 区切り文字
区切り文字をスペース( )を指定 → -d' '
切り出す位置は④番目 → -f4
==========
①192.168.XX.XX ②- ③- ④[02/Sep/2020:23:35:00 +0900] ⑤"GET ⑥/index.html.....
==========
cut -f3 -d'/'
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/'
2020:23:35:00
2020:23:35:41
2020:23:45:40
2020:23:45:41
2020:23:45:41
2020:23:45:41
2020:23:45:41
cut -f3 -d'/'
-f : 切り出す位置を(デフォルト)タグ区切りのフィールドで指定
-d : 区切り文字
区切り文字を/を指定 → -d'/'
切り出す位置は③番目 → -f3
==========
①[02/②Sep/③2020:23:35:00 +0900]
==========
cut -f2,3,4 -d':'
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3,4 -d':'
23:35:41
23:45:40
23:45:41
23:45:41
23:45:41
23:45:41
23:45:41
23:45:42
23:45:42
cut -f2,3,4 -d':'
-f : 切り出す位置を(デフォルト)タグ区切りのフィールドで指定
-d : 区切り文字
区切り文字を:を指定 → -d':'
切り出す位置は②番目(時)と③番目(分)と④番目(秒) → -f2,3,4
==========
①2020:②23:③35:④00
==========
grep '23:'
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3,4 -d':' | grep '23:'
23:35:41
23:45:40
23:45:41
23:45:41
23:45:41
23:45:41
23:45:41
23:45:42
23:45:42
grep '23:'
特定の文字列が含まれている行を表示する
もし、アクセスログに24:05などが含んでいた場合に23時台のみ、抽出するため。
uniq -c
$ cat /var/log/httpd/access_log | cut -f4 -d' ' | cut -f3 -d'/' | cut -f2,3,4 -d':' | grep '23:' | uniq -c
7 23:35:00
1 23:35:41
1 23:45:40
5 23:45:41
5 23:45:42
6 23:45:43
5 23:45:44
6 23:45:45
uniq -c
重複している行を取り除くコマンド
-c : 各行数の前に出現回数を出力
出現回数を出力することで、アクセスログの件数を秒ごとに表示することができる