如何从AWS Fargate容器中运行的后台进程将日志发送到Cloudwatch?

时间:2019-03-14 06:54:59

标签: amazon-ecs amazon-cloudwatchlogs aws-fargate

我正在使用Fargate。我的容器正在运行两个进程。芹菜工人在背景中,而Django在前景中。前台进程将日志发送到stdout,因此AWS负责将Django日志发送到相关的Cloudwatch Log Group和Stream。

自从它在后台运行以来,如何将芹菜工作者的日志发送到(同一日志组内的另一个日志流)Cloudwatch?

3 个答案:

答案 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

如果使用控制台:

enter image description here

如果在cloudformation模板中,则为:

enter image description here

答案 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。