Apacheで動作するmod_request_dumperがパワーアップ!

少し前に、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件のフィードバック

コメントは受け付けていません。