我在kubernetes中使用Fluentd作为我的日志托运者,plugin extracting metadata using a RegExp。
该插件目前使用以下正则表达式 -
'var\.log\.containers\.(?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log$'
用于解析类似结构的记录 -
kubernetes.soluto.var.log.containers.my-nice-api-67459fc4f6-g9vk7_namespace-name_container-name-1e1eeab6b6ce257cf6a7a03057159f3b0873dcd5c0cc713cd8c43ed66c5b6b03.log
我试图改变正则表达式,以便将pod_name
值分成2部分 -
从部署名称派生的pod名称/由.yaml配置明确指定
附加到pod_name的哈希值(与pod_name分隔2个连字符)
我可以使用连字符作为分隔符并轻松完成,但由于pod_name
本身可能包含连字符,因此这是不可能的。
我已经构建了this regexp并玩弄了它,但它没有按预期运行。希望对此有所帮助。
答案 0 :(得分:1)
如果名为“pod_name”的组应该只包含从部署名称派生的pod名称,请尝试:
kubernetes\.var\.log\.containers\.(?:(?<pod_name>[a-z0-9]+(?:-[a-z0-9]+)*))-(?<=-)[a-z0-9]+-(?:(?<=-)[a-z0-9]+(?=_))_(?<namespace>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log
如果名为“pod_name”的组应包含两个部分,即从部署名称派生的pod名称和附加到其上的哈希,请尝试:
kubernetes\.var\.log\.containers\.(?:(?<pod_name>[a-z0-9]+(?:-[a-z0-9]+)*-(?<=-)[a-z0-9]+-(?:(?<=-)[a-z0-9]+(?=_))))_(?<namespace>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log