Zabbix+Mysql_Grafana 进行zabbix 机器流量数据图形展示_计算95值
准备工作:(本文章中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: # 读取 CSV df = 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模式,如下图:

语句如下:
#单一接口
SELECT record_time AS time, CAST(incoming_bandWidth AS DECIMAL(10,2)) AS "Incoming Mbps", CAST(outgoing_bandwidth AS DECIMAL(10,2)) AS "Outgoing Mbps" FROM traffic.`Bridge_Aggregation2` WHERE $__timeFilter(record_time) ORDER BY record_time;
#多接口流量汇总
5、多接口流量汇总,需要将多接口的数据导入到数据库内,通过调用多个表进行合并计算

语句如下:
#A SELECT record_time AS time, CAST(incoming_bandWidth AS DECIMAL(10,2)) AS "3750_Po2 Incoming Mbps", CAST(outgoing_bandwidth AS DECIMAL(10,2)) AS "3750_Po2 Outgoing Mbps" FROM zabbitraffic.`3750_Po2_avg` WHERE $__timeFilter(record_time) ORDER BY record_time; #B SELECT record_time AS time, CAST(incoming_bandWidth AS DECIMAL(10,2)) AS "Juniper_ae Incoming Mbps", CAST(outgoing_bandwidth AS DECIMAL(10,2)) AS "Juniper_ae Outgoing Mbps" FROM zabbitraffic.`Juniper_avg` WHERE $__timeFilter(record_time) ORDER BY record_time;
Transformation (转换信息):配置如下,针对上行选择多接口的上行,针对下行选择多个接口的下行。

线条颜色:如果想要改变线条的颜色,点击线条描述左边的颜色快,进行线条颜色更高。数据展示样式,直线、弧线等可以根据自己的选择,在右侧Graph styles下的style进行调整。
坐标单位:右侧Axis➜Label 填写Mbps
底部数值单位显示:右侧standard options➜Unit 填写Mb/s (看个人意愿)
Show border:开启
如果需要计算95值,并进行展示:
Legend选项下Values:选择Max 和 95th%,可进行数值展示
调整完成后,我们点击右上角的保存(Save Dashboard)。
五、数据图形展示,可以根据自己的需求,读、写、管理员进行用户分组。回到首页,点击仪表板,进行创建的仪表图查看。
单接口流量

多接口,95值

至此,所有的调整都已完成。
若有不对的地方,欢迎指出;也希望给位精英能够提出更好的建议。
祝君一帆风顺!
本文来自博客园,作者:Hope·,转载请注明原文链接:https://www.cnblogs.com/Hope-/p/19405720
浙公网安备 33010602011771号