当前使用kubernetes_metadata
丰富事件:
<filter kubernetes.var.log.containers.**>
@type kubernetes_metadata
</filter>
当前tag
是kubernetes.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_name
和container_name
链接在一起。 />
现在,我添加了rewrite_tag_filter
块:
<match kubernetes.**>
@type rewrite_tag_filter
<rule>
key kubernetes_tag
pattern ^(.+)$
tag $1
</rule>
</match>
从这一点开始,没有任何事件通过,也没有输出任何内容,就像所有事件都被丢弃一样。与我一开始所经历的类似。
答案 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>
此外,我将正则表达式更改为非空白空格字符串。