使用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
- 下载并安装 Grafana,你可以从 Grafana 官方网站(https://grafana.com)获取适合你操作系统的安装程序。
- 启动 Grafana 服务。
- 在 Web 浏览器中访问 Grafana 的地址(默认为 http://localhost:3000)。
- 使用默认的用户名和密码(admin/admin)登录 Grafana。
- 在首次登录时,将提示修改密码。按照指示进行操作。
步骤2:配置 Grafana 数据源
- 在 Grafana 中,点击左侧导航栏中的 “Configuration”(配置)图标,然后选择 “Data Sources”(数据源)。
- 点击 “Add data source”(添加数据源)按钮。
- 选择适合你的数据库类型(如 MySQL)作为数据源类型。
- 根据你的数据库配置填写相关字段,如主机地址、用户名、密码和数据库名。
- 点击 “Save & Test”(保存并测试)按钮,确保连接成功。
步骤3:创建 Grafana 仪表盘
- 在 Grafana 中,点击左侧导航栏中的 “Create”(创建)图标,然后选择 “Dashboard”(仪表盘)。
- 点击 “Add new panel”(添加新面板)按钮。
- 在 “Visualization”(可视化)选项卡中,选择适当的图表类型,如折线图或仪表盘。
- 在 “Queries”(查询)选项卡中,选择之前配置的数据源,并编写查询语句以获取所需的数据。
- 在 “Panel”(面板)选项卡中,根据你的需求设置图表的标题、样式和其他属性。
- 点击 “Apply”(应用)按钮,保存仪表盘设置。
步骤4:将 Grafana 仪表盘嵌入到博客中
- 在 Grafana 中打开你创建的仪表盘。
- 点击右上角的 “Share”(分享)按钮。
- 在 “Share panel”(分享面板)选项卡中,选择适当的分享选项,如 “Direct link with time range”(带有时间范围的直接链接)。
- 复制生成的链接地址。
- 在你的博客文章中插入该链接地址,以嵌入 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界面设计使用什么软件…...
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 离线+并查集
好题,发现没有强制在线,可以离线操作 排序之后带集合点数的并查集就好了 #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怎么办?
今天工作中遇到了如下报错,记录一下解决方案。 目录 问题 分析 结论 问题 这个问题出现在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.三方对接程序第一次请求由…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
