You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana中累加InfluxDB数据生成机器人状态占比饼图?

解决方案:基于InfluxDB和Grafana实现机器人状态时长占比饼图

可行性结论

完全可行,你当前的数据格式基本满足需求,只需通过正确的查询语句即可实现状态时长累加和饼图展示。

具体实现步骤

1. 确认InfluxDB数据结构

你当前写入的Line Protocol格式为:
Status,Status="Walking" Duration=50
这个结构逻辑没问题:

  • 测量名(measurement)为Status
  • 标签(tag)Status用来区分不同状态(如Walking/Charging/Sleeping)
  • 字段(field)Duration存储该状态的持续时长

2. 配置Grafana数据源

确保Grafana已连接到你的InfluxDB实例,选择对应的数据存储库,完成认证配置(如果需要)。

3. 编写累加查询语句

在Grafana面板编辑器中选择InfluxDB数据源,执行以下InfluxQL查询:

SELECT SUM("Duration") AS "总时长" FROM "Status" GROUP BY "Status"
  • SUM("Duration"):累加同一状态下所有时长记录,得到该状态的总时长
  • GROUP BY "Status":按状态标签分组,确保每个状态的总时长单独计算

4. 配置饼图面板

  • 添加Pie Chart面板(若未安装,需先在Grafana插件市场安装饼图插件)
  • 将查询结果中的Status设为饼图的标签(Labels),总时长设为数值(Values)
  • 可在面板设置中调整显示样式,比如开启百分比显示、调整图例位置等

5. 可选:数据格式优化建议

当前格式可用,但为了更清晰规范,建议:

  • 将标签名从Status改为State,避免与测量名重复,修改后的Line Protocol为:
    Status,State="Walking" Duration=50
  • 写入数据时添加纳秒级时间戳(若C#程序未自动生成),确保时序准确性,示例:
    Status,State="Walking" Duration=50 1699999999000000000

测试验证

用你提到的场景测试:行走10s→充电20s→行走10s,写入三条数据:

Status,State="Walking" Duration=10
Status,State="Charging" Duration=20
Status,State="Walking" Duration=10

执行查询后会得到:

  • Walking: 20
  • Charging:20
    饼图将显示两者各占50%,完全符合需求。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:50:39