【问题标题】:Check if there are running tasks on an airflow worker (celery)检查气流工作者(芹菜)上是否有正在运行的任务
【发布时间】:2021-01-15 17:12:19
【问题描述】:

我想(以编程方式)检查是否有任何任务正在特定的 celery worker 上运行。我不关心解决方案应该在哪里执行,它可以在气流调度程序/数据库机器上或气流工作机器本身上。

我已经检查过了:How do I check if there are DAGs running in Airflow (before restarting Airflow)? 但是,这只会检查所有工作人员的正在运行的任务。我想检查特定工作人员是否没有正在运行的任务,以便我可以停止工作人员(小型工作人员)。
我也安装了花,我可以监控成功/失败的任务,但我不确定这些对我有帮助。
不使用队列,但如果需要可以使用。
我可以监控流程以查看其父级是否是气流工作者/芹菜或其他什么?

有什么想法吗?

【问题讨论】:

    标签: celery airflow


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

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

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

    4. 我从未尝试过,但从您添加的 ref 看来,task_instance 表似乎有 external_executor_id 列 - 也许那是 worker id?

    【讨论】:

    • 我不知道你可以点击workers来获取这样的数据,这个非常有用,我可以直接查询Flower,这对我来说应该足够了。谢谢!
    【解决方案2】:

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

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

    如果您打算进行冷关机,那么您确实需要像您计划做的那样,但是工作人员总是有机会在您执行冷关机之前启动任务......

    不使用队列,但如果需要可以使用。

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

    【讨论】:

    • ItayB 的问题为我解答了这个问题,但我不知道暖关机的事情。虽然我主张仅在队列为空时才停止工作人员,但很高兴知道并格外安全。谢谢!
    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 2015-03-14
    • 2019-12-06
    • 1970-01-01
    • 2019-12-11
    • 2016-08-29
    • 2017-09-18
    • 2012-11-11
    相关资源
    最近更新 更多