环境
pve8,InfluxDB2.7,grafana11.3
influxdb2-2.7.10-1.x86_64
grafana-enterprise-11.3.0-1.x86_64
从 InfluxDB 数据库中查询数据
grafana面板
InfluxQL 语言 10048
https://grafana.com/grafana/dashboards/10048-proxmox/
Flux 语言 15356
https://grafana.com/grafana/dashboards/15356-proxmox-cluster-flux/
InfluxQL 语言
grafana中设置的变量
server 查询*
SHOW TAG VALUES FROM system WITH KEY=host WHERE object=’nodes’
storage 查询*
SHOW TAG VALUES FROM system WITH KEY=host WHERE object=’storages’
interfaces 查询*
SHOW TAG VALUES FROM nics WITH KEY=/^instance$/ WHERE instance ! /^veth/ AND instance !~ /^tap/ AND instance !~ /^fw/ AND instance != ‘lo’
Flux 语言
grafana中设置的变量
bucket 查询*
buckets()
解释:
buckets() 是 InfluxDB 的 Flux 语言中的一个函数,用于列出数据库中的所有桶(buckets)。
server 查询*
from(bucket: "${Bucket}")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) =>
r._measurement == "system" and
r.object == "nodes"
)
|> keyValues(keyColumns: ["host"])
|> group()
|> keep(columns: ["host"])
|> distinct(column: "host")
解释:
这段代码是使用 InfluxDB 2.x 的 Flux 语言编写的查询脚本,用于从指定的桶中查询特定条件的数据,并提取唯一的主机名(host)。下面是这段代码的详细解释:
from(bucket: "${Bucket}")
:从名为${Bucket}
的桶中获取数据。这里的${Bucket}
是一个占位符,你需要将其替换为实际的桶名。|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
:设置时间范围,从v.timeRangeStart
到v.timeRangeStop
。这里的v.timeRangeStart
和v.timeRangeStop
是变量,你需要根据实际情况替换为具体的开始时间和结束时间。|> filter(fn: (r) => r._measurement "system" and r.object "nodes")
:过滤数据,只保留_measurement
字段为"system"
且object
字段为"nodes"
的数据行。|> keyValues(keyColumns: ["host"])
:将数据转换为键值对的形式,其中host
字段作为键。|> group()
:对数据进行分组,这里没有指定分组的键,所以默认会按照所有列进行分组。|> keep(columns: ["host"])
:保留host
列,移除其他所有列。|> distinct(column: "host")
:对host
列的值进行去重,确保每个host
值只出现一次。
这个查询的目的是从一个名为 ${Bucket}
的桶中查询 _measurement
为 "system"
且 object
为 "nodes"
的数据,然后提取 host
列,去重后得到所有不同的 host
值。这个查询可能用于获取系统中所有不同的节点主机名。