InfluxDB+Grafana使用Bar Chart模板做图

721 阅读1分钟

背景说明

做成本核算图表时需要统计每个月的总成本, 接口采集上来的数据是每个计费项一条数据, 所以需要按月进行分组统计成本.

InfluxDB FLUX语句

import "regexp"

from(bucket: "myCost")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cost")
  |> map(fn: (r) => ({r with billingMonth: regexp.replaceAllString(r: /-[0-9]{2}$/, v: r.billingDate, t: "")}))
  |> group(columns: ["billingMonth"])
  |> sum(column: "_value")

这里的billingMonth是个临时字段

Grafana配置

使用上列语句选择Bar chart模版无法正常出图, 显示的效果如下:

image.png

因为经过billingMonth分组所以需要选择分组信息才能查到对应月份的数据

使用Labels to fields将标签的时间序列结果转换为一个表格, 其中每个标签的键和值都包含在表格结果中, 处理结果如下图所示:

image.png

此时仍然需要选择不同的月份来查看数据, 可以使用merge工具将多个月份的数据合并到一个表格中, 效果如下图所示:

image.png

此时点击Table view取消查看表格, 可以看到图表已经可以正常展示, 如下:

image.png

但是还有个问题, 鼠标移动到图表位置显示的数值是0, 此时可以使用Organize fields进行重命名, 重新排序, 隐藏等操作

_value列拖到下边最终Transform结果如下:

image.png

最终完成图表绘制

image.png

注意: 如果在绘制图表的过程中遇到grafana bar chart no numeric fields found这个提示, 且确认使用的是字段值是数字, 有可能是因为字段值是数字字符串, 可以使用Convert field type转换字段类型