概要
Azureの「Web サーバー ログ」を取得をオンにすると、/LogFiles/http/RawLogs以下にW3C 拡張ログ ファイル形式のログテキストファイルが出力されます。
ログファイルの確認は、いろいろと方法があるかと思いますが、
IPAのiLogScannerで解析する方法をメモとして残します。
方法
Azureから出力されるiis_w3cフォーマットを素のままでは、iLogScannerで読み込めません。いくつかのログ変換処理が必要です。
変更箇所
#Version,#Date行の追加
2,3行目に以下を加えます。値は適当で大丈夫だと思います。
#Version: 1.0
#Date: 2015-05-24 20:18:01
Fieldsの項目順序変更
iLogScannerで読み込める順番と項目が決まっているようです。#Fields行を以下の順序に変更します。
最後にスペースが必要です。
#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status cs(User-Agent)
s-ipを用意する
Azureのログにs-ip(サーバのipアドレス)は含まれません。Azureの管理ポータル上でIPアドレスが見れるので、ひとまずそれを使います。
実際のログの順序をfields定義に合わせて変更
出力されたログ行をFields定義に合わせて順序を変更します。
以上の変更点を、適当に文字列操作スクリプトを書いて実行します。参考までにRubyコードです。
s_ip = "*.*.*.*" #s-ip parameter
CustomizeLogFileName = "custom_" + ARGV[0]
puts(CustomizeLogFileName)
cFile = File.open(CustomizeLogFileName,"w")
File.open(ARGV[0]) do |file|
while line = file.gets
if /^#Software:/ =~line
cFile.puts(line)
cFile.puts("#Version: 1.0") # temporary
cFile.puts("#Date: 2015-05-24 20:18:01") # temporary
elsif /^#Fields:/ =~line
cFile.puts("#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status cs(User-Agent) ")
else
fieldsArray = line.split(' ')
fields = fieldsArray[0] + " " #date
fields += fieldsArray[1] + " " #time
fields += fieldsArray[8] + " " #c-ip
fields += fieldsArray[7] + " " #cs-username
fields += s_ip + " " #s-ip
fields += fieldsArray[6] + " " #s-port
fields += fieldsArray[3] + " " #cs-method
fields += fieldsArray[4] + " " #cs-uri-stem
fields += fieldsArray[5] + " " #cs-uri-query
fields += fieldsArray[13] + " " #sc-status
fields += fieldsArray[9] + " " #cs(User-Agent)
cFile.puts(fields)
end
end
end
cFile.close