How to collect performance metrics in a Flask Application?


Question

What would be the best way to collect metrics on all HTTP requests made to a flask Application.

Things I would like to measure are :

  • Latency - time for each request.
  • Rate - No. of requests per minute etc.
  • No of failures - If there is a failure, how many etc.

Also I want to group requests to a variable path as one. For e.g All requests to the route '/resource/' should be measured for the metric named "RESOURCE" and not individually for each resource.

I plan to do this currently by writing a decorator. The disadvantage being I need to add the decorator for each method. Are there ways in which Flask can provide me hooks to measure these automatically.

1
4
5/30/2012 9:19:30 PM

Check out the documentation for the flask.Flask.before_request and flask.Flask.teardown_request decorators. You'll want something simple and fast to send your metrics to - check out graphite and scales for an example suitable backend.

Once you have your log aggregating back end then it is a simple matter of registering two functions to execute before and after each request.

6
5/31/2012 5:18:49 AM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon