如何对Prometheus指标的URI标签应用正则聚合API请求计数
解决带查询参数的API请求统一统计问题
你当前的PromQL会因为uri包含不同查询参数,把同一API的请求拆分开统计。要实现将带不同查询参数的同一API归为一类统计,需要先对uri标签做清洗,去掉查询参数部分再进行聚合,这里提供两种可行的写法:
方法1:使用regex_replace(Prometheus 2.27+版本支持)
这种方式更简洁,直接在分组时对uri做正则替换,去掉?及后面的所有内容:
sum by (method, regex_replace(uri, "\\?.*$", "")) ( rate(http_client_requests_seconds_count{app="$application", uri!~".*actuator.*"}[2m]) )
regex_replace(uri, "\\?.*$", "")会把/api/users?id=123这类uri转换成/api/users,同一路径的请求不管查询参数是什么,都会被归为一组统计。
方法2:使用label_replace(兼容旧版本Prometheus)
如果你的Prometheus版本低于2.27,可先用label_replace生成一个不带查询参数的新标签,再按新标签聚合:
sum by (method, clean_uri) ( label_replace( rate(http_client_requests_seconds_count{app="$application", uri!~".*actuator.*"}[2m]), "clean_uri", "$1", "uri", "^([^?]+)(\\?.*)?$" ) )
这里label_replace会给每个请求序列添加一个clean_uri标签,值为uri中?之前的路径部分,后续聚合就基于这个“干净”的标签进行。
内容的提问来源于stack exchange,提问作者Rajeev
相关产品推荐
相关产品推荐

