Prometheus metrics for arq
pip install -U arq-prometheus
poetry add arq-prometheus
The metrics exposed are the same as the health check.
Metric name | Description |
---|---|
arq_jobs_completed |
The number of jobs completed |
arq_jobs_failed |
The total number of errored jobs |
arq_jobs_retried |
The total number of retried jobs |
arq_ongoing_jobs |
The number of jobs in progress |
arq_queued_inprogress |
The number of jobs in progress |
When working with arq
I found some limitations, it was specially hard to get access to
the worker in order to retrieve information like the queue_name
or health_check_key
.
The startup and shutdown functions only make available a ctx
with the redis connection.
This means that if you provide a custom queue_name
or health_check_key
, you will
also have to provide them to ArqPrometheusMetrics
.
# example_worker.py
from arq_prometheus import ArqPrometheusMetrics
async def startup(ctx):
arq_prometheus = ArqPrometheusMetrics(ctx, delay=delay)
ctx["arq_prometheus"] = await arq_prometheus.start()
async def shutdown(ctx):
await ctx["arq_prometheus"].stop()
class WorkerSettings:
on_startup = startup
on_shutdown = shutdown
function = [] # your arq jobs
... # other settings
Start your arq worker,
arq example_worker.WorkerSettings
Make request to localhost:8081
(or open in browser).
curl localhost:8081
ctx: dict
: arq contextqueue_name: str = default_queue_name
: name of the arq queuehealth_check_key: Optional[str] = None
: arq health keydelay: datetime.timedelta = datetime.timedelta(seconds=5)
: a datetime.timedeltaenable_webserver: bool = True
: set to True if you want a web server exposing the metricsaddr: str = "0.0.0.0"
: webserver addressport: int = 8081
: webserver portregistry: prom.CollectorRegistry = prom.REGISTRY
: the prometheus registry, usually you do not have to override this