Celery的简单Prometheus度量导出器
项目描述
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8fc2d5909921c44f01c8c1b7d956d92e6966f2e14eec196bf60735e39a0e0991 |
|
MD5 | 7a191a0e26eb3d2eefe5e5e3462085dd |
|
BLAKE2b-256 | c53fc7ae53ad33c736c48067730d184f27d58cbd0e60031f321d5787534751d7 |
celery_prometheus_exporter-1.7.0-py2-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a3ba0d3340b546ae82b36fef7645ccbc54c2b696fc3df05bb9ee28a402e710e1 |
|
MD5 | aa842d5414f24c0f09b2de12b2b96955 |
|
BLAKE2b-256 | bd5d71ff513923ed105303b4697b9f982fcfc16ca29b3b27557005a7d001a346 |