複数のWordPressをkusanagiで管理しているとアクセスログのチェックが面倒です。外部からありえないほどの連続アタックを受けて負荷が上がるとすべてのWordPressのログをチェックする必要がでてきます。
そういう時配下のコマンド。kusanagi内のログを全てチェックしアクセスの多いIPから順に表示してくれます。
CUTOFF=$(date -d '5 minutes ago' +%s)
( for f in /home/kusanagi/*/log/httpd/{access,ssl_access}.log{,.1,.1.gz}; do
[ -r "$f" ] || continue
case "$f" in *.gz) zcat -f -- "$f";; *) cat -- "$f";; esac
done ) \
| awk -v cutoff="$CUTOFF" -v excl='^(153[.]120[.]6[.]98|127[.]0[.]0[.]1)$' '
BEGIN{ split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m," ");for(i=1;i<=12;i++)mon[m[i]]=i }
{
if (match($0, /\[([0-9]{2})\/([A-Za-z]{3})\/([0-9]{4}):([0-9]{2}):([0-9]{2}):([0-9]{2})/, t)) {
epoch=mktime(sprintf("%04d %02d %02d %02d %02d %02d", t[3]+0, mon[t[2]], t[1]+0, t[4]+0, t[5]+0, t[6]+0))
if (epoch>=cutoff) {
lb=index($0,"["); left=(lb>1?substr($0,1,lb-1):$0)
if (match(left,/([0-9]{1,3}(\.[0-9]{1,3}){3})/,ip)) {
ipstr=ip[1]
if (ipstr !~ excl) print ipstr
}
}
}
}' | sort | uniq -c | sort -nr | head