【问题标题】:RegExp for kubernetes pod nameKubernetes pod 名称的正则表达式
【发布时间】:2018-04-17 13:20:37
【问题描述】:

我在 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. 从部署名称派生的 pod 名称/由 .yaml 配置明确给出

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

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

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

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

【问题讨论】:

    标签: regex logging kubernetes fluentd


    【解决方案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
    

    【讨论】:

    • 谢谢,它完全成功了!我真的应该复习一下我的 RegExp 技能。
    猜你喜欢
    • 2010-09-21
    • 2011-05-11
    • 2019-08-09
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多