Grafana-InfluxDB


环境

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 查询*

  1. buckets()

解释:
buckets() 是 InfluxDB 的 Flux 语言中的一个函数,用于列出数据库中的所有桶(buckets)。

server 查询*

  1. from(bucket: "${Bucket}")
  2. |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  3. |> filter(fn: (r) =>
  4. r._measurement == "system" and
  5. r.object == "nodes"
  6. )
  7. |> keyValues(keyColumns: ["host"])
  8. |> group()
  9. |> keep(columns: ["host"])
  10. |> distinct(column: "host")

解释:
这段代码是使用 InfluxDB 2.x 的 Flux 语言编写的查询脚本,用于从指定的桶中查询特定条件的数据,并提取唯一的主机名(host)。下面是这段代码的详细解释:

  1. from(bucket: "${Bucket}"):从名为 ${Bucket} 的桶中获取数据。这里的 ${Bucket} 是一个占位符,你需要将其替换为实际的桶名。

  2. |> range(start: v.timeRangeStart, stop: v.timeRangeStop):设置时间范围,从 v.timeRangeStartv.timeRangeStop。这里的 v.timeRangeStartv.timeRangeStop 是变量,你需要根据实际情况替换为具体的开始时间和结束时间。

  3. |> filter(fn: (r) => r._measurement "system" and r.object "nodes"):过滤数据,只保留 _measurement 字段为 "system"object 字段为 "nodes" 的数据行。

  4. |> keyValues(keyColumns: ["host"]):将数据转换为键值对的形式,其中 host 字段作为键。

  5. |> group():对数据进行分组,这里没有指定分组的键,所以默认会按照所有列进行分组。

  6. |> keep(columns: ["host"]):保留 host 列,移除其他所有列。

  7. |> distinct(column: "host"):对 host 列的值进行去重,确保每个 host 值只出现一次。

这个查询的目的是从一个名为 ${Bucket} 的桶中查询 _measurement"system"object"nodes" 的数据,然后提取 host 列,去重后得到所有不同的 host 值。这个查询可能用于获取系统中所有不同的节点主机名。


local 2024年11月5日 19:23 收藏文档