如何从数据流作业发送和过滤结构化日志

Ada*_*rky 5 logback google-cloud-dataflow apache-beam google-cloud-stackdriver

目标是存储来自不同应用程序/作业的审计日志,并能够通过一些 id 聚合它们。为此,我们选择了 BigQuery,因此我们需要从日志中获取结构化信息到 BigQuery。

我们成功地使用了部署在 kubernetes 引擎中的应用程序,该应用程序将输出日志作为 json 字符串记录到 stdout 并对其进行解析,其结构可以在 stackdriver 中看到为jsonPayload. 我们从本教程中获取了它。

但是,当我在数据流作业中使用相同的日志附加程序时,它不会被视为结构化消息,而是被视为jsonPayload.message字段中的字符串。

我需要两件事的结构:

实现这一目标的最简单方法是什么?

小智 0

我知道现在已经很晚了,但令人惊讶的是,根据我现在的研究(2022-03-22),这个用例仍然没有简单的答案。

您有 2 种方法可以解决您的问题:

  • [首选] 您将日志作为TaggedOutput生成,并使用writeTableRows函数在 BigQuery 中“手动”提取它们。(即,您根本不使用推荐的 SLF4J 来记录日志,而是生成日志,就好像它是要单独处理的单独但真实的数据一样)。
  • [没有尝试,也不会推荐,但仅供参考]您直接调用 Stackdriver API,或者您仍然按照上面的方式生成日志,但您直接通过 Java 客户端使用 Stackdriver API 批量“在最后记录它们”(不要调用它对每个日志同步,并尝试利用批处理以避免显着降低性能)。=> 这有限制