当前位置: 首页 > news >正文

使用Grafana与MySQL监控监控网络延迟

文章目录

  • 前言
  • python程序
  • 使用Grafana
    • 步骤1:安装和配置 Grafana
    • 步骤2:配置 Grafana 数据源
    • 步骤3:创建 Grafana 仪表盘
    • 步骤4:将 Grafana 仪表盘嵌入到博客中


前言

在网络应用中,网络延迟是一个重要的指标,它影响着用户体验和系统性能。本文将介绍如何使用Python编写一个程序来监控网络延迟(Ping)并将结果存储到MySQL数据库中。然后,我们将使用Grafana来创建仪表盘,实时展示网络延迟的数据。

当监控网络连接并将数据存储到数据库后,我们可以使用 Grafana 这样的工具来可视化数据并创建仪表盘,以便更直观地查看和分析监控结果。以下是将 Grafana 与上述代码结合使用的步骤:

python程序

当我们需要监控网络连接并记录 Ping 响应时间、丢包率和抖动等指标时,可以使用 Python 编程语言和一些相关库来实现。下面是一个示例代码,用于监控 Ping 并将数据存储到数据库中。

首先,确保已安装以下库:

  • ping3:用于执行 Ping 操作并获取响应时间。
  • pymysql:用于与 MySQL 数据库建立连接和执行 SQL 操作。
  • pytz:用于处理时区转换。

然后,创建一个配置文件 ping_config.ini,其中包含以下内容:

[ping]
target_address = 目标地址

target_address 替换为要 Ping 的目标地址。

接下来,将以下代码保存为 Python 脚本文件(例如,ping_monitor.py):

import ping3
import time
import statistics
from configparser import ConfigParser
import pymysql
from datetime import datetime
import pytz# 计算平均绝对偏差(Mean Absolute Deviation)
def calculate_mad(data):mean = sum(data) / len(data)deviations = [abs(x - mean) for x in data]mad = sum(deviations) / len(deviations)return mad# 监控 Ping 并将数据存储到数据库
def monitor_ping(config_file):# 读取配置文件config = ConfigParser()config.read(config_file)target_address = config.get('ping', 'target_address')# 建立与数据库的连接conn = pymysql.connect(user='用户名', password='密码', host='数据库主机', database='数据库名')cursor = conn.cursor()min_rtt = float('inf')max_rtt = 0total_rtt = 0rtt_values = []sent_packets = 0received_packets = 0while True:result = ping3.ping(target_address, size=64)sent_packets += 1if result is not None:result = result * 1000print(f"往返时间: {result}ms")min_rtt = min(min_rtt, result)max_rtt = max(max_rtt, result)total_rtt += resultreceived_packets += 1# 抖动rtt_values.append(result)else:print("请求超时")if received_packets > 0:avg_rtt = total_rtt / received_packetsprint(f"最小值: {min_rtt}ms || 最大值: {max_rtt}ms || 平均值: {avg_rtt}ms")packet_loss = (sent_packets - received_packets) / sent_packets * 100print(f"丢包率: {packet_loss}%")jitter = calculate_mad(rtt_values)print(f"抖动: {jitter}ms")# 将指标插入数据库表insert_query = "INSERT INTO ping_data (timestamp, target_address, min_rtt, max_rtt, avg_rtt, jitter, packet_loss, rtt) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"# 获取中国上海的时区对象shanghai_tz = pytz.timezone('Asia/Shanghai')# 获取当前时间current_time = datetime.now(shanghai_tz)# 将时间格式化为字符串,并应用于插入语句中的 timestamp 值insert_values = (current_time.strftime('%Y-%m-%d %H:%M:%S'), target_address, min_rtt, max_rtt, avg_rtt, jitter, packet_loss, result)# 执行插入操作cursor.execute(insert_query, insert_values)conn.commit()time.sleep(1)  # 每秒执行一次 Ping 操作# 配置文件路径
config_file = 'ping_config.ini'# 开始监控 Ping
monitor_ping(config_file)

使用时,确保将以下内容替换为正确的值:

  • 用户名:数据库用户名。
  • 密码:数据库密码。
  • 数据库主机:数据库主机地址。
  • 数据库名:要使用的数据库名称。

运行脚本后,它将每秒执行一次 Ping 操作,并将结果记录到数据库表 ping_data 中。表结构可以根据你的需求进行创建,包含以下字段:

  • timestamp:时间戳,记录插入数据的时间。
  • target_address:目标地址,记录 Ping 的目标地址。
  • min_rtt:最小往返时间。
  • max_rtt:最大往返时间。
  • avg_rtt:平均往返时间。
  • jitter:抖动。
  • packet_loss:丢包率。
  • rtt:Ping 的往返时间。

通过运行该脚本,你将获得每次 Ping 的往返时间、最小值、最大值、平均值、抖动和丢包率等信息,并将其存储在数据库中。你可以根据需要自定义数据库表的结构,

使用Grafana

步骤1:安装和配置 Grafana

  1. 下载并安装 Grafana,你可以从 Grafana 官方网站(https://grafana.com)获取适合你操作系统的安装程序。
  2. 启动 Grafana 服务。
  3. 在 Web 浏览器中访问 Grafana 的地址(默认为 http://localhost:3000)。
  4. 使用默认的用户名和密码(admin/admin)登录 Grafana。
  5. 在首次登录时,将提示修改密码。按照指示进行操作。

步骤2:配置 Grafana 数据源

  1. 在 Grafana 中,点击左侧导航栏中的 “Configuration”(配置)图标,然后选择 “Data Sources”(数据源)。
  2. 点击 “Add data source”(添加数据源)按钮。
  3. 选择适合你的数据库类型(如 MySQL)作为数据源类型。
  4. 根据你的数据库配置填写相关字段,如主机地址、用户名、密码和数据库名。
  5. 点击 “Save & Test”(保存并测试)按钮,确保连接成功。

步骤3:创建 Grafana 仪表盘

  1. 在 Grafana 中,点击左侧导航栏中的 “Create”(创建)图标,然后选择 “Dashboard”(仪表盘)。
  2. 点击 “Add new panel”(添加新面板)按钮。
  3. 在 “Visualization”(可视化)选项卡中,选择适当的图表类型,如折线图或仪表盘。
  4. 在 “Queries”(查询)选项卡中,选择之前配置的数据源,并编写查询语句以获取所需的数据。
  5. 在 “Panel”(面板)选项卡中,根据你的需求设置图表的标题、样式和其他属性。
  6. 点击 “Apply”(应用)按钮,保存仪表盘设置。

步骤4:将 Grafana 仪表盘嵌入到博客中

  1. 在 Grafana 中打开你创建的仪表盘。
  2. 点击右上角的 “Share”(分享)按钮。
  3. 在 “Share panel”(分享面板)选项卡中,选择适当的分享选项,如 “Direct link with time range”(带有时间范围的直接链接)。
  4. 复制生成的链接地址。
  5. 在你的博客文章中插入该链接地址,以嵌入 Grafana 仪表盘。

完成上述步骤后,你将能够在 Grafana 中创建自定义的仪表盘,并将其嵌入到博客文章中,以便读者可以直接查看监控结果的可视化图表。

相关文章:

使用Grafana与MySQL监控监控网络延迟

文章目录 前言python程序使用Grafana步骤1:安装和配置 Grafana步骤2:配置 Grafana 数据源步骤3:创建 Grafana 仪表盘步骤4:将 Grafana 仪表盘嵌入到博客中 前言 在网络应用中,网络延迟是一个重要的指标,它…...

互联网常见职称

1、管理层 CEO – Chief Executive Officer 首席执行官 VP – Vice President 副总裁 HRD – Humen Resource Director 人力资源总监 OD – Operations Director 运营总监 MD – Marketing Director 市场总监 GM – General Manager 总经理 PM – Production Manager 产品…...

UI设计软件有哪些好用和免费的吗?

在我们分享五个有用的原型工具之前,完成原型,将优化界面,这次是UI设计师的任务,UI设计软件对设计师非常重要,UI设计工具是否使用直接影响最终结果,然后有人会问:UI界面设计使用什么软件&#xf…...

Linux开发工具之编译器gcc/g++

文章目录 1.查看版本2.程序的翻译3.gcc指令3.1gcc hello.c -o hello3.2gcc -E hello.c -o hello.i3.3gcc -S hello.c -o hello.s3.4gcc -c hello.c -o hello.o3.5gcc hello.o -o hello 4.动静态库[详讲链接阶段]4.1初步认识4.2动态链接4.3静态链接 1.查看版本 gcc -v. 2.程序…...

【Kurbernetes资源管理】陈述式资源管理方式

陈述式 一、 理论部分1.1 管理K8s资源的基本方法1.1.1 陈述式资源管理方式1.1.2声明式资源管理方式1.1.3 GUI式资源管理方法 1.2 陈述式资源管理方式1.2.1 Kubelet工具简介1.2.2 kubectl 的基本语法1.2.3 Kubectl工具的自动补全功能 1.3 Kubernetes Service1.4 Service 的类型(…...

flink测试map转换函数和process函数

背景 在flink中,我们需要对我们写的map转换函数,process处理函数进行单元测试,测试的内容包括查看函数的输出结果是否符合以及函数内的状态是否正确更新,本文就记录几个测试过程中的要点 flink中测试函数 首先我们根据我们要测…...

【跟小嘉学习JavaWeb开发】第一章 开发环境搭建

系列文章目录 【跟小嘉学习JavaWeb开发】第一章 开发环境搭建 文章目录 系列文章目录[TOC](文章目录) 前言一、JDK的下载与安装1.1、关于JDK的版本问题 二、环境变量配置2.1、配置 JAVA_HOME、CLASSPATH2.2、配置path2.3、启动 cmd 三、编写代码、编译并执行3.1、编写代码&…...

CSS语法、选择器、属性

1.css语法 * 格式:选择器 {属性名1:属性值1;属性名2:属性值2;...}* 选择器:筛选具有相似特征的元素* 注意:* 每一对属性需要使用;隔开,最后一对属性可以不加 2.选择器:筛选具有相似特征的元素 * 分类:1. 基…...

深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图,有很多训练形成了一个训练log文件,于是需要读取log文件中的内容并绘制成曲线图。 如下实例,有一个log文件的部分截图,需要将其读取出来并绘制曲线图 废话不多说&…...

VB.NET—DataGridView控件教程详解

目录 前言: 过程: 第一步: 第二步: 第三步: 第四步: 第五步: 番外篇: 总结: 前言: DataGridView是.NET FormK中的一个Windows窗体控件,它提供了一个可视化的表格控件,允许用户以表格形式显示和编辑数据。它通常用于显示和编辑数据库…...

MCU测试科普|如何进行MCU芯片测试,具体流程是什么?

MCU芯片测试系统是一种专门用于检测MCU芯片性能和质量的综合性设备。它通常由硬件和软件两部分组成,硬件包括测试仪器、适配器、测试夹具等,用于连接被测MCU芯片和测试机,实现高效高精度的测试。软件部分通常包括测试程序、测试管理软件等&am…...

单向循环代码实现cpp

// 单向循环链表 class CircleLink { public:CircleLink(){head_ new Node();tail_ head_;head_->next_ head_;}~CircleLink(){Node* p head_->next_;while (p ! head_){head_->next_ p->next_;delete p;p head_->next_;}delete head_;}public:// 尾插法 …...

【原创】java+jsp+servlet简单图书管理系统设计与实现

摘要: 图书管理系统是一个专门针对图书馆管理而设计的系统,它可以帮助图书管理员有效的对图书进行管理,在图书管理系统的设计中,首先要考虑的是系统的需求分析,该系统的设计与实现涉及多个方面,包括数据库…...

JVM之jinfo虚拟机配置信息工具

jinfo虚拟机配置信息工具 1、jinfo jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。 使用jps -v 可以查看虚拟机启动时显示指定的参数列表,但是如果想知道未被显示指定的参数的系统默认值,除 …...

软件测试|PO设计模式在 UI 自动化中的实践

PO的思想最早是2013年由IT大佬Martin Flower提出的:https://martinfowler.com/bliki/PageObject.html 没错,就是他 — 没错,就是他 — 在他的文章里有这样一张经典样图,图片中展示了测试代码中直接操作HTML元素和使用PO模式将page对象封装成…...

如何上传自己的Jar到Maven中央仓库

在项目开发过程中,我们常常会使用 Maven 从仓库拉取开源的第三方 Jar 包。本文将带领大家将自己写好的代码或开源项目发布到 Maven中央仓库中,让其他人可以直接依赖你的 Jar 包,而不需要先下载你的代码后 install 到本地。 注册帐号 点击以…...

智能井盖传感器功能,万宾科技产品介绍

在国家治理方面,对社会的治理是一个重要的领域,一定要在推进社会治理现代化过程中提高市政府的管理和工作能力,推动社会拥有稳定有序的发展。在管理过程中对全市井盖进行统一化管理,可能是市政府比较头疼的难题,如果想…...

洛谷P4185 离线+并查集

好题&#xff0c;发现没有强制在线&#xff0c;可以离线操作 排序之后带集合点数的并查集就好了 #include<bits/stdc.h> using namespace std; const int N 1e510; int n,m; int p[N],sz[N];int find(int x){if(x!p[x])p[x] find(p[x]);return p[x]; } struct Node{in…...

遇到java.security.AccessControlException:access denied怎么办?

今天工作中遇到了如下报错&#xff0c;记录一下解决方案。 目录 问题 分析 结论 问题 这个问题出现在openjdk8启动网页端Java应用。 Java Exception:java.security.AccessControlException:access denied("java.net.SocketPermission""22.188.130.11:9000…...

c++对接CAT1400

最近工作中遇到需要对接1400协议,网上搜索不到c/c++的实现,所以记录一下自己的实现。 第一步注册: 1400是在http摘要认证的基础上做的,所以要去了解http摘要认证的流程 说明: 1.视图库通过用户分配,手动分配username,password给三方对接程序 2.三方对接程序第一次请求由…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...