【问题标题】:Translating InfluxDB query to PromQL将 InfluxDB 查询转换为 PromQL
【发布时间】:2019-07-17 06:57:16
【问题描述】:
我正在尝试将查询从 InfluxDB Query 重写为 PromQL:
SELECT non_negative_derivative("wait_time_ms", 1s) FROM "sqlserver_waitstats" WHERE ("sql_instance" =~ /^$InstanceName$/) AND ("wait_type" =~ /HADR/) AND $timeFilter GROUP BY "wait_type"
有人可以帮忙吗?
【问题讨论】:
标签:
influxdb
promql
influxql
【解决方案1】:
相应的 PromQL 查询应如下所示:
rate(sqlserver_waitstats_wait_time_ms{sql_instance=~"$InstanceName", wait_type=~".*HADR.*"}[5m])
假设在将 Influx 行转换为 Prometheus 指标时进行了以下转换:
-
measurement 名称被添加到每个 field 名称之前,以便获得与 Prometheus 兼容的指标名称。例如,如果 measurement 是 sqlserver_waitstats,而字段名称是 wait_time_ms,则生成的 Prometheus 指标名称将是 sqlserver_waitstats_wait_time_ms,如上面的查询所示。
- 所有
tags 都被翻译成Prometheus 标签。例如,Influx 行中的sql_instance=foobar 标签被翻译为sql_instance="foobar" Prometheus 标签。
这是 VictoriaMetrics 在接受 Influx 线路协议数据时使用的默认转换 - 有关详细信息,请参阅 these docs。
请注意,PromQL 标签匹配器中的正则表达式默认绑定到标签值的开头和结尾。所以不需要在上面sql_instance的正则表达式中设置^和$,而我们需要将.*添加到wait_type正则表达式中,所以它匹配任何包含HADR的值而不是精确匹配.
我建议您也阅读PromQL tutorial for beginners,以便更好地了解 PromQL 和 InfluxQL 之间的区别。