跳转到主要内容

Celery的简单Prometheus度量导出器

项目描述

https://img.shields.io/docker/automated/zerok/celery-prometheus-exporter.svg?maxAge=2592000

celery-prometheus-exporter是一个小的导出器,用于将Celery相关的度量收集起来以便Prometheus能够获取。与其他导出器(如mongodb_exporter或node_exporter)一样,它被实现为一个独立的进程,以便在不同的框架之间更容易重用。

目前它提供了以下度量

  • celery_tasks展示了当前队列中已知任务的数量,按状态(接收、开始等)分组。

  • celery_tasks_by_name展示了当前队列中已知任务的数量,按名称状态分组。

  • celery_workers展示了当前可能存活的工人数量

  • celery_task_latency展示了任务延迟的直方图,即任务被工人拾起的时间

  • celery_tasks_runtime_seconds追踪任务完成所需的时间,以直方图的形式

如何使用

有多种安装方法。明显的一种是使用pip install celery-prometheus-exporter,然后使用celery-prometheus-exporter命令

$ celery-prometheus-exporter
Starting HTTPD on 0.0.0.0:8888

此包仅直接依赖于Celery,因此您必须安装它与其他代理进行通信所需的所有其他依赖项。

Celery工人必须配置为发送任务相关的事件:[Celery文档](http://docs.celeryproject.org/en/latest/userguide/configuration.html#worker-send-task-events)。

使用带参数 --enable-events 运行 celery-prometheus-exporter,将定期在工作者上启用事件。这很有用,因为它允许在 celery-prometheus-exporter 部署之前禁用事件运行 celery 工作者,此时工作者上的事件将被启用。

或者,您可以使用 Makefile 和 Dockerfile 来生成 Docker 镜像。

默认情况下,HTTPD 将监听 0.0.0.0:8888。如果您想让 HTTPD 监听其他端口,请使用 --addr 选项或环境变量 DEFAULT_ADDR

默认情况下,它将期望代理通过 redis://redis:6379/0 可用,尽管您可以通过环境变量 BROKER_URL 进行更改。如果您使用 AMQP 或 Redis 以外的其他东西,请查看 Celery 文档并安装附加要求 😊 也可以使用 --broker 选项指定不同的代理 URL。

如果您需要向代理的传输传递额外的选项,请使用 --transport-options 选项。它尝试从一个 JSON 对象中读取字典。例如,当使用 Redis Sentinel 进行代理发现时设置您的 master 名称:--transport-options '{"master_name": "mymaster"}'

使用 --tz 来指定 Celery 应用使用的时区。否则,将使用系统本地时间。

默认情况下,直方图的桶与 Prometheus 客户端中的默认桶相同:[https://github.com/prometheus/client_python#histogram](https://github.com/prometheus/client_python#histogram)。这意味着它们旨在覆盖从毫秒到秒的典型 Web/rpc 请求,因此您可能需要自定义它们。可以通过环境变量 RUNTIME_HISTOGRAM_BUCKETS(任务运行时间)和 LATENCY_HISTOGRAM_BUCKETS(任务延迟)来实现。桶应作为以逗号分隔的浮点值列表传递。例如:".005, .05, 0.1, 1.0, 2.5"

使用 --queue-list 来指定将监控其长度的队列列表(目前不支持队列的自动发现,请参阅限制/注意事项。您还可以使用 QUEUE_LIST 环境变量)。

如果您查看暴露的指标,您应该看到如下内容

$ http get http://localhost:8888/metrics | grep celery_
# HELP celery_workers Number of alive workers
# TYPE celery_workers gauge
celery_workers 1.0
# HELP celery_tasks Number of tasks per state
# TYPE celery_tasks gauge
celery_tasks{state="RECEIVED"} 3.0
celery_tasks{state="PENDING"} 0.0
celery_tasks{state="STARTED"} 1.0
celery_tasks{state="RETRY"} 2.0
celery_tasks{state="FAILURE"} 1.0
celery_tasks{state="REVOKED"} 0.0
celery_tasks{state="SUCCESS"} 8.0
# HELP celery_tasks_by_name Number of tasks per state
# TYPE celery_tasks_by_name gauge
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="RECEIVED"} 0.0
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="PENDING"} 0.0
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="STARTED"} 0.0
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="RETRY"} 0.0
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="FAILURE"} 0.0
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="REVOKED"} 0.0
celery_tasks_by_name{name="my_app.tasks.calculate_something",state="SUCCESS"} 1.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="RECEIVED"} 3.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="PENDING"} 0.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="STARTED"} 1.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="RETRY"} 2.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="FAILURE"} 1.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="REVOKED"} 0.0
celery_tasks_by_name{name="my_app.tasks.fetch_some_data",state="SUCCESS"} 7.0
# HELP celery_task_latency Seconds between a task is received and started.
# TYPE celery_task_latency histogram
celery_task_latency_bucket{le="0.005"} 2.0
celery_task_latency_bucket{le="0.01"} 3.0
celery_task_latency_bucket{le="0.025"} 4.0
celery_task_latency_bucket{le="0.05"} 4.0
celery_task_latency_bucket{le="0.075"} 5.0
celery_task_latency_bucket{le="0.1"} 5.0
celery_task_latency_bucket{le="0.25"} 5.0
celery_task_latency_bucket{le="0.5"} 5.0
celery_task_latency_bucket{le="0.75"} 5.0
celery_task_latency_bucket{le="1.0"} 5.0
celery_task_latency_bucket{le="2.5"} 8.0
celery_task_latency_bucket{le="5.0"} 11.0
celery_task_latency_bucket{le="7.5"} 11.0
celery_task_latency_bucket{le="10.0"} 11.0
celery_task_latency_bucket{le="+Inf"} 11.0
celery_task_latency_count 11.0
celery_task_latency_sum 16.478713035583496
celery_queue_length{queue_name="queue1"} 35.0
celery_queue_length{queue_name="queue2"} 0.0

限制

  • 在众多其他功能中,celery-prometheus-exporter 不支持多个队列的统计信息。据我所知,只有路由键通过事件 API 暴露,这可能足以确定最终的队列。

  • 这到目前为止只与 Redis 进行了测试。

  • 在此阶段,您应使用环境变量或参数(–queue-list)指定要监控的队列。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

celery-prometheus-exporter-1.7.0.tar.gz (11.4 kB 查看哈希值)

上传时间: 源码

构建版本

celery_prometheus_exporter-1.7.0-py2-none-any.whl (9.0 kB 查看哈希值)

上传时间: Python 2

由以下支持