如何使用 CDK 在 Fargate 中使用 json 日志?

问题描述 投票:0回答:1

我有一个在 Fargate 中运行的 docker 容器,它使用 log4j-layout-templateSpringboot ecs 格式 json 日志将 json 日志发送到控制台。

发出的日志如下所示:

{"@timestamp":"2022-03-22T09:08:16.838Z","ecs.version":"1.2.0","log.level":"INFO","message":"Server version name:   Apache Tomcat/8.5.76","process.thread.name":"main","log.logger":"org.apache.catalina.startup.VersionLoggerListener"}
{"@timestamp":"2022-03-22T09:08:16.838Z","ecs.version":"1.2.0","log.level":"INFO","message":"Server built:          Feb 23 2022 17:59:11 UTC","process.thread.name":"main","log.logger":"org.apache.catalina.startup.VersionLoggerListener"}

我使用以下内容配置我的 CDK:

var def = ingestGatewayTaskDefinition.addContainer(
  id + "Container",
  ContainerDefinitionOptions
    .builder()
    .image(fromEcrRepository(ecrRepository))
    .memoryLimitMiB(memory)
    .cpu(cpu)
    .environment(environment)
    .secrets(secrets)
    .logging(
      LogDriver.awsLogs(
        AwsLogDriverProps
          .builder()
          .logGroup(
            LogGroup.Builder
              .create(this, props.getServiceName())
              .logGroupName("dev/" + props.getServiceName())
              .retention(RetentionDays.ONE_DAY)
              .build()
          )
          .streamPrefix("dev/" + props.getServiceName())
          //.datetimeFormat("%Y-%m-%dT%H:%M:%SZ") //??
          .build()
      )
    )
    .build()
);

但在 Cloud Watch 中,消息部分是 json,不会被解析,但 应该是可发现的

如何解析这些字段?

这就是最终的样子: logs

我在Cloud Watch中寻找的是这样的:

@时间戳 ecs.版本 日志级别 留言 log.logger
2022-03-22T09:08:16.838Z 1.2.0 信息 服务器版本名称:... org.apache...
2022-03-22T09:08:16.838Z 1.2.0 信息 “服务器已建成:... org.apache...
amazon-web-services log4j2 aws-cdk
1个回答
1
投票

解析没有任何问题,您的事件正在被正确解析。

以下查询应该可以正常工作:

fields @timestamp, @message
| filter log.level="INFO"
| sort @timestamp desc

Log Stream UI 不显示推断的嵌套结构,但仍可用于查询。

© www.soinside.com 2019 - 2024. All rights reserved.