h1. Request log analyzer This is a simple command line tool to analyze request log files of both Rails and Merb. Its purpose is to find what actions are best candidates for optimization. * Analyzes Rails logs (all versions) and Merb logs * Can combine multiple files (handy if you are using logrotate) * Uses several metrics (cumulative time, average time, blockers, DB time, etc) * Low memory footprint (server-safe) * MIT licensed * Fast h2. Installation @sudo gem install wvanbergen-request-log-analyzer --source http://gems.github.com@ h2. Usage
Usage: request-log-analyzer [FILE] [OPTION]
Analyze the given log FILE with the given OPTION
Example: request-log-analyzer mongrel.log -z

  --fast, -f:                 Only use completed requests
  --guess-database-time, -g:  Guesses the database duration of requests if they are not in the log
  --output, -o:               Comma-separated list of reports to show    
  --amount, -c:               Displays the top  elements in the reports
  --colorize, -z:             Fancy bash coloring
  --install rails, -i rails:  Install Rails task rake log:analyze
h2. Example result Note that this example was shortened for your viewing pleasure. @$ request-log-analyzer /var/log/my_app.log -o 5@
Request log analyzer, by Willem van Bergen and  Bart ten Brinke

Processing started, failed, completed log lines from /var/log/my_app.log...

Processing all log lines...
========================================================================
Timestamp first request: 2008-07-13T06:25:58+00:00
Timestamp last request:  2008-07-20T06:18:53+00:00
Total time analyzed: 7 days

Total requests analyzed 58908 requests from log file
Methods: GET (50.6%), POST (22.8%), PUT (25.4%), DELETE (1.1%), unknown (0.0%).

Top 5 most requested actions
========================================================================
/overview/:date/                                  : 19359 requests
/overview/day/:date/                              : 6365 requests
/overview/:date/set/                              : 5589 requests
/overview/                                        : 3985 requests
/clients/:id/                                     : 1976 requests

Top 5 actions by time - cumulative
========================================================================
/overview/:date/                                  :   9044.582s [19359 requests]
/overview/                                        :   8478.767s [3985 requests]
/overview/:date/set/                              :   3309.041s [5589 requests]
/clients/:id/products/:id/                        :   1479.911s [924 requests]
/clients/:id/                                     :    750.080s [1976 requests]

Top 5 actions by time - per request mean
========================================================================
/overview/                                        :      2.128s [3985 requests]
/clients/:id/products/:id/                        :      1.602s [924 requests]
/overview/:date/set/                              :      0.592s [5589 requests]
/overview/:date/                                  :      0.467s [19359 requests]
/clients/:id/                                     :      0.380s [1976 requests]

Top 5 worst DB offenders - cumulative time
========================================================================
/overview/:date/                                  :   8773.993s [19359 requests]
/overview/                                        :   8394.754s [3985 requests]
/overview/:date/set/                              :   3307.928s [5589 requests]
/clients/:id/products/:id/                        :   1425.220s [924 requests]
/clients/:id/                                     :    535.229s [1976 requests]

Top 5 worst DB offenders - mean time
========================================================================
/overview/:id/:id/:id/print/                      :      6.994s [448 requests]
/overview/                                        :      2.128s [3985 requests]
/clients/:id/products/:id/                        :      1.602s [924 requests]
/overview/:date/set/                              :      0.592s [5589 requests]
/overview/:date/                                  :      0.467s [19359 requests]

Mongrel process blockers (> 1.0 seconds)
========================================================================
/overview/:date/                                  :   7494.233s [3144 requests]
/overview/                                        :   8320.293s [1549 requests]
/overview/:date/set/                              :   1149.235s [803 requests]
/overview/:id/:id/:id/print/new/                  :    613.693s [341 requests]
/clients/:id/products/:id/                        :   1370.693s [313 requests]

Requests graph - per hour
========================================================================
         ........
         7:00 - 2731                 : XXXXXXX
         8:00 - 6139                 : XXXXXXXXXXXXXXXX
         9:00 - 7465                 : XXXXXXXXXXXXXXXXXXXX
        10:00 - 7118                 : XXXXXXXXXXXXXXXXXXX
        11:00 - 7409                 : XXXXXXXXXXXXXXXXXXX
        12:00 - 6450                 : XXXXXXXXXXXXXXXXX
        13:00 - 5377                 : XXXXXXXXXXXXXX
        14:00 - 6058                 : XXXXXXXXXXXXXXXX
        15:00 - 4156                 : XXXXXXXXXXX
        16:00 - 2767                 : XXXXXXX
        17:00 - 1598                 : XXXX
        18:00 - 792                  : XX
        ........

Errors
========================================================================
StaleObjectError: [28 requests]
 -> Attempted to update a stale object
StatementError: [2 requests]
 -> Mysql::Error: Deadlock found when trying to get lock; try restarting transaction
NoMethodError: [1 requests]
 -> undefined method `code' for nil:NilClass