正则提取Kubernetes日志无法获取labels下app字段问题求助
调整后完整正则(保留原有文件名匹配逻辑)
(?s).*?"labels"=>\{"app"=>"(?<app>[^"]+).*?(?<tag>[^.]+)?\.?(?<pod_name>[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log$
如果你的解析场景是直接从给出的K8s元数据日志内容中提取字段,不需要匹配日志文件名后缀,可以使用更简单的适配版本:
(?<pod_name>(?<="pod_name"=>")[^"]+).*?(?<namespace_name>(?<="namespace_name"=>")[^"]+).*?"labels"=>\{"app"=>"(?<app>[^"]+).*?(?<container_name>(?<="container_name"=>")[^"]+).*?(?<docker_id>(?<="docker_id"=>")[^"]+)
捕获字段说明
使用你提供的样例内容测试,可正确提取所有目标字段:
app:drupal-ms-brands-funyuns-qapod_name:drupal-ms-brands-funyuns-qa766f4ff-wn9namespace_name:web-systemcontainer_name:istio-proxydocker_id:52d054c501afc6c741d528648712684612846842788742155e824cbef13041b5bdfd11ftag:保留原有逻辑返回的对应值
适配说明
- 新增
(?s)修饰符开启单行匹配模式,支持跨换行匹配内容 - 新增
(?<app>[^"]+)命名捕获组,专门提取labels下的app字段值 - 原有正则逻辑完全保留,不会影响你之前已实现的字段提取能力
内容的提问来源于stack exchange,提问作者Devops-Learner
相关产品推荐
相关产品推荐

