Kubernetes中Logstash采集Loki日志时Namespace、Pod、Container信息缺失
问题原因
你当前的Logstash配置里,filter阶段的if [kubernetes]分支永远不会执行——默认file输入插件仅读取日志文件内容,不会自动解析Kubernetes元数据(Pod、Namespace、容器名等),因此[kubernetes]字段不存在,无法添加对应标签到Loki中。
解决方案
以下两种方式任选其一即可:
方式1:用Grok解析日志文件名提取元数据
/var/log/containers/目录下的日志文件名格式固定为:<pod名称>_<命名空间>_<容器名称>-<容器ID>.log,可通过Grok插件解析path字段提取这些元数据:
修改后的完整配置:
input { file { id => "varlog" path => "/var/log/containers/*.log" # 添加通配符匹配所有日志文件 type => "var log" start_position => "beginning" } } filter { # 解析文件名提取K8s元数据 grok { match => { "path" => "/var/log/containers/%{DATA:pod}_%{DATA:namespace}_%{DATA:container_name}-%{DATA:container_id}\.log" } remove_field => ["container_id"] # 无需容器ID可删除该字段 } # 替换host为节点主机名(按需保留) mutate { replace => { "host" => "%{HOSTNAME}" } remove_field => ["tags"] } } output { stdout { codec => rubydebug} loki { url => "http://loki-loki-distributed-distributor.loki-benchmark.svc.cluster.local:3100/loki/api/v1/push" # 显式配置Loki标签,让Grafana识别这些维度 labels => { "namespace" => "%{namespace}" "pod" => "%{pod}" "container_name" => "%{container_name}" "host" => "%{host}" "type" => "%{type}" } } }
方式2:使用Logstash Kubernetes输入插件
若Logstash Pod拥有访问K8s API的权限,可直接用kubernetes输入插件替代file插件,它会自动收集Pod日志并附带完整K8s元数据:
input { kubernetes { host => "${NODE_NAME}" path => "/var/log/pods/" type => "var log" start_position => "beginning" } } filter { mutate { add_field => { "container_name" => "%{[kubernetes][container][name]}" "namespace" => "%{[kubernetes][namespace]}" "pod" => "%{[kubernetes][pod][name]}" } replace => { "host" => "%{[kubernetes][node][name]}" } remove_field => ["tags"] } } output { stdout { codec => rubydebug} loki { url => "http://loki-loki-distributed-distributor.loki-benchmark.svc.cluster.local:3100/loki/api/v1/push" labels => { "namespace" => "%{namespace}" "pod" => "%{pod}" "container_name" => "%{container_name}" "host" => "%{host}" "type" => "%{type}" } } }
注意:使用该插件时,需给Logstash的ServiceAccount绑定读取Pod、节点的权限,并在Pod环境变量中注入NODE_NAME。
关键注意点
无论采用哪种方式,必须在Loki输出配置中显式声明labels参数,将需要的字段映射为Loki标签,这样Grafana才能在界面上展示这些维度字段。
内容的提问来源于stack exchange,提问作者boycod3
相关产品推荐
相关产品推荐

