kubernetes pod 名称的正则表达式

RegExp for kubernetes pod name

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

  1. 派生自 deployment 的 pod 名称 name/explicitly 由 .yaml 配置

  2. 附加到 pod_name 的散列(与 pod_name 用 2 个连字符分隔)

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

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

我构建了 this regexp 并试用了它,但它的表现不如预期。希望对此有任何帮助。

如果名为 "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