
kodhive/leekLeek是一款专为Celery任务设计的监控工具,其核心优势在于可通过单个容器实例同时监控多个消息代理(Broker),而其他工具通常仅支持单代理监控。此外,Leek提供环境分支管理、多应用支持、Google SSO认证、数据可视化图表、任务异常监控、高级过滤搜索、数据持久化及Slack通知等功能,旨在解决传统Celery监控工具的痛点,提供可靠的监控能力和良好的用户体验,帮助用户快速定位并响应任务问题。
Leek并非任务/worker控制工具(如终止/启动任务、重启worker),也非可安装/导入的软件包,而是以Docker镜像形式发布的完整应用。
通过Leek Agent,单个Leek实例可同时连接并监控多个消息代理的Celery任务,无需为每个代理部署独立实例。
为每个消息代理配置环境标签(如qa、stg、prod),任务事件将自动关联环境信息,支持按环境筛选任务数据。
支持通过GSuite组织账户或个人Gmail账户登录,提升访问安全性与便捷性。
任务事件并非存储于易失性内存,而是索引至Elasticsearch,确保数据持久化与快速检索/搜索。
提供设计精良的UI,相比命令行工具或简陋界面的替代方案,显著提升用户体验。
可配置通知规则,当任务满足特定条件(如状态、名称、环境、运行时间阈值)时触发Slack告警,及时响应关键事件。
通过异常名称聚合失败任务,统计每种异常的发生次数、恢复状态、待处理数、失败数及严重级别,快速识别系统问题。
生成多维度图表,包括任务状态分布、队列分布、Top 5执行任务、Top 5慢任务、任务执行趋势、队列趋势、失败趋势等,直观展示系统状态。
支持按任务状态、名称、环境、异常类型等多维度过滤,快速定位目标任务。
通过以下步骤快速启动Leek本地演示环境(包含Leek应用、消息代理、Elasticsearch、测试Celery worker及任务发布者):
bashcurl -sSL [***] > docker-compose.yml docker-compose up
bashcurl -sSL [***] > docker-compose.yml docker-compose up
服务启动后,访问 [***],创建与 LEEK_AGENT_SUBSCRIPTIONS 中 app_name 一致的应用(默认示例为 leek)即可开始使用。
以下是完整的docker-compose配置示例(以RabbitMQ为例),包含Leek应用、测试worker、发布者、消息代理及Elasticsearch:
yamlversion: "2.4" services: # 主应用 app: image: kodhive/leek environment: # 日志级别 - LEEK_API_LOG_LEVEL=INFO - LEEK_AGENT_LOG_LEVEL=INFO # 组件启用状态 - LEEK_ENABLE_API=true - LEEK_ENABLE_AGENT=true - LEEK_ENABLE_WEB=true # URL配置 - LEEK_API_URL=[***] - LEEK_WEB_URL=[***] - LEEK_ES_URL=[***] # 认证配置(本地演示禁用) - LEEK_API_ENABLE_AUTH=false # 代理订阅配置(监控目标) - | LEEK_AGENT_SUBSCRIPTIONS= [ { "broker": "amqp://admin:admin@mq//", # 消息代理地址 "backend": null, # 结果后端(可选) "exchange": "celeryev", # Celery事件交换机 "queue": "leek.fanout", # 消费队列名 "routing_key": "#", # 路由键 "org_name": "mono", # 组织名称 "app_name": "leek", # 应用名称 "app_env": "prod", # 环境标签 "prefetch_count": 1000, # 预取数量 "concurrency_pool_size": 2 # 并发池大小 } ] - LEEK_AGENT_API_SECRET=not-secret # Agent API密钥(演示用) ports: - 5000:5000 # API端口 - 8000:8000 # Web UI端口 depends_on: mq: condition: service_healthy # 测试Worker(仅演示用) worker: image: kodhive/leek-demo environment: - BROKER_URL=pyamqp://admin:admin@mq:5672 # 连接测试消息代理 depends_on: mq: condition: service_healthy # 测试任务发布者(仅演示用) publisher: image: kodhive/leek-demo environment: - BROKER_URL=pyamqp://admin:admin@mq:5672 command: > bash -c "python3 publisher.py" # 执行任务发布脚本 depends_on: mq: condition: service_healthy # 测试消息代理(RabbitMQ,仅演示用) mq: image: rabbitmq:3.8.9-management-alpine environment: - RABBITMQ_DEFAULT_USER=admin - RABBITMQ_DEFAULT_PASS=admin - "RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbit log [{console,[{level,error}]}]" ports: - ***:*** # 管理界面端口 - 5672:5672 # 消息代理端口 healthcheck: test: [ "CMD", "nc", "-z", "localhost", "5672" ] interval: 2s timeout: 4s retries: 20 # 测试Elasticsearch(仅演示用) es01: image: elasticsearch:7.10.1 container_name: es01 environment: - node.name=es01 - cluster.name=es-docker-cluster - cluster.initial_master_nodes=es01 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" command: ["elasticsearch", "-Elogger.level=ERROR"] healthcheck: test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] interval: 30s timeout: 30s retries: 3 ulimits: memlock: soft: -1 hard: -1 ports: - 9200:9200 # Elasticsearch端口
| 环境变量 | 说明 |
|---|---|
LEEK_API_LOG_LEVEL | API服务日志级别(如INFO、DEBUG) |
LEEK_AGENT_LOG_LEVEL | Agent服务日志级别 |
LEEK_ENABLE_API | 是否启用API服务(true/false) |
LEEK_ENABLE_AGENT | 是否启用Agent服务(true/false) |
LEEK_ENABLE_WEB | 是否启用Web UI(true/false) |
LEEK_ES_URL | Elasticsearch地址(用于数据存储) |
LEEK_API_ENABLE_AUTH | 是否启用认证(true/false,生产环境建议启用) |
LEEK_AGENT_SUBSCRIPTIONS | 代理订阅配置,JSON数组,包含各消息代理的连接信息及环境标签等 |
LEEK_AGENT_API_SECRET | Agent API密钥,用于内部通信鉴权 |
其中,LEEK_AGENT_SUBSCRIPTIONS 是核心配置,每个订阅项需指定消息代理地址(broker)、环境标签(app_env)、应用名称(app_name)等,以区分不同来源的任务事件。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务