首页 > 解决方案 > 更改“Kinesis Data Analytics for Apache Flink”应用程序的 CloudWatch 日志输出

问题描述

有谁知道如何更改“Kinesis Data Analytics for Apache Flink”应用程序的 CloudWatch 日志输出。?

我想改变两点:

  1. 写入 CloudWatch 的 JSON 中的字段
  2. “消息”字段的内容/格式(即,每个“LOG.info”、“LOG.warn”等的格式 - 行)

#1 是最重要的。

写入 CloudWatch 的默认格式如下所示:

{
  "locationInformation": "",
  "logger": "",
  "message": "",
  "threadName": "",
  "applicationARN": "arn:aws:kinesisanalytics:eu-west-1:...",
  "applicationVersionId": "23",
  "messageSchemaVersion": "1",
  "messageType": "INFO"
}

是否可以以某种方式更改输出,以便每个 CloudWatch 条目改为:

{
  “EventTime”: "20201224T23:59:59.999Z",
  “LogLevel”: 5,
  “EventSource”: "ApplicationURI/Name",
  “Message”: ”foobar”
}

此处提到了使用 SLF4J ( https://docs.aws.amazon.com/kinesisanalytics/latest/java/cloudwatch-logs-writing.html ),尽管同一页面上提到的格式是上述默认格式。

Java 项目的 pom.xml 文件包括 aws-java-sdk-logs。它还排除了 log4j 和 slf4j。

  <artifactSet>
     <excludes>
       <exclude>org.slf4j:*</exclude>
       <exclude>log4j:*</exclude>
     </excludes>
  </artifactSet>

我看过这个: https ://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-logging.html 但是在本地测试时,更改 log4j.properties 会发生变化日志条目的“消息”字段。尽管存在于 .jar 文件的根目录中,但在 AWS 上运行时似乎并未加载该文件。即使我可以让 aws-java-sdk-logs 获取 log4j.properties 中的更改,更改此文件似乎也无法更改写入 CloudWatch 的 JSON 字段(仅“消息”格式)。

当应用程序在 AWS 上启动时,我可以看到它打印出这样的信息: -Dlog4j.configuration=file:/etc/flink/log4j-console.properties -Dlogback.configurationFile=file:/etc/flink/logback-console.xml 我希望在启动时将它们复制出来,更改它们,并在将道具设置为指向 JAR 时将它们包括在内。但是,当尝试在启动时从 Flink 应用程序代码中读取它们时,这两个文件似乎都是空的。

是否有一些相对直接的方法:

  1. 将字段重命名/删除/添加到写入 CloudWatch 的 JSON?
  2. 更改“消息”字段的格式?

标签: apache-flinkamazon-cloudwatchaws-java-sdkamazon-kinesis-analytics

解决方案


推荐阅读