如何在PromQL中从query标签提取SELECT语句中的表名?
从Prometheus指标的query标签提取表名的方法
你可以使用Prometheus内置的label_replace函数,结合正则表达式提取query标签中的表名。
基础实现
通过正则捕获表名部分,生成新的table_name标签存储结果:
label_replace(query_duration, "table_name", "$1", "query", "SELECT \\* FROM (.*)")
参数说明:
query_duration:你的目标指标名称"table_name":新增的标签,用于存放提取出的表名"$1":引用正则匹配到的第一个分组内容(即我们需要的TABLE_NAME)"query":指定要处理的目标标签"SELECT \\* FROM (.*)":正则表达式,(.*)负责捕获FROM之后的表名部分,注意星号*需要用反斜杠转义
适配格式差异的严谨正则
如果SQL语句存在多余空格或格式变化,可以用更精确的正则匹配:
label_replace(query_duration, "table_name", "$1", "query", "^SELECT\\s+\\*\\s+FROM\\s+(.*)$")
这个正则会匹配:
^SELECT:以SELECT开头(需要忽略大小写的话,可加(?i)前缀,比如(?i)^SELECT\\s+\\*\\s+FROM\\s+(.*)$)\\s+:匹配任意数量的空格(.*)$:捕获到字符串结尾的表名部分
内容的提问来源于stack exchange,提问作者dev333
相关产品推荐
相关产品推荐

