检查气流工作者(芹菜)上是否有 运行 任务

Check if there are running tasks on an airflow worker (celery)

我想(以编程方式)检查特定 celery worker 是否有任何任务 运行。我不关心应该在哪里执行解决方案,它可以在 airflow-scheduler/db 机器上或在 airflow worker 机器本身上。

我检查过这个: 但是,这只会检查所有工作人员的 运行 任务。我想检查 特定工人是否没有 运行 任务 以便我可以停止该工人(低级工人)。
我也安装了花,我可以监控 Succeeded/Failed 任务,但我不确定这些对我有帮助。
不使用队列,但如果需要可以使用。
我可以监视进程以查看它们的父进程是否是气流 worker/celery 或其他什么?

有什么想法吗?

  1. 你可以在Flower中看到更多(只需点击一个特定的工人): 数据也可以通过 rest API 获得——正如你在 docs:
  2. 中看到的
GET /api/workers HTTP/1.1
  1. 不确定你的 Celery 代理是什么 - 如果它是 RabbitMQ,你可以使用 Prometheus 指标来获取队列大小(我写了一篇关于这个主题的 post)。

  2. Celery 支持 autoscale 调整池大小,这很有帮助。

  3. 您可以通过代码检查 celery 的 worker 并为每个 worker 获取 active 个任务。

  4. 我从未尝试过,但从您添加的参考来看,task_instance table 似乎有 external_executor_id 列 - 也许那是 worker编号?

最简单的事情(也是我每天做的事情)是执行类似 celery -A your.project inspect active -d <name of your celery node> (这也适用于 Airflow,当使用 Celery 执行程序时)。

关于关闭工人。 - 无需等待 worker 没有 运行 任务即可向其发送热关机信号。当您这样做时,worker 将从其队列中取消订阅并等待所有 worker 进程完成后再关闭。

如果你打算冷关机,那么你确实需要像你计划做的那样的事情,但工作人员总是有可能在你执行冷关机之前开始任务......

Queues are not used but they can be if needed.

嗯,不完全正确,因为默认队列是默认使用的...