少し前に、mongodbに直接importできるようにしました。ということで、今回は取得できるApacheの内部のデータを増やしました。
mod_request_dumperを組み込めば、Apache内部の情報が各種フックフェーズ単位でJSONにシリアライズして取得できるようになります。一応、設定方法をおさらいしておきます。
まず、JSONデータの渡し方はファイルとパイプの二通りがあります。
- ファイルの場合
DumpRequestLog "ファイル名"
- パイプの場合(例えばmongodbにimportする場合)
DumpRequestLog "| mongoimport -d DB名 -c Collection名"
そして、フックできるフェーズは以下です。
DumpPostReadRequest On
DumpTranslateName On
DumpMapToStorage On
DumpCheckUserId On
DumpTypeChecker On
DumpAccessChecker On
DumpAuthChecker On
DumpInsertFilter On
DumpFixups On
DumpQuickHandler On
DumpHandler On
DumpLogTransaction On
続いて、今回はログ出力のフェーズであるDumpLogTransaction(ap_hook_log_transaction)をOnにして、出力をmongodb上で見てみました。すると以下のような出力が得られました。
{
"_id" : ObjectId("4fc7a30d188be4a76059b844"),
"filename" : "/var/www/html/favicon.ico",
"uri" : "/favicon.ico",
"user" : null,
"content_type" : "text/html; charset=iso-8859-1",
"protocol" : "HTTP/1.1",
"vlist_validator" : null,
"ap_auth_type" : null,
"unparsed_uri" : "/favicon.ico",
"canonical_filename" : "/var/www/html/favicon.ico",
"path_info" : "",
"hostname" : "example.com",
"method" : "GET",
"the_request" : "GET /favicon.ico HTTP/1.1",
"range" : null,
"handler" : null,
"args" : null,
"status_line" : "404 Not Found",
"content_encoding" : null,
"assbackwards" : 0,
"proxyreq" : 0,
"header_only" : 0,
"proto_num" : 1001,
"status" : 404,
"method_number" : 0,
"chunked" : 0,
"read_body" : 0,
"read_chunked" : 0,
"no_cache" : 0,
"no_local_copy" : 0,
"used_path_info" : 2,
"eos_sent" : 1,
"request_time" : -138290737,
"connection" : {
"remote_ip" : "192.168.0.10",
"remote_host" : null,
"remote_logname" : null,
"local_ip" : "192.168.1.20",
"local_host" : null,
"keepalives" : 0,
"data_in_input_filters" : 0,
"local_addr" : {
"hostname" : null,
"port" : 80
},
"remote_addr" : {
"hostname" : null,
"port" : 61626
}
},
"server" : {
"error_fname" : "logs/error_log",
"defn_name" : null,
"server_scheme" : null,
"server_admin" : "root@localhost",
"path" : null,
"server_hostname" : "example.com",
"loglevel" : 4,
"is_virtual" : 0,
"keep_alive_max" : 100,
"keep_alive" : 0,
"pathlen" : 0,
"limit_req_line" : 8190,
"limit_req_fieldsize" : 8190,
"limit_req_fields" : 100,
"timeout" : 120000000,
"keep_alive_timeout" : 15000000,
"port" : 0,
"defn_line_number" : 0,
"process" : {
"short_name" : "httpd",
"argc" : 1
},
"addrs" : {
"virthost" : "",
"host_port" : 0,
"host_addr" : {
"hostname" : null,
"port" : 0
}
}
},
"headers_in" : {
"Host" : "example.com",
"Connection" : "keep-alive",
"Accept" : "*/*",
"User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5",
"Accept-Encoding" : "gzip,deflate,sdch",
"Accept-Language" : "ja,en-US;q=0.8,en;q=0.6",
"Accept-Charset" : "Shift_JIS,utf-8;q=0.7,*;q=0.3"
},
"headers_out" : {
"Content-Length" : "300",
"Connection" : "close",
"Content-Type" : "text/html; charset=iso-8859-1"
},
"err_headers_out" : null,
"subprocess_env" : null,
"notes" : null,
"time" : "Fri Jun 1 01:57:49 2012",
"pid" : 28887,
"hook" : "ap_hook_log_transaction"
}
どうでしょう。かなりのデータが取得できるようになったと思います。ヘッダーの情報も取れるようになっています。うまく使えば、かなり細かい解析や傾向が得られそうです。
mod_request_dumperの使い道、募集中ですよ!
「Apacheで動作するmod_request_dumperがパワーアップ!」への2件のフィードバック
コメントは受け付けていません。