准备工作:(本文章中Zabbix使用的是MySQL)
- 自己部署数据库环境可选择MySQL、SQL、PostgreSQL任意一个 此数据库将与Grafana一起使用,作为Grafana的数据源
- Grafana 环境(网上自行搜索安装文章)
- Navicat 软件
- PyCharm 软件
一、导出Zabbix上原始数据
1、打开Navicat 软件,点击左上角连接,选择自己Zabbix的数据库。这里我的数据库是MySQL

2、连接完成后,我们点击数据库,开始Zabbix原始数据查询:
我们点击数据库下的查询,依次输入一下SQL语句进行查询。
select host,hostid from hosts where host=""; #填写host名称,查询主机对应的主机 hostid(主机ID)
select itemid,name,key_ from items where hostid= and key_="net.if.out[ifHCOutOctets.20]"; #填写hostid,监控项键值,查询主机监控项目 所对应的itemid(项目ID)
select * from trends_uint where itemid="" and from_unixtime(clock)>='2024-05-01' and from_unixtime(clock)<'2024-06-01'; #填写项目ID,以及查询起止时间,进行时间段内数据查询
此时查询结果显示后,可以点击导出结果,导出文件格式建议选择.csv格式(csv默认保留UTF-8格式)

二、针对原始数据进行格式转换。
进行时间格式转换,原始数据内的record_time值为实际戳,我们需要更改为年/月/日格式,便于Grafana上的时间线查询
1、打开PyCharm 软件,添加.py文件,输入一下代码(代码内的文件存放目录,以自己导出数据存放目录为准),执行完成后,会把所有.csv文件内的时间戳更改为日期格式
import os import pandas as pd# 设置你的原始数据目录(使用原始路径中的双反斜杠或 r"路径" 防止转义) folder_path = r"D:\idc\BGP"# 遍历所有 .csv 文件 for filename in os.listdir(folder_path):if filename.endswith('.csv'):file_path = os.path.join(folder_path, filename)print(f"处理文件: {file_path}")try:# 读取 CSVdf = pd.read_csv(file_path)# 检查是否存在 clock 列if 'clock' in df.columns:# 转换 clock 时间戳为 datetime 格式df['datetime'] = pd.to_datetime(df['clock'], unit='s')# 保存覆盖原文件(或改成输出到新目录)df.to_csv(file_path, index=False)print(f"✅ 成功转换并保存: {filename}")else:print(f"⚠️ 跳过文件(无 'clock' 列): {filename}")except Exception as e:print(f"❌ 处理文件失败 {filename}: {e}")
三、自建数据库初始化配置,并导入数据
数据库部署完成后,使用Navicat 软件进行数据库的连接,并创建数据库以及数据库表
1、数据库表格式初始化(这里我是创建了一个库名为95,表明为Bridge_Aggregation2)。
2、右键新建的表,点击设计表

3、表格字段信息如下:(这里需要主要几个参数,record_time、incoming_flow、outgoing_flow,为了方便数据展示,我这边添加了incoming_bandWidth、outgoing_bandwidth)
注释:原始数据incoming_flow和outgoing_flow内的数值都是bps,为了显示以Mbps为单位,所以创建了incoming_bandWidth、outgoing_bandwidth字段

4、表格内数据导入,可以直接简单粗暴导入。
将本地csv文件内的数据,按照表格式进行排版,全选复制。csv内数据治理后的样式:(如果想要直接复制,在数据库备创建表格的时候,按照原始数据内的字段进行创建即可)

5、双机自己创建的数据库表,右键粘贴或Ctrl+V,然后点击左下角的 √ 进行数据导入操作,然后等待数据导入完成。

6、针对流量数据进行单位转换,将bps转换为mbps并将数值自动填入到incoming_bandWidth和outgoing_bandwidth
点击数据库下的查询,进行单位转换。
UPDATE 95.Bridge_Aggregation2 #输入表的目录 格式为数据库名.表名 SET incoming_bandWidth = incoming_flow / 1000000,outgoing_bandwidth = outgoing_flow / 1000000;
样式如下,然后点击运行等待运行结束后,刷新表格。

到此数据处理已经全部完成。接下来将进行Grafana上的图形数据展示。
四、Grafana数据展示
1、Grafana 初始化
更改初始密码、以及时间,时间以自己监控设备的时间为主,防止展示时出现市区错误。(这里我是中国大陆的时间,所以使用默认即可)

2、添加数据源,这里添加时,按照自己新搭建的数据库类型进行添加(本文章使用的MySQL,所以这里添加的MySQL),建议添加时,下放有测试

3、仪表盘创建
英文:点击左侧Dashboard➜ ➕(右上角) Create➜Dashboard➜➕Add new panel
中文:左侧仪表板➜ ➕新建(右上角)新建仪表盘➜➕添加可视化
创建时会让选择数据源,这里选择自己刚添加的数据源,
4、
为了快速进行数展示,这里我使用了Code模式

数据导入:
本地表格可以执行python,将多个csv文件内的时间戳更改为年/月/日格式
导入后的数据,进行单位换算,将incoming_flow和outgoing_flow内的bps转换为mbps