【问题标题】:How to view all graphs in Celery Flower Monitor tab如何在 Celery Flower Monitor 选项卡中查看所有图表
【发布时间】:2014-11-20 06:41:19
【问题描述】:

我正在运行带有 RabbitMQ 3.4.1 后端的 Celery 3.1.16,并在 Python3.4 上使用 Flower 0.7.3 来监控我的 celery 任务。我有几个任务正在运行,我可以在 Celery Flower 的任务选项卡中查看它们的结果。

monitor 选项卡中,有 4 个部分。成功的任务、失败的任务、任务时间和代理。在这 4 个中,只有 Broker 视图显示“流量”图表。有没有设置可以让其他图表显示一些统计信息?

flowerconfig.py

# Broker settings
BROKER_URL = 'amqp://guest:guest@localhost:5672//'

# RabbitMQ management api
broker_api = 'http://guest:guest@localhost:15672/api/'

#Port
port = 5555

# Enable debug logging
logging = 'INFO'

主管:flower.conf

[program:flower]
command=/opt/apps/venv/my_app/bin/celery flower --app=celery_conf.celeryapp --conf=flowerconfig
directory=/opt/apps/my_app/celery_conf
user=www-data
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
stderr_logfile=/var/log/celery/flower.err.log
stdout_logfile=/var/log/celery/flower.out.log

在代理图中,我有两个队列,一个是绿色的,另一个是红色的。但是,图中显示的是红色的,但两者都在运行,我可以从“任务”窗口查看它们的结果。

我注意到 Flower 的 Workers 选项卡 下的 Config 选项卡 有一些特殊的地方。 CELERY_ROUTE 和 CELERY_QUEUES 显示为空列表,而所有其他字段看起来像是从 celeryconfig 文件中选择了正确的数据

BROKER_URL  amqp://guest:********@localhost:5672//
CELERYBEAT_SCHEDULE {}
CELERYD_PREFETCH_MULTIPLIER 0
CELERY_ALWAYS_EAGER False
CELERY_AMQP_TASK_RESULT_EXPIRES 60
CELERY_CREATE_MISSING_QUEUES    False
CELERY_DEFAULT_EXCHANGE default
CELERY_DEFAULT_QUEUE    default
CELERY_DEFAULT_ROUTING_KEY  ********
CELERY_IMPORTS  ['student.admission', 'student.schedule']
CELERY_INCLUDE  ['celery.app.builtins', 'student.schedule', 'student.admission']
CELERY_QUEUES   [{}, {}, {}, {}, {}]     #<==== Should it show an empty list?
CELERY_RESULT_BACKEND   amqp://guest:guest@localhost:5672//
CELERY_ROUTES   [{}, {}, {}, {}]     #<==== Should it show an empty list?
CELERY_STORE_ERRORS_EVEN_IF_IGNORED True
CELERY_TASK_RESULT_EXPIRES  3600

celeryconfig.py 如下所示:

BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'amqp://guest:guest@localhost:5672//'

#Task settings
CELERY_TASK_RESULT_EXPIRES = 3600
CELERY_AMQP_TASK_RESULT_EXPIRES = 60
CELERYD_PREFETCH_MULTIPLIER = 0 
CELERY_ALWAYS_EAGER = False
CELERY_CREATE_MISSING_QUEUES = False
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True

#Scripts to be imported 
CELERY_IMPORTS=('student.admission', 'student.schedule')

#Celery Exchanges, Queues, Routes
default_exchange = Exchange('default', type='direct')
student_admission_exchange = Exchange('student_admission_exchange', type='direct', durable=False)

CELERY_QUEUES = (
    Queue('default', default_exchange, routing_key='default'),
    Queue('student_admission_queue', student_admission_exchange, routing_key='admission', durable=False),
)
CELERY_ROUTES = (
                 {'student.admission.admit': {'queue': 'student_admission_queue','routing_key': 'admission'}},
                     )
CELERY_DEFAULT_QUEUE = 'default'
CELERY_DEFAULT_EXCHANGE = 'default'
CELERY_DEFAULT_ROUTING_KEY = 'default'

编辑

正如我所见,并不是唯一一个坚持这一点的人,但我将“缺失”图表的屏幕截图作为指导。

【问题讨论】:

  • 我认为最好的办法是在 Flower GitHub 问题跟踪器上打开一个问题。我认为缺少的 CELERY_ROUTES 和 CELERY_QUEUES 设置与此无关;搜索源代码并没有显示它们在任何地方都被使用。来源:我也有同样的问题。

标签: python rabbitmq celery flower


【解决方案1】:

在我的情况下,这不是 Flower 本身的问题,而是因为我的任务上的时间戳不准确(如消息“从 *** 大幅漂移可能意味着时钟不同步”所示)我的芹菜日志)。修复时钟可能是答案。

Flower 通过将事件上的时间戳与上次更新绘图的时间戳进行比较来确定事件是否是新的(因此需要绘制)(请参阅https://github.com/mher/flower/blob/master/flower/views/monitor.py#L47)。就我而言,这种比较总是 False,因此没有绘制任何事件。

【讨论】:

  • 我应该改变哪个时钟? Celery、Flower 在一台机器上,如果运行date,它会告诉我Sat Jan 10 19:49:34,这是正确的日期。如果我转到 Celery 中的任务选项卡,我会看到最后运行的任务显示 Received 2015-01-10 19:49:46.709552Started 2015-01-10 19:49:46.711021 两者都是正确的。那么我们在这里谈论的是哪个时钟?
  • 我不知道(我最后做了quick'n'dirty并调整Flower中的'if'子句,因为我的时间有限,我无法弄清楚根本原因) .如果我知道更多,我会更新我的答案。与此同时,我建议在其中一个监视器上打印出事件的时间戳,看看是否有任何问题。
  • 时间戳是在javascript上生成的,我觉得是错误的,为什么不在使用服务器时钟的python上生成呢?这发生在 Flower 0.9.1 上,这是迄今为止的最后一个版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 2016-07-20
  • 2023-04-02
  • 2022-01-12
  • 2017-10-31
  • 1970-01-01
相关资源
最近更新 更多