来自 ECS/EC2 上运行的容器化应用程序的 CloudWatch 多行日志消息

Fra*_* CD 6 amazon-ec2 amazon-web-services docker amazon-cloudwatchlogs

我有一个 Web Api (.Net Core 3.0),在 AWS 集群 (ECS) 上运行,带有 EC2 实例。在任务定义中,我在容器中配置了 awslog 驱动程序以将日志写入特定日志组/区域。

\n

我遇到与 Web API 发出的多行日志消息相关的问题(每一行在 CloudWatch 中的不同日志消息中显示为 splittend)。经过研究,我发现了似乎与此事相关的信息,但我\xc2\xb4m 不确定某些点。

\n

我发现了一些有关 CloudWatch Agent 的信息,这些信息似乎与多行配置相关。CloudWatch Agent 是否与我的容器化 Web API 发出的日志消息相关?我的意思是,我的 Web API 向控制台发送日志,并通过 awslog 驱动程序将它们自动抛出到 CloudWatch Logs。所以,我不知道特工在这种情况下是否会做任何事情。

\n

关键是,在 CloudWatch Agent 文档中,我读到了与配置文件相关的内容,该文件似乎与多行问题相关:

\n

\xe2\x80\x9c multi_line_start_pattern:指定用于识别日志消息开始的模式\xe2\x80\x9d

\n

我不知道代理与 awslog 驱动程序有何关系。关于 awslog 驱动程序,我发现这些与多行问题相关的属性可以包含在我的任务定义中:

\n

\xe2\x80\x9c awslogs-multiline-pattern:此选项使用正则表达式定义多行起始模式\xe2\x80\x9d

\n

\xe2\x80\x9c awslogs-datetime-format:此选项以 Python strftime 格式定义多行开始模式\xe2\x80\x9d

\n

那么,CloudWatch Agent 和 awslog 驱动程序配置都可以解决多行问题吗?他们有关系吗?它们适用于不同的范围?

\n

提前致谢。

\n

小智 3

有同样的问题。通过在 logdriver 配置上使用 awslogs-multiline-pattern 属性修复了该问题。

我的应用程序具有 JSON 日志,其中包括 INFO、DEBUG、WARN、ERROR 或 CRITICAL,因此使用此属性,我将每个日志分类到各自的行中,如下所示:

LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-region: !Ref AWS::Region
              awslogs-group: some group
              awslogs-stream-prefix: ecs
              awslogs-multiline-pattern: '^(INFO|DEBUG|WARN|ERROR|CRITICAL)'
Run Code Online (Sandbox Code Playgroud)

这是使用多行模式之前的样子:

在此输入图像描述

这是之后:

在此输入图像描述

希望能帮助到你。