【问题标题】:Add pod name to event tag in fluentd将 pod 名称添加到 fluentd 中的事件标签
【发布时间】:2019-09-17 07:50:36
【问题描述】:

目前使用kubernetes_metadata丰富事件:

<filter kubernetes.var.log.containers.**>
  @type kubernetes_metadata
</filter>

当前的tagkubernetes.namespace,我希望它是kubernetes.namespace.pod_name

我添加了rewrite_tag_filter,但它不起作用,更糟糕的是,它会丢弃所有事件:

<match kubernetes.**>
  @type rewrite_tag_filter
  <rule>
    key $['kubernetes']['pod_name']
    pattern ^(.+)$
    tag ${tag}.$1
  </rule>
</match>

我添加了@type stdout,而活动确实有['kubernetes']['pod_name'],所以我想这不是问题


更新: 我也尝试了建议的答案并补充说:

<filter kubernetes.**>
  @type record_transformer
  enable_ruby
  <record>
    # For future retagging.
    kubernetes_tag ${"kubernetes.%s.%s" % [record["kubernetes"]["namespace_name"], record["kubernetes"]["container_name"]]}
  </record>
</filter>

此时,我已将事件打印到stdout,它确实包含一个名为kubernetes_tag 的属性,其中namespace_namecontainer_name 链接在一起。
现在我添加了rewrite_tag_filter 块:

<match kubernetes.**>
  @type rewrite_tag_filter
  <rule>
    key     kubernetes_tag
    pattern ^(.+)$
    tag     $1
  </rule>
</match>

从此时起,没有任何事件通过,也没有任何内容被打印出来,好像所有事件都被丢弃了。和我一开始的经历一样。

【问题讨论】:

    标签: kubernetes fluentd


    【解决方案1】:

    我用过这个:

    <filter kube.**>
      @type record_transformer
      enable_ruby
      <record>
        # For future retagging.
        kubernetes_tag ${"kubernetes.%s.%s.%s" % [record["kubernetes"]["namespace_name"], record["kubernetes"]["labels"]["app"] || record["kubernetes"]["labels"]["k8s-app"] || record["kubernetes"]["labels"]["name"] || "unspecified-app-label", record["kubernetes"]["container_name"]]}
      </record>
    </filter>
    
    # Retag using the new field
    <match kube.**>
      @type rewrite_tag_filter
      <rule>
        key     kubernetes_tag
        pattern ^(.+)$
        tag     $1
      </rule>
    </match>
    

    我不建议在标签中单独使用 pod 名称,因为通常 pod 有多个容器,每个容器都有自己的日志记录模式。我在标签中使用 namespace_name + container_name 代替。

    【讨论】:

    • 谢谢,但它仍然不能解释我的设置有什么问题,我很高兴知道:)
    • enable_ruby 标志仅在 record_transformer 中支持,因此我首先使用转换器构建新字段,然后将其作为 rewrite_tag_filter 中的标签。这是 fluent 0.12
    • 我能够添加 kubernetes_tagnamespace_namecontainer_name 并且我可以看到正确的属性已添加到事件中,但是,因为我添加了第二个块 ( rewrite_tag_filter) 似乎没有任何事件发生,类似于我最初遇到的问题
    • 在尝试您的解决方案后,我已经用更多详细信息编辑了问题
    • 您如何查找结果事件?试试&lt;match kubernetes.**&gt; @type stdout &lt;/match&gt;
    【解决方案2】:

    您确定当前标签是namespace? 您可以尝试分两步检查:

    <match kubernetes.**>
      @type rewrite_tag_filter
      <rule>
        key kubernetes.namespace_name
        pattern ^(?!\s*$).+
        tag kubernetes.$1
      </rule>
    </match>
    
    <match kubernetes.**>
      @type rewrite_tag_filter
      <rule>
        key kubernetes.pod_name
        pattern ^(?!\s*$).+
        tag ${tag}.$1
      </rule>
    </match>
    

    另外,我已将正则表达式更改为非空白空格字符串。

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2023-03-18
      相关资源
      最近更新 更多