我正在使用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中的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'
编辑
正如我所看到的那样,我并不是唯一坚持这一点的人,但我将"缺失"图表的屏幕截图作为指南.