我正在使用Fargate。我的容器正在运行两个进程。芹菜工人在背景中,而Django在前景中。前台进程将日志发送到stdout,因此AWS负责将Django日志发送到相关的Cloudwatch Log Group和Stream。
自从它在后台运行以来,如何将芹菜工作者的日志发送到(同一日志组内的另一个日志流)Cloudwatch?
答案 0 :(得分:1)
如果无法将第二个进程移至单独的容器并照常进行记录,则可以将awslogs软件包安装到该容器中,并将其设置为读取后台进程的日志文件并将内容发送到CloudWatch。 但是我不推荐这种方法。
答案 1 :(得分:0)
同样,这不一定是基于' AND '
的问题。要登录芹菜,请检查http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging。
Fargate
对于使用Fargate进行记录,我将使用The worker won’t update the redirection if you create a logger instance somewhere in your task or task module.
If you want to redirect sys.stdout and sys.stderr to a custom logger you have to enable this manually, for example:
import sys
logger = get_task_logger(__name__)
@app.task(bind=True)
def add(self, x, y):
old_outs = sys.stdout, sys.stderr
rlevel = self.app.conf.worker_redirect_stdouts_level
try:
self.app.log.redirect_stdouts_to_logger(logger, rlevel)
print('Adding {0} + {1}'.format(x, y))
return x + y
finally:
sys.stdout, sys.stderr = old_outs
驱动程序。以下是如何按照此处记录的方式进行配置:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html
如果使用控制台:
如果在cloudformation模板中,则为:
答案 2 :(得分:0)
就像@ OK999一样,Celery旨在吞下日志,无论它是否在Fargate上。我们最终使用了Django LOGGING
配置,例如:
LOGGING = {
'version': 1,
# This only "disables" but the loggers don't propagate
# 'disable_existing_loggers': False,
...
'handlers': {
'console': {
'level': env.str('LOGGING_LEVEL'),
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
},
'loggers': {
...
# celery won't route logs to console without this
'celery': {
# filtered at the handler
'level': logging.DEBUG,
'handlers': ['console'],
},
...
我们必须进行此更改,才能过渡到Fargate。