Logging apache to MongoDB in php

Posted by tomfmason 1 year, 2 months ago 551 comments

I recently wrote an intro To PHP and MongoDB tutorial over at phpfreaks. Check it out if you haven't already. Anyway, I got to tinkering around and decided to write a php script to log apache requests to a MongoDB. This actually ended up being easier than I had first thought. 

Here is the working code:

[PHP]
<?php
$fp = fopen("php://stdin", "r");
$mongo = new Mongo();
$db = $mongo->apache_logs;
$strip = array(" ","\r","\n");
$access_log = $db->access_log;
$regex = '/(?P<vhost>(\\w{1,}))(\\s)(?P<ip>([\\d\\.]+))(\\s)\\[(?P<date>(.*))\\](\\s)(?P<method>(\\w{3,10}))(\\s)(?P<path>(.*))(\\s)(?P<protocol>(.*))(\\s)(?P<code>(.*))(\\s)(?P<rsize>(.*))(\\s)\"(?P<referer>(.*))\"(\\s)\"(?P<useragent>(.*))\"/';
foreach(explode("\n",fread($fp,8192))as$l){
    if(str_replace($strip,"",$l) !== ""){
        if(preg_match($regex,$l,$matches)) {
            $request = array();
            foreach($matches as $k=>$v) {
                if(is_string($k)) {
                    if($k=="date") {
                        $v = new MongoDate(strtotime($v));
                    }
                    $request[$k] = $v;
                }
            }
            $access_log->insert($request,true);
            
        }
    }
}
fclose($fp);
?>

As you can see this was actually rather simple. In under 30 lines of code we can efficiently log our access logs to a mongo db. To use this with apache add this to your httpd.conf.

[ApacheConf]
LogFormat '%v %h %t %r %>s %b "%{Referer}i" "%{User-Agent}i"' mongo_log
CustomLog "|php /path/to/php_log.php" mongo_log

Now we can do all kinds of awesomeness with our logs :)

Comments

  • Steve Burke 9 months, 3 weeks ago

    It would be nice to see how graphs of this could be generated from the DB.

    Link / Reply
    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

    • Comment awaiting approval

Comment
required
required (not published)
optional