トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Linux:sedでapacheアクセスログを整形 のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[sedの使い方]]

*sedでapacheアクセスログを整形 [#q8801f54]
*Linux:sedでapacheアクセスログを整形 [#q8801f54]

apacheのアクセスログの整形はニーズがありそうなので、独立した記事にします。

**apacheのcookieログを設定して、DrupalのセッションIDとアクセスパスを出力 [#q13ba8ea]

こんな感じのログ設定で
 LogFormat "%t %T %{cookie}i %{Referer}i -> %U" cookie
出力されたログをこんな感じのsedに喰わせるとちょっと幸せになれるかも。
  sed -n -e 's/.*\(SESS[0-9a-zA-Z]\{32\}=[^;]*\);.*-> \(.*\)$/\1 \2/p' logfile

***apacheのアクセスログ(combined)からアクセス時刻とURL(パラメータを除く)とステータスコードとレスポンスタイム(ms)を抽出する。 [#fd05b324]

こんな感じで行けました!

 cat access_log | sed -n -e 's/.*\[\([0-9]\{2\}\)\/\([A-Za-z]\{3\}\)\/\([0-9]\{4\}\):\([^ ]*\) .*GET \([^?]*\).*" \([0-9]\{3\}\) .* \([0-9]*\)[0-9]\{3\}$/\3\/\2\/\1 \4\t\5\t\6\t\7/p' 
 cat access_log | sed -n -e 's/.*\[\([0-9]\{2\}\)\/\([A-Za-z]\{3\}\)\/\([0-9]\{4\}\):\([^ ]*\) .*"[A-Z]\{3,6\} \([^?]*\).*" \([0-9]\{3\}\) .* \([0-9]*\)[0-9]\{3\}$/\3\/\2\/\1 \4\t\5\t\6\t\7/p'  

ポイントは以下の通り
 -Excelに喰わせてそのまま処理できるように、日付フォーマットを整形
 -URLそのまま出すと駄々長いため、?より前を出力(パラメータはカット)
 -レスポンスタイムはマイクロ秒で出力されるため、後ろ3桁を切り捨て(誤差とする)
-Excelに喰わせてそのまま処理できるように、日付フォーマットを整形
-URLそのまま出すと駄々長いため、?より前を出力(パラメータはカット)
-レスポンスタイムはマイクロ秒で出力されるため、後ろ3桁を切り捨て(誤差とする)

出力結果サンプルは以下の通り。
 2013/Nov/26 08:23:18    /access_location     200     627
 2013/Nov/26 08:23:18    /access_location     200     824
 2013/Nov/26 08:23:18    /access_location     200     604

うむ、なかなか便利w


***apacheのアクセスログからリファラーだけ取り出す。 [#t8ca97f2]
customlogの出力仕様によりますが、東方のログの場合、全体の項目としては8項目目、""(ダブルクオート)でくくられている項目としては2項目目がリファラーとなる場合のサンプルです。

 sed -e 's/.*"\(.*\)".*"\(.*\)".*"\(.*\)".*/\2/g' accesslog

かなり強引wですが、とりあえず取れましたw


***apacheのcookieログを設定して、DrupalのセッションIDとアクセスパスを出力 [#q13ba8ea]

こんな感じのログ設定で
 LogFormat "%t %T %{cookie}i %{Referer}i -> %U" cookie
出力されたログをこんな感じのsedに喰わせるとちょっと幸せになれるかも。
  sed -n -e 's/.*\(SESS[0-9a-zA-Z]\{32\}=[^;]*\);.*-> \(.*\)$/\1 \2/p' logfile


***月をJan⇒01に変換 [#g12243f8]
長くて毎回作るのが面倒なので、正規表現だけ貼り付けます。

 's/Jan/01/;s/Feb/02/;s/Mar/03/;s/Apr/04/;s/May/05/;s/Jun/06/;s/Jul/07/;s/Aug/08/;s/Sep/09/;s/Oct/10/;s/Nov/11/;s/Dec/12/'