Skip to main content

Asyncio library for creating Prometheus exporters

Latest Version Build Status

prometheus-aioexporter is an aysncio-based library to simplify writing Prometheus exporters in Python.

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(s) 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:

import click
from prometheus_aioexporter import Arguments, PrometheusExporterScript


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

    name = "my-exporter"
    default_port = 9091
    envvar_prefix = "MYEXP"

    def command_line_parameters(self) -> list[click.Parameter]:
        # Additional options for the script
        return [
            click.Option(["--custom-option"], help="a custom option"),
            ...
        ]

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

    async def on_application_startup(
        self, application: aiohttp.web.Application
    ) -> None:
        # Start other asyncio tasks at application startup
        do_something_with(self.data)
        # ...

    async def on_application_shutdown(
        self, application: aiohttp.web.Application
    ) -> None:
        # Stop other asyncio tasks at application shutdown
        do_more_with(self.data)
        # ...


script = MyExporter()

Also see the sample script for a complete example.

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

[project.scripts]
my-exporter = "path.to.script:script"

The description of the exporter can be customized by setting the docstring in the script class.

Exporter command-line

PrometheusExporterScript provides a few command-line arguments by default:

Options:
  -H, --host TEXT                 host addresses to bind  [env var: EXP_HOST;
                                  default: localhost]
  -p, --port INTEGER              port to run the webserver on  [env var:
                                  EXP_PORT; default: 9091]
  --metrics-path TEXT             path under which metrics are exposed  [env
                                  var: EXP_METRICS_PATH; default: /metrics]
  -L, --log-level [critical|error|warning|info|debug]
                                  minimum level for log messages  [env var:
                                  EXP_LOG_LEVEL; default: info]
  --log-format [plain|json]       log output format  [env var: EXP_LOG_FORMAT;
                                  default: plain]
  --process-stats                 include process stats in metrics  [env var:
                                  EXP_PROCESS_STATS]
  --ssl-private-key FILE          full path to the ssl private key  [env var:
                                  EXP_SSL_PRIVATE_KEY]
  --ssl-public-key FILE           full path to the ssl public key  [env var:
                                  EXP_SSL_PUBLIC_KEY]
  --ssl-ca FILE                   full path to the ssl certificate authority
                                  (CA)  [env var: EXP_SSL_CA]
  --version                       Show the version and exit.
  --help                          Show this message and exit.

Further options can be added by implementing command_line_parameters() to return additional click.Argument and click.Option items to add to the command line.

See the Click manual for more details on available parameter types.

In order to serve metrics on the HTTPS endpoint both ssl-private-key and ssl-public-key need to be define. The ssl certificate authority (i.e. ssl-ca) is optional.

Environment variables

Values from default arguments can also be supplied via environment variables. Variables names match the <envvar_prefix>_<option_with_underscores format, so, for instance, the --port option can be provided as MYEXP_PORT=9091 (assuming the PrometheusExporterScript.envvar_prefix is set to MYEXP).

Provided command-line options take precedence over environment variables.

It’s also possible to provide environment variables via dotenv file. By default .env is looked up in the current working directory. The file to load can be overridden by setting the file path via the <envvar_prefix>_DOTENV variable.

Explicitly provided environment variables take precedence over the ones defined in the dotenv file.

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 arguments (an Arguments 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: Arguments) -> None:
    # ...
    self.create_metrics(
        [
            MetricConfig("metric1", "a metric", "gauge"),
            MetricConfig("metric2", "another metric", "counter", labels=("l1", "l2")),
        ]
    )

Web application setup

On startup, PrometheusExporterScript creates a PrometheusExporter which includes a web application that exposes metrics.

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

The PrometheusExporter instance is accessible via application[EXPORTER_APP_KEY]), and 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:

async def on_application_startup(self, application: aiohttp.web.Application) -> None:
    # ...
    application[EXPORTER_APP_KEY].set_metric_update_handler(self._update_handler)

async def _update_handler(self, metrics: dict[str, prometheus_client.metrics.MetricWrapperBase]):
    for name, metric in metrics.items():
        metric.set(...)

See prometheus_aioexporter.sample for a complete example (that can be run with python -m prometheus_aioexporter.sample).

Release files for prometheus-aioexporter 3.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for prometheus-aioexporter 3.2.0
File Size Uploaded
prometheus_aioexporter-3.2.0.tar.gz 16.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for prometheus-aioexporter 3.2.0
File Interpreter ABI Platform
prometheus_aioexporter-3.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 31.7 kB

Release files / prometheus_aioexporter-3.2.0.tar.gz

Download URL prometheus_aioexporter-3.2.0.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
06c10932b77684e7062688e8955d0bf360143037f6d31ef56d6b4e8349880d4f
BLAKE2b-256 checksum
How to use checksums
867134ac594db64b59f5760aaf73cad6b5098055b116f0d7c1a66e7df2aaba08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 26, 2026.

Transparency log

Release files / prometheus_aioexporter-3.2.0-py3-none-any.whl

Download URL prometheus_aioexporter-3.2.0-py3-none-any.whl
Size 15.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a5743c256089b38a76b94fe3173c3de617192ef14a5a4b288d2b43b9a15f6a3e
BLAKE2b-256 checksum
How to use checksums
15799cdbd671d3aa747a7c58ff002136760a8ca1d9bc848568b1aae06c2d294c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.2.0 This release

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.7.0

2 release files

1.6.4

1 release file

1.6.3

1 release file

1.6.2

2 release files

1.6.1

1 release file

1.6.0

1 release file

1.5.1

2 release files

1.5.0

1 release file

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

1 release file

1.0.0

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page