Prometheus metrics exporter for Flask
Project description
Prometheus Flask exporter
=========================
|Travis| |PyPI| |PyPI| |Coverage Status| |Code Climate|
This library provides HTTP request metrics to export into
`Prometheus <https://prometheus.io/>`__. It can also track method
invocations using convenient functions.
Usage
-----
.. code:: python
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
# static information as metric
metrics.info('app_info', 'Application info', version='1.0.3')
@app.route('/')
def main():
pass # requests tracked by default
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # default metrics are not collected
@app.route('/<item_type>')
@metrics.do_not_track()
@metrics.counter('invocation_by_type', 'Number of invocations by type',
labels={'item_type': lambda: request.view_args['type']})
def by_type(item_type):
pass # only the counter is collected, not the default metrics
@app.route('/long-running')
@metrics.gauge('in_progress', 'Long running requests in progress')
def long_running():
pass
@app.route('/status/<int:status>')
@metrics.do_not_track()
@metrics.summary('requests_by_status', 'Request latencies by status',
labels={'status': lambda r: r.status_code})
@metrics.histogram('requests_by_status_and_path', 'Request latencies by status and path',
labels={'status': lambda r: r.status_code, 'path': lambda: request.path})
def echo_status(status):
return 'Status: %s' % status, status
Default metrics
---------------
The following metrics are exported by default (unless the
``export_defaults`` is set to ``False``).
- ``flask_http_request_duration_seconds`` (Histogram)
Labels: ``method``, ``path`` and ``status``.
Flask HTTP request duration in seconds for all Flask requests.
- ``flask_http_request_total`` (Counter)
Labels: ``method`` and ``status``. Total number of HTTP requests for
all Flask requests.
- ``flask_exporter_info`` (Gauge)
Information about the Prometheus Flask exporter itself (e.g.
``version``).
Configuration
-------------
By default, the metrics are exposed on the same Flask application on the
``/metrics`` endpoint and using the core Prometheus registry. If this
doesn't suit your needs, set the ``path`` argument to ``None`` and/or
the ``export_defaults`` argument to ``False`` plus change the
``registry`` argument if needed. The ``group_by_endpoint`` constructor
flag makes the default request duration metric tracked by endpoint
(function) instead of URI path.
The ``register_endpoint`` allows exposing the metrics endpoint on a
specific path. It also allows passing in a Flask application to register
it on but defaults to the main one if not defined.
Similarly, the ``start_http_server`` allows exposing the endpoint on an
independent Flask application on a selected HTTP port. It also supports
overriding the endpoint's path and the HTTP listen address.
Labels
------
When defining labels for metrics on functions, the following values are
supported in the dictionary:
- A simple static value
- A no-argument callable
- A single argument callable that will receive the Flask response as
the argument
Label values are evaluated within the request context.
Application information
-----------------------
The ``PrometheusMetrics.info(..)`` method provides a way to expose
information as a ``Gauge`` metric, the application version for example.
The metric is returned from the method to allow changing its value from
the default ``1``:
.. code:: python
metrics = PrometheusMetrics(app)
info = metrics.info('dynamic_info', 'Something dynamic')
...
info.set(42.1)
License
-------
MIT
.. |Travis| image:: https://img.shields.io/travis/rycus86/prometheus_flask_exporter.svg
:target: https://travis-ci.org/rycus86/prometheus_flask_exporter
.. |PyPI| image:: https://img.shields.io/pypi/v/prometheus-flask-exporter.svg
:target: https://pypi.python.org/pypi/prometheus-flask-exporter
.. |PyPI| image:: https://img.shields.io/pypi/pyversions/prometheus-flask-exporter.svg
:target: https://pypi.python.org/pypi/prometheus-flask-exporter
.. |Coverage Status| image:: https://coveralls.io/repos/github/rycus86/prometheus_flask_exporter/badge.svg?branch=master
:target: https://coveralls.io/github/rycus86/prometheus_flask_exporter?branch=master
.. |Code Climate| image:: https://codeclimate.com/github/rycus86/prometheus_flask_exporter/badges/gpa.svg
:target: https://codeclimate.com/github/rycus86/prometheus_flask_exporter
=========================
|Travis| |PyPI| |PyPI| |Coverage Status| |Code Climate|
This library provides HTTP request metrics to export into
`Prometheus <https://prometheus.io/>`__. It can also track method
invocations using convenient functions.
Usage
-----
.. code:: python
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
# static information as metric
metrics.info('app_info', 'Application info', version='1.0.3')
@app.route('/')
def main():
pass # requests tracked by default
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # default metrics are not collected
@app.route('/<item_type>')
@metrics.do_not_track()
@metrics.counter('invocation_by_type', 'Number of invocations by type',
labels={'item_type': lambda: request.view_args['type']})
def by_type(item_type):
pass # only the counter is collected, not the default metrics
@app.route('/long-running')
@metrics.gauge('in_progress', 'Long running requests in progress')
def long_running():
pass
@app.route('/status/<int:status>')
@metrics.do_not_track()
@metrics.summary('requests_by_status', 'Request latencies by status',
labels={'status': lambda r: r.status_code})
@metrics.histogram('requests_by_status_and_path', 'Request latencies by status and path',
labels={'status': lambda r: r.status_code, 'path': lambda: request.path})
def echo_status(status):
return 'Status: %s' % status, status
Default metrics
---------------
The following metrics are exported by default (unless the
``export_defaults`` is set to ``False``).
- ``flask_http_request_duration_seconds`` (Histogram)
Labels: ``method``, ``path`` and ``status``.
Flask HTTP request duration in seconds for all Flask requests.
- ``flask_http_request_total`` (Counter)
Labels: ``method`` and ``status``. Total number of HTTP requests for
all Flask requests.
- ``flask_exporter_info`` (Gauge)
Information about the Prometheus Flask exporter itself (e.g.
``version``).
Configuration
-------------
By default, the metrics are exposed on the same Flask application on the
``/metrics`` endpoint and using the core Prometheus registry. If this
doesn't suit your needs, set the ``path`` argument to ``None`` and/or
the ``export_defaults`` argument to ``False`` plus change the
``registry`` argument if needed. The ``group_by_endpoint`` constructor
flag makes the default request duration metric tracked by endpoint
(function) instead of URI path.
The ``register_endpoint`` allows exposing the metrics endpoint on a
specific path. It also allows passing in a Flask application to register
it on but defaults to the main one if not defined.
Similarly, the ``start_http_server`` allows exposing the endpoint on an
independent Flask application on a selected HTTP port. It also supports
overriding the endpoint's path and the HTTP listen address.
Labels
------
When defining labels for metrics on functions, the following values are
supported in the dictionary:
- A simple static value
- A no-argument callable
- A single argument callable that will receive the Flask response as
the argument
Label values are evaluated within the request context.
Application information
-----------------------
The ``PrometheusMetrics.info(..)`` method provides a way to expose
information as a ``Gauge`` metric, the application version for example.
The metric is returned from the method to allow changing its value from
the default ``1``:
.. code:: python
metrics = PrometheusMetrics(app)
info = metrics.info('dynamic_info', 'Something dynamic')
...
info.set(42.1)
License
-------
MIT
.. |Travis| image:: https://img.shields.io/travis/rycus86/prometheus_flask_exporter.svg
:target: https://travis-ci.org/rycus86/prometheus_flask_exporter
.. |PyPI| image:: https://img.shields.io/pypi/v/prometheus-flask-exporter.svg
:target: https://pypi.python.org/pypi/prometheus-flask-exporter
.. |PyPI| image:: https://img.shields.io/pypi/pyversions/prometheus-flask-exporter.svg
:target: https://pypi.python.org/pypi/prometheus-flask-exporter
.. |Coverage Status| image:: https://coveralls.io/repos/github/rycus86/prometheus_flask_exporter/badge.svg?branch=master
:target: https://coveralls.io/github/rycus86/prometheus_flask_exporter?branch=master
.. |Code Climate| image:: https://codeclimate.com/github/rycus86/prometheus_flask_exporter/badges/gpa.svg
:target: https://codeclimate.com/github/rycus86/prometheus_flask_exporter
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file prometheus_flask_exporter-0.2.1.tar.gz
.
File metadata
- Download URL: prometheus_flask_exporter-0.2.1.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
df8bae13a07baa212b648cc5d3f3b2796113fb9127b6a994b5648b879d4688e6
|
|
MD5 |
a8fd6bccdb64448e0c51c571b556b36e
|
|
BLAKE2b-256 |
ac5125c2f6d89e8f1f6a7b81681275ffc2ec009a0bbb25d645eafee45c29a4d5
|