将Pod名称添加到流利的事件标签

时间:2019-09-17 07:50:36

标签: kubernetes fluentd

当前使用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>

从这一点开始,没有任何事件通过,也没有输出任何内容,就像所有事件都被丢弃一样。与我一开始所经历的类似。

2 个答案:

答案 0 :(得分:0)

我用了这个:

<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。

答案 1 :(得分:0)

您确定当前标签为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>

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