6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DiverseAdvent Calendar 2018

Day 10

W3C形式のログをApache形式のログに変換する

Last updated at Posted at 2018-12-09

Diverse Advent Calendar 2018の10日目です。

昨日は @SAMUKEI さんのLookerについてのお話でした。
私も触ってみましたが、ブラウザをぽちぽちするだけでキレイなグラフがでてくるのは感動モノです!
本日は私のシェルTipsです。週頭のお口直しにつまんでみてください。

時間無いから一言で言って

「Apacheログ形式」でアクセスログを要求されたけれど、弊環境でのログは「W3Cログ形式」だったので頑張って変換した。

どうしてこうなった

「直近1ヶ月分のアクセスログを分析したいのでくださーい(ApacheログのCombine形式で)。」
と言われ手元に持ってきたログはCloudFrontのログ形式でした。

ちなみにApacheログ形式はこんな。

%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥"
リモートホスト名 クライアントの識別子 認証ユーザー名 日時([DD/M/yyyy hh:mm:ss + 9:00]) "リクエストの最初の行の値" 最後のレスポンスのステータス 送信されたバイト数 "Refererの値" "User-Agentの値"

で、CloudFrontのログ形式はこんなです。基本はW3C拡張ログ形式ですね。

date time x-edge-location sc-bytes c-ip cs-method	cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header	cs-protocol cs-bytes time-taken x-forwarded-for	ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version fle-status fle-encrypted-fields
日付(yyyy-mm-dd) 時刻 エッジロケーション バイト数 クライアントIPアドレス アクセス方式 CFディストリビューションのドメイン名 パスURI ステータスコード リファラー User-Agent クエリ文字列 クッキーヘッダー CFのレスポンス分類 識別文字列 リクエストドメイン名 プロトコル ヘッダを含むバイト数 サーバー時間 IPアドレス SSLバージョン 暗号方式 CF分類 フィールド数 

順番バラバラですし、なにより日付形式が形式が大きく違っております。
今回一回だけのことなので、手元で変換するべくBash+awkでこねくりまわしました。

結局のところ何したの

  1. とりあえずダウンロードしてきたファイル群をまとめて解凍
  2. 解凍したファイルを一件ずつ処理開始
  3. 日毎に1ファイルになるように、ログ日をファイル名として変数格納
  4. ファイルをオープン→文字列を変換→ファイルに追記
  5. 最後にまとめて圧縮して完了

今回のカレンダーでネタにしよう! 
と思ってローカル内を漁ったものの、すべてが dev/null に吸い込まれて揮発していました。😱
残っていたのは↓の変換するワンライナー部分だけでした。

cat $元ファイル名 | awk '
    {
      split($1,ar,"-");
      mon=ar[2];
      m=(mon==10)?"Oct":"Sep";
      datestr=ar[3]"/"m"/"ar[1];
      gsub(/%2520/," ",$11);
     print $7,"- - ["datestr":"$2"]",$6,$8,$9,$4,$10,$11
    }
' >> $出力ファイル名

注意点:日付が9月10月にしか対応していません!

まとめ

普段シェルを触らないと、こういうときにまごついちゃうよねー。という知見を得ました。
誰かのお役に立てれば幸いです(なさそう)。

明日は @aono099 さんの 「みんなでやる競合調査」です! 楽しみですね!

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?