带时间戳的定时JSON数据可视化方案咨询(含Grafana需求)
方案一:生成静态图片文件(无编程基础友好)
准备工作
- 确认Linux虚拟机的Python环境:打开终端输入
python3 --version,若未安装则执行sudo apt install python3 python3-pip(Debian/Ubuntu系)。 - 安装数据处理与绘图依赖:运行
pip3 install pandas matplotlib。
数据处理与绘图脚本
创建名为 plot_prices.py 的文件,复制以下代码并修改 folder_path 为你的JSON文件实际存储路径:
import os import json import pandas as pd import matplotlib.pyplot as plt from datetime import datetime # 替换为你的JSON文件所在文件夹路径 folder_path = "/home/yourname/json_data" data = [] # 遍历所有JSON文件 for filename in os.listdir(folder_path): if not filename.endswith(".json"): continue # 从文件名提取时间 time_str = filename.split(".")[0] try: timestamp = datetime.strptime(time_str, "%Y-%m-%d_%H-%M-%S") except: continue # 读取文件内容 with open(os.path.join(folder_path, filename), "r") as f: items = json.load(f) # 提取价格(兼容price和super字段) prices = [] for item in items: if "price" in item: prices.append(item["price"]) elif "super" in item: prices.append(item["super"]) # 计算统计值 if prices: data.append({ "time": timestamp, "min": min(prices), "max": max(prices), "avg": sum(prices)/len(prices) }) # 排序并绘图 df = pd.DataFrame(data).sort_values("time") plt.figure(figsize=(12,6)) plt.plot(df["time"], df["min"], label="最低价格", marker="o") plt.plot(df["time"], df["max"], label="最高价格", marker="s") plt.plot(df["time"], df["avg"], label="平均价格", marker="^") # 配置图表样式 plt.title("价格统计随时间变化") plt.xlabel("时间") plt.ylabel("价格") plt.legend() plt.xticks(rotation=45) plt.tight_layout() # 保存图片 plt.savefig("price_trend.png") print("图片已保存为price_trend.png")
运行与自动更新
- 在终端执行
python3 plot_prices.py,当前目录会生成price_trend.png。 - 若需每30分钟自动更新:输入
crontab -e,在文件末尾添加*/30 * * * * /usr/bin/python3 /path/to/your/plot_prices.py(替换为脚本实际路径),保存退出即可。
方案二:搭建Grafana仪表盘(使用免费grafana.net账号)
步骤1:安装Telegraf数据代理
Telegraf用于读取JSON文件并发送数据到Grafana Cloud:
sudo apt update && sudo apt install telegraf sudo systemctl start telegraf sudo systemctl enable telegraf
步骤2:配置Telegraf
打开配置文件 sudo nano /etc/telegraf/telegraf.conf,完成以下修改:
- 替换输出配置(使用你的grafana.net账号中InfluxDB的URL、Token、组织名和桶名):
[[outputs.influxdb_v2]] urls = ["https://你的Grafana InfluxDB地址"] token = "你的InfluxDB令牌" organization = "你的组织名称" bucket = "你的桶名称"
- 在文件末尾添加JSON文件读取配置:
[[inputs.file]] files = ["/path/to/your/json/files/*.json"] data_format = "json" json_tag_keys = ["name"] json_string_fields = ["address", "Nr"] # 从文件名提取时间戳 timestamp = "filename" timestamp_format = "2006-01-02_15-04-05"
保存配置后重启服务:sudo systemctl restart telegraf
步骤3:创建Grafana仪表盘
- 登录grafana.net账号,进入「Dashboards」页面点击「New dashboard」。
- 添加面板,选择你的InfluxDB数据源,编写查询:
- 最低价格:
from(bucket: "你的桶名") |> range(start: v.timeRangeStart) |> filter(fn: (r) => r._field == "price" or r._field == "super") |> aggregateWindow(every: v.windowPeriod, fn: min, createEmpty: false) |> yield(name: "min") - 最高价格:将上述查询中的
fn: min改为fn: max - 平均价格:改为
fn: mean
- 最低价格:
- 调整图表样式(折线图、标题、坐标轴标签),保存仪表盘即可。
故障排查
若数据未显示,查看Telegraf日志:sudo journalctl -u telegraf,检查配置路径或凭证是否正确。
内容的提问来源于stack exchange,提问作者pekohub
相关产品推荐
相关产品推荐

