Generic set of metrics for Python applications.
Project description
metrics-python
Generic set of metrics for Python applications.
We collect metrics utils in this package to hopefully make a generic package we can use in other projects in the future.
Labels
Common labels like app, env, cluster, component, role, etc. is added to the metrics using the scrape config. Adding these metrics is not a responsibility we have in the metrics-python package.
Application info
Some properties from the application is not added as metric labels by default by the scrape config. One example is the application version. metrics-python has a util to expose labels like this to Prometheus.
from metrics_python.generics.info import expose_application_info
expose_application_info(version="your-application-version")
Django
Cache
Cache metrics can be observed by adding patch_caching()
to your settings file.
from metrics_python.django.cache import patch_caching
patch_caching()
Middleware
The execution of middlewares can be observed by adding patch_middlewares()
to your settings file.
from metrics_python.django.middleware import patch_middlewares
patch_middlewares()
Signals
The execution of signals can be observed by adding patch_signals()
to your settings file.
from metrics_python.django.signals import patch_signals
patch_signals()
Query count and duration in views
Database query count, duration, and duplicate queries can be observed
by adding the QueryCountMiddleware
. Add the middleware as early as
possible in the list of middlewares to observe queries executed by
other middlewares.
MIDDLEWARE = [
...
"metrics_python.django.middleware.QueryCountMiddleware",
]
Query count and duration in Celery tasks
Database metrics can also be observed in Celery. Execute
setup_celery_database_metrics
bellow setup_celery_metrics
,
look into the Celery section of this document for more information.
from metrics_python.django.celery import setup_celery_database_metrics
setup_celery_database_metrics()
Postgres database connection metrics
The get_new_connection
method in the PostgreSQL database connection
engine can be observed by using a custom connection engine from
metrics-python.
DATABASES = {
"default": {
"ENGINE": 'metrics_python.django.postgres_engine',
...
}
}
Celery
To setup Celery monitoring, import and execute setup_celery_metrics
as early
as possible in your application to connect Celery signals. This is usually done
in the settings.py
file in Django applications.
from metrics_python.celery import setup_celery_metrics
setup_celery_metrics()
django-api-decorator
To measure request durations to views served by django-api-decorator, add the DjangoAPIDecoratorMetricsMiddleware
.
MIDDLEWARE = [
...
"metrics_python.django_api_decorator.DjangoAPIDecoratorMetricsMiddleware",
]
GraphQL
Strawberry
The Prometheus extension needs to be added to the schema to instrument GraphQL operations.
import strawberry
from metrics_python.graphql.strawberry import PrometheusExtension
schema = strawberry.Schema(
Query,
extensions=[
PrometheusExtension,
],
)
Graphene
metrics-python has a Graphene middleware to instrument GraphQL operations. Add
the middleware to Graphene by changing the GRAPHENE config in settings.py
.
GRAPHENE = {
...
"MIDDLEWARE": ["metrics_python.graphql.graphene.MetricsMiddleware"],
}
Gunicorn
To setup Gunicorn monitoring, add the Prometheus logger (to measure request durations) and add the worker state signals to the gunicorn config.
from metrics_python.generics.workers import export_worker_busy_state
logger_class = "metrics_python.gunicorn.Prometheus"
def pre_request(worker: Any, req: Any) -> None:
export_worker_busy_state(worker_type="gunicorn", busy=True)
def post_request(worker: Any, req: Any, environ: Any, resp: Any) -> None:
export_worker_busy_state(worker_type="gunicorn", busy=False)
def post_fork(server: Any, worker: Any) -> None:
export_worker_busy_state(worker_type="gunicorn", busy=False)
Release new version
We use release-please from Google to relese new versions, this is done automatically.
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
Built Distribution
File details
Details for the file metrics_python-0.0.20.tar.gz
.
File metadata
- Download URL: metrics_python-0.0.20.tar.gz
- Upload date:
- Size: 52.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.5.0-1023-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e30313b0c211978b9ec17b2bb10b270fe4d0b824b51942683aa9552fa8aea73f |
|
MD5 | f5830c271c652d85fa219533f0b34657 |
|
BLAKE2b-256 | 2d35cca2b8c9fc071f479b105a0626d3d073d98e3e8dea131c67d3a7a5cbf37b |
File details
Details for the file metrics_python-0.0.20-py3-none-any.whl
.
File metadata
- Download URL: metrics_python-0.0.20-py3-none-any.whl
- Upload date:
- Size: 34.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.5.0-1023-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a1614d37b840a63e5cc4aaf3227173285cee1ac07fab894023f6c7baa84b956 |
|
MD5 | 9677fa40c33a7223b7d67889fa6abe77 |
|
BLAKE2b-256 | 5f00e46db372f76e3ea7e59db195911a8226e88bdf10c06c4b2ade604c0fa252 |