我使用Fluentd作为我在kubernetes中的日志发货人,带有一个使用RegExp提取插件元数据。该插件目前使用以下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
我试图修改regexp,这样它就可以将pod_name
值分成2部分-
我本可以使用连字符作为分隔符,并且使用它很容易,但是由于pod_name
本身可能包含连字符,这是不可能的。
因此,我必须找到一个模式,它将捕获一个将包含模式的组,而不包含最后两个连字符分隔的部分。
我已经构建了这个regexp,并对它进行了操作,但它的行为并不像预期的那样。会很乐意帮忙的。
发布于 2018-04-17 06:18:09
如果名为"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
https://stackoverflow.com/questions/49879264
复制