Webサーバのアクセス解析をワンライナーで

プログラミング
この記事は約2分で読めます。
記事内に広告が含まれます。

解析ツールを入れるまでもなくアクセス数を調べるにはAWKなどで集計するのが手っ取り早い。
以下簡単な使い方のサンプルです。

ワンライナーサンプル

スポンサーリンク

awk形式

アクセス数の多いIPを探す

cat access.log | awk '{print $8}' | sort| uniq -c | sort -r -n | less

特定のIPのアクセスを切り出す
圧縮されている場合はzcatを使う

zcat access.log.1.gz | awk '$1 == "59.129.58.139" {print "IP="$1,",TIME="$4,$5, ",ADDR=http://www.XXXXXX.jp"$7 }' > log.txt

時間を指定して呼ばれたアドレスのカウント

cat access_log | awk '$4 ~ /18\/Jul\/2022:20:16/ { print substr($4,2,17), substr($7,2,match(substr($7,2),/\//)) }' | sort | uniq -c

awk使い方 †

パイプでつないでawkに渡す
awk ‘検索条件 {print $x}’
検索条件は$x ~ /正規表現/ が使えます
$xはx=0で全行,$1はスペースでスプリットした1件目となる

使用する関数の意味は以下の通りです。
sub(r,s,c): 文字列 $c$ (省略した場合は現在の入力行 $0) の、正規表現 $r$ に最初に マッチした部分を文字列 $s$ で置きかえる
gsub(r,s,c): 文字列 $c$ (省略した場合は現在の入力行 $0) の、正規表現 $r$ にマッチした全ての部分を文字列 $s$ で置きかえる
substr(s,n,len): 文字列 $s$ の $n$ 番目の文字から 始まる、長さ $len$ (省略した場合は $s$ の最後まで) の部分文字列を返す
index(s,c): 文字列 $s$ の中の{}最初の部分文字列 $c$ の 開始位置 ($s$ の何文字目か) を返す (含まれていなければ 0 を返す)
match(s,r): 文字列 $s$ の中の正規表現 $r$ にマッチする 部分の開始位置 ($s$ の何文字目か) を返す (含まれていなければ 0 を返す)

match() は、さらに暗黙の変数 RSTART と RLENGTH もセットし、それぞれ

RSTART = $r$ にマッチする部分の先頭位置
RLENGTH = $r$ にマッチする部分の長さ

コメント

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