如何使用 CDK 在 Fargate 中使用 json 日志?
How do I consume json logs inside Fargate using CDK?
我在 Fargate 中有一个 docker 容器 运行,它使用 log4j-layout-template 将 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 并且未被解析,而是 should be discoverable。
如何解析这些字段?
这是最终的样子:
我在云看中找的是这个:
@timestamp
ecs.version
log.level
message
log.logger
2022-03-22T09:08:16.838Z
1.2.0
INFO
Server version name:...
org.apache...
2022-03-22T09:08:16.838Z
1.2.0
INFO
"Server built:...
org.apache...
解析没有问题,您的事件解析正确。
以下查询应该可以正常工作:
fields @timestamp, @message
| filter log.level="INFO"
| sort @timestamp desc
Log StreamUI不显示推断的嵌套结构,但仍可供查询。
我在 Fargate 中有一个 docker 容器 运行,它使用 log4j-layout-template 将 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 并且未被解析,而是 should be discoverable。
如何解析这些字段?
这是最终的样子:
我在云看中找的是这个:
@timestamp | ecs.version | log.level | message | log.logger |
---|---|---|---|---|
2022-03-22T09:08:16.838Z | 1.2.0 | INFO | Server version name:... | org.apache... |
2022-03-22T09:08:16.838Z | 1.2.0 | INFO | "Server built:... | org.apache... |
解析没有问题,您的事件解析正确。
以下查询应该可以正常工作:
fields @timestamp, @message
| filter log.level="INFO"
| sort @timestamp desc
Log StreamUI不显示推断的嵌套结构,但仍可供查询。