RegExp for kubernetes pod name

时间:2018-04-17 13:20:38

标签: regex logging kubernetes fluentd

我在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部分 -

  1. 从部署名称派生的pod名称/由.yaml配置明确指定

  2. 附加到pod_name的哈希值(与pod_name分隔2个连字符)

  3. 我可以使用连字符作为分隔符并轻松完成,但由于pod_name本身可能包含连字符,因此这是不可能的。

    因此,我必须找到一个模式来捕获一个包含模式的组,而不包含最后两个连字符分隔的部分。

    我已经构建了this regexp并玩弄了它,但它没有按预期运行。希望对此有所帮助。

1 个答案:

答案 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