如何修复PromQL中label_replace()导致非UUID URI丢失的问题?
修复PromQL查询解决UUID路径分组问题
问题根源
你原来的正则表达式仅匹配包含UUID格式的URI,不含UUID的URI无法匹配该正则,导致label_replace()不会为这些序列生成uri2标签。而sum by (method, uri2)会过滤掉没有uri2标签的时间序列,最终普通URI消失。
修复后的查询
sum(label_replace(rate(http_server_requests_seconds_count{}[$__rate_interval]), "uri2", "$1", "uri", "^(.+?)(/[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})?$")) by (method, uri2)
关键修改说明
- 正则末尾添加
?$,将UUID路径段标记为可选匹配,确保所有URI都能命中规则 - 用非贪婪匹配
(.+?)避免过度捕获路径内容,保证UUID前的路径被准确提取:- 含UUID的URI:
$1捕获UUID之前的路径部分,实现UUID移除 - 普通URI:
$1捕获整个原URI,uri2与原uri值一致,保留原有分组
- 含UUID的URI:
可选适配调整
如果你的UUID存在非标准格式(比如短UUID),可以调整正则中的长度限制,例如把{8}改为{0,8},但上述正则已覆盖标准UUID的8-4-4-4-12格式场景。
内容的提问来源于stack exchange,提问作者netikras
相关产品推荐
相关产品推荐

