【问题标题】:How to send json logs through fluentd to stackdriver如何通过fluentd将json日志发送到stackdriver
【发布时间】:2019-07-25 10:23:48
【问题描述】:

我有 docker 容器以 json 格式写入日志。当它们在 GKE 上运行时,日志会很好地显示在 StackDriver 中,但是当我在某些带有 kubernetes(不是 GKE)的 VM 上运行相同的容器并使用 fluentd 将日志路由到 StackDriver 时,日志消息会转义并在“日志”下键。

示例:{"stream":"stdout","log":"{\"time\":\"2019-07-25T09:55:18.2393210Z\", ....

如何配置 fluentd 以获取与 GKE 上相同格式的日志(没有“log”:并且未转义)?

【问题讨论】:

    标签: kubernetes containers fluentd stackdriver


    【解决方案1】:

    有几件事情需要考虑:

    1. 您可以使用this指南配置fluentd的日志格式。

    2. 您可以尝试一些逆向工程。 GKE 使用的 Fluentd 配置可以在 Fluend Pod 上的以下路径学习:/etc/google-fluentd/config.d/containers.input.conf

    3. 您可以直接在名为fluentd-gcp-config-v1.2.5ConfigMap 中检查GKE 配置。有一些关于如何将 fluentd 配置为非托管的有用信息。更多详情here

    如果有帮助,请告诉我。

    【讨论】:

    • 我尝试通过 kubectl 和 github.com/kubernetes/kubernetes/blob/master/cluster/addons/… 进行配置。在这两种情况下,结果都没有改变:堆栈驱动程序中仍然出现“日志”属性
    • 有两种类型的 fluentd-gcp 配置,旧的和新的。后者似乎改变了“日志”字段。你用的是哪一个?($LOGGING_STACKDRIVER_RESOURCE_TYPES var 控制这个)
    • 将字段“日志”重命名为更通用的字段“消息”。这样,fluent-plugin-google-cloud 知道在从记录中提取“时间”、“严重性”和“流”后,将该字段展平为 textPayload 而不是 jsonPayload。
    • 我们需要 jsonpayload,所以 textpayload 无济于事
    猜你喜欢
    • 2020-02-15
    • 2019-04-13
    • 1970-01-01
    • 2017-04-01
    • 2022-07-07
    • 2019-08-27
    • 2020-01-18
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多