如何解决检查气流工作器芹菜上是否有正在运行的任务
我想(以编程方式)检查是否有任何任务在特定的 celery 工作器上运行。我不在乎解决方案应该在哪里执行,它可以在气流调度器/数据库机器上或气流工作机器本身上。
我已经检查过:How do I check if there are DAGs running in Airflow (before restarting Airflow)?
但是,这只会检查所有工作人员的正在运行的任务。我想检查特定工作人员是否没有正在运行的任务,以便我可以停止工作人员(缩小规模的工作人员)。
我也安装了花,我可以监控成功/失败的任务,但我不确定这些对我有帮助。
不使用队列,但可以在需要时使用。
我可以监控流程,看看他们的父母是气流工人/芹菜还是什么?
有什么想法吗?
解决方法
- 您可以在 Flower 中看到更多内容(只需点击特定工作人员):
数据也可通过 rest API 获得 - 正如您在 docs 中看到的:
GET /api/workers HTTP/1.1
-
不确定您的 Celery 代理是什么 - 如果是 RabbitMQ,您可以使用 Prometheus 指标来获取队列大小(我写了一篇关于此主题的 post)。
-
Celery 支持 autoscale 来调整池大小,这很有帮助。
-
您可以通过代码检查 celery 的 worker,并为每个 worker 获取 active 个任务。
-
我从未尝试过,但从您添加的参考来看,似乎
task_instance
表具有external_executor_id
列 - 也许这就是 worker id?
最简单的事情(也是我每天都在做的事情)是执行类似 celery -A your.project inspect active -d <name of your celery node>
(这也适用于 Airflow,当使用 Celery 执行器时)。
关于关闭工人。 - 无需等待 worker 没有正在运行的任务向其发送热关机信号。当您这样做时,worker 将从其队列中取消订阅,并在关闭之前等待所有工作进程完成。
如果你计划进行冷关机,那么你确实需要一些类似于你计划做的事情,但工作人员总是有可能在你执行冷关机之前开始一项任务......
>不使用队列,但可以在需要时使用。
嗯,不完全正确,因为默认情况下使用默认队列...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。