Skip to main content

Asyncio library for creating Prometheus exporters.

Project description

Latest Version Build Status Coverage Status

prometheus-aioexporter is an aysncio-powered library to simplify writing Prometheus exporters.

Exporters are usually implemented as small daemons that expose metrics in text format through a web endpoint (usually /metrics).

Usage

The library provides a PrometheusExporterScript class that serves as an entry point to create services that export Prometheus metrics via an HTTP endpoint.

Creating a new exporter is just a matter of subclassing PrometheusExporterScript and implementing a few methods as needed.

An example usage is the following:

from prometheus_aioexporter.script import PrometheusExporterScript


class MyExporter(PrometheusExporterScript):
    """My Prometheus exporter."""

    def configure_argument_parser(self, parser):
        # Additional arguments to the script
        parser.add_argument('an-option', help='an option')
        # ...

    def configure(self, args):
        # Save attributes that are needed for later
        self.data = do_stuff()
        # ...

    def on_application_startup(self, application):
        # Start other asyncio tasks at application startup
        use(self.data)
        # ...

    def on_application_shutdown(self, application):
        # Stop other asyncio tasks at application shutdown
        use(self.data)
        # ...


script = MyExporter()

Exporter command-line

PrometheusExporterScript provides a few command-line arguments by default:

optional arguments:
  -h, --help            show this help message and exit
  -H HOST, --host HOST  host address to bind (default: localhost)
  -p PORT, --port PORT  port to run the webserver on (default: 9090)
  -L {CRITICAL,ERROR,WARNING,INFO,DEBUG}, --log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}
                        minimum level for log messages (default: WARNING)
  --process-stats       include process stats in metrics (default: False)

Further options can be added by implementing configure_argument_parser(), which receives the argparse.ArgumentParser instance used by the script.

The script variable from the example above can be referenced in setup.py to generate the script, like

setup(
    ...,
    entry_points={'console_scripts': ['script = path.to.script:script']},
    ...)

The name and description of the exporter can be customized by setting the respective attributes in the script class.

Startup configuration

Additional initial setup (e.g. config file parsing) can be performed by the script by implementing the configure(). This is called at startup with the parsed argument (an argparse.Namespace instance).

Metrics configuration

The metrics exported by the script can be set up by calling create_metrics with a list of MetricConfigs. This is typically done in configure():

def configure(self, args):
    # ...
    self.create_metrics(
        [MetricConfig('metric1', 'a metric', 'gauge', {}),
         MetricConfig('metric2', 'another metric', 'counter', {})])

Web application setup

On startup, PrometheusExporterScript creates a web application which is used to expose metrics.

It’s possible to customize and perform additional startup/shutdown tasks by implementing the on_application_startup and on_application_shutdown methods, which are called with the application instance.

This is a PrometheusExporterApplication instance, which provides a set_metric_update_handler method to register a hook to update metrics on each request, before the response is returned to the client. The registered function must return a coroutine and is called with a dict mapping metric names to metric objects:

def on_application_startup(self, application):
    # ...
    application.set_metric_update_handler(self._update_handler)

async def _update_handler(self, metrics):
    for name, metric in metrics.items():
        metric.set(...)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prometheus-aioexporter-1.3.0.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

prometheus_aioexporter-1.3.0-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file prometheus-aioexporter-1.3.0.tar.gz.

File metadata

File hashes

Hashes for prometheus-aioexporter-1.3.0.tar.gz
Algorithm Hash digest
SHA256 836a699bbb941e341be28fe8bf81e1e892a56a706bbaffaf3d4b9ecd6647988d
MD5 a84636745405961c1f01b9e107eddf91
BLAKE2b-256 7f7e76d394f503e62a39242ebc4be2c6d8778e9c6bca6553332c1718b18b21ab

See more details on using hashes here.

File details

Details for the file prometheus_aioexporter-1.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for prometheus_aioexporter-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04de0efc33cbcb093589c2d2f59f127d868d881996c92f3779a2d3e9054ab555
MD5 9844f41be07e2522f4927a32db95d58f
BLAKE2b-256 ba5050dd38b2c2593921916e30f69718fef6fe4e26ee6ec96ba15027eabc76b0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page