Linuxサーバ管理:apacheログを集計する
Jenkinsジョブにした理由はサーバが55台もあるから一台ずつ入ってコマンド打つのが面倒だからです。
sshでログインするユーザのkeyはすでに各サーバに配置済みの状態を前提条件とします。
実際の中身は以下のようになります。
LIST=/usr/local/temp/server.listCOMMAND="zgrep -v 200 /usr/local/nginx/logs/access.log_20121028* | grep -v 304 | awk '{print $7,$9;}' | sort | uniq -c"sed -e "s/#.*//" -e "s/^s*$//" $LIST | while read i; do echo "#### run command -> $i ####" ssh -o 'StrictHostKeyChecking=no' -2 -n user@$i $COMMANDdone今回勉強になった部分をメモります。
grep -vオプションは含めたくない文字列を指定できます。今回は200と304は正常ステタスコードなのでそれ意外を表示するようにしました。
awk awk '{print \$7,\$9;}'はnginxのアクセスログのurlとステタスコードを出力する意味です。
sortはその意味通り結果をソートするコマンドです。
uniq -cは重複しない行をカウントするコマンドです。
結果は以下のようになります。
9 /test.png 404
3 /robots.txt 403
220 400 "-"