Instrument your FastAPI with Prometheus metrics
Project description
Prometheus FastAPI Instrumentator
Instrument your FastAPI with Prometheus metrics. Install with:
pip install prometheus-fastapi-instrumentator
Fast Track
from prometheus_fastapi_instrumentator import Instrumentator
Instrumentator().instrument(app).expose(app)
With this single line FastAPI is instrumented and all Prometheus metrics used
in the FastAPI app can be scraped via the added /metrics
endpoint.
The exporter includes the single metric http_request_duration_seconds
of
the type Histogram. A separate http_requests_total
isn't necessary as the
total can be retrieved with the http_requests_total_count
series.
The Prometheus FastAPI Instrumentator (any idea for a short hand?) is highly configurable and has few handy features.
- Opt-out (activated by default):
- Status codes are grouped into
2xx
,3xx
and so on. - Requests without a matching template are grouped into the handler
none
. - Regex patterns to ignore certain routes.
- Status codes are grouped into
- Opt-in (Deactivated by default):
- Control instrumentation and exposition of FastAPI at runtime by setting an environment variable.
- Rounding of latencies to a certain decimal number.
- Completely ignore untemplated routes.
- Renaming of labels and the metric.
See the Example with all parameters for all possible options.
Example with all parameters
from prometheus_fastapi_instrumentator import PrometheusFastApiInstrumentator
PrometheusFastApiInstrumentator(
should_group_status_codes=False,
should_ignore_untemplated=True,
should_group_untemplated=False,
should_round_latency_decimals=True,
should_respect_env_var_existence=True,
excluded_handlers=["/metrics", "/admin"],
buckets=[1, 2, 3, 4, 5],
metric_name="my_custom_metric_name",
label_names=("method_type", "path", "status_code",),
round_latency_decimals=3,
env_var_name="ENABLE_METRICS",
).instrument(
app
).expose(
app,
endpoint="/prometheus_metrics",
include_in_schema=False
)
instrument
: Instruments the given FastAPI based on the configuration in
the constructur of the exporter class.
expose
: Completely separate from instrument
and not necessary for
instrumentation. Just a simple option to expose metrics by adding an endpoint
to the given FastAPI. Supports multiprocess mode.
Prerequesites
python = "^3.6"
(tested with 3.6 and 3.8)fastapi = ">=0.38.1, <=1.0.0"
(tested with 0.38.1 and 0.59.0)prometheus-client = "^0.8.0"
(tested with 0.8.0)
Development
Developing and building this package on a local machine requires
Python Poetry. I recommend to run Poetry in
tandem with Pyenv. Once the repository is
cloned, run poetry install
and poetry shell
. From here you may start the
IDE of your choice.
For formatting, the black formatter is used.
Run black .
in the repository to reformat source files. It will respect
the black configuration in the pyproject.toml
. For more information just
take a look at the GitHub workflow files.
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
Built Distribution
Hashes for prometheus-fastapi-instrumentator-2.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29e1b344facc20128335548c4b1a7e1bea71252ad914d43475d81443529acdfd |
|
MD5 | 35a79aac328b06c572f33f83d20d9b75 |
|
BLAKE2b-256 | a1b169016443ae26f0f2fe90f10789ca3ab16a33c949da0cccde8fdd30bef5ec |
Hashes for prometheus_fastapi_instrumentator-2.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b95f95f94968bcd13e662bd76b266a820378240a05d46015208dfafad123236 |
|
MD5 | c1b167220d011aa1e8540293db62208b |
|
BLAKE2b-256 | 47311bb999af60576a3d326e3d4099642f34c04ca63d83e6c1ffbb8170e1910c |