Zabbix+Mysql_Grafana 进行zabbix 机器流量数据图形展示_计算95值

准备工作:(本文章中Zabbix使用的是MySQL)

  1. 自己部署数据库环境可选择MySQL、SQL、PostgreSQL任意一个     此数据库将与Grafana一起使用,作为Grafana的数据源
  2. Grafana 环境(网上自行搜索安装文章)
  3. Navicat 软件
  4. 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值

    图片

 

   至此,所有的调整都已完成。


若有不对的地方,欢迎指出;也希望给位精英能够提出更好的建议。

 

祝君一帆风顺!

 





posted @ 2025-12-26 16:44  Hope·  阅读(2)  评论(0)    收藏  举报
分享到:
target: function(trigger) { var pre = trigger.parentElement; var code = pre.querySelector('code'); return code ? code.innerText.trim() : pre.innerText.trim(); }