##combined Log形式の確認と設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
apache公式ドキュメント
https://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html
##エラーとなったアクセスを抜き出す
logファイルへ移動
$ cd /var/log/httpd/logs
error 404のエラーを抜き出す
$ grep "HTTP/1.1\" 404" access_log
出力個数を確認する時
$ grep "HTTP/1.1\" 404" access_log | wc -l
検索条件にマッチしないものを数える
$ grep "HTTP/1.1\" 404" access_log | grep -c -v "favicon.ico"
##集約して数える
毎時のリクエスト数を数える
$ grep -o '[0-9]\{2\}/.../2015:[0-9]\{2\}' access_log | uniq -c
grep option [o]はマッチ部を取り出す。
つまりあるキーワードを含む「行」ではなく「マッチ部分」を取り出す。
uniq ソート済みのファイルから重複した行を削除
##ProcessSubstitutionを使用してみる。
###ProcessSubstitutionとは
簡単に言うと、コマンドの実行結果をファイルとして扱うことができる。
ProcessSubstitutionを使わない例
$ sort file1 > file1.sorted
$ sort file2 > file2.sorted
$ diff file1.sorted file2.sorted
ProcessSubstitutionを用いると
$ diff <(sort file1) <(sort file2)
上記のように「<(コマンド)」という記法で、コマンドの実行結果をファイルとして他のコマンドに渡すことができる。
###実用例
ProcessSubstitutionを使用すると、2つのクライアントのリクエストの差分が取得できる。
$ diff -u <(grep "00.00.0.0" access_log | grep -o "\(GET\|POST\) [^ ]*" | sort | uniq) <(grep "127.0.0.1" access_log | grep -o "\(GET\|POST\) [^ ]*" | sort | uniq)