使用RabbitMQ 3.4.1后端运行Celery 3.1.16并在Python3.4上使用Flower 0.7.3监视我的芹菜任务。我有几个任务正在运行,我可以在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
虽然在那里,在Broker图中,我有两个队列,一个绿色,而不是红色。但是,图中显示的是红色的,但两者都在运行,我可以从“任务”窗口查看结果。
我注意到Flower中工作人员标签下的配置标签中有一些特殊之处。 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'
修改
正如我所看到的那样,我并不是唯一坚持这一点的人,但我将“缺失”图表的屏幕截图作为指南。
答案 0 :(得分:1)
在我的情况下,这不是Flower本身的问题,而是因为我的任务的时间戳不准确(正如消息所显示的那样#34;来自***的实质性漂移可能意味着时钟不在同步&#34;在我的Celery日志中)。修复时钟可能就是答案。
Flower通过将事件的时间戳与上次更新图表的时间戳进行比较来确定事件是否是新的(因此需要绘制)(参见https://github.com/mher/flower/blob/master/flower/views/monitor.py#L47)。在我的情况下,该比较始终为False,因此没有绘制任何事件。