How to collect performance metrics in a Flask Application?
flask, python
Solution
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.
Problem
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.