Python学习笔记之IP监控及告警
一、需求说明
作为一名运维工程师,监控系统必不可少。不过我们的监控系统往往都是部署在内网的,如果互联网出口故障,监控系统即使发现了问题,也会告警不出来,这个时候我们就需要补充监控措施,增加从外到内的监控,主要监控互联网出口IP地址的通断性。监控需求如下:
1、可以根据需要自定义监控IP地址;
2、监控可达秒级,比如间隔3秒,5次不通就告警;
3、可以通过邮件进行告警;
4、监控记录日志存档。
二、监控脚本实现思路
本次需求实现使用Python语言,Python的安装可以参考博文Ubuntu之Anaconda3安装,这里不再赘述。
1、确定模块依赖
日志记录和格式化输出需要使用logging库;系统日志目录获取等需要用到os模块;监控使用ping,需要用到ping模块;邮件告警需要用到smtplib。
2、定义监控参数和邮件参数
主要是用配置待监控IP地址,ping检查间隔,不可达次数,邮件参数等。
3、日志文件检查和定义日志格式
检查日志文件目录是否存在,不存在则创建。
3、定义邮件告警发生函数
使用Python中的smptlib库创建邮件告警函数,调用上述步骤参数中的信息。
4、定义监控函数
这个是最重要的函数,主要是创建一个true循环,通过ping记录响应时间,超时则认为不可达,连续超过5次则发送告警邮件。
- 初始化不可达次数为0
- 获取日期,创建日志文件
- ping检查目标地址,获取响应时间
- 如果不可达则不可达次数+1
- 如果不可达次数超过参数定义次数则发生告警邮件
- 如果ping检测结果正常不可达次数归零
- 服务暂停监控间隔时间后继续
5、定义主函数
三、监控脚本内容
# -*- coding: utf-8 -*
import time
import logging
import os
from datetime import datetime
from ping3 import ping
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart# 监控及邮件参数
TARGET_IP = "36.158.39.200" # 待监控IP
CHECK_INTERVAL = 3 # Ping监控间隔
UNREACHABLE_THRESHOLD = 5 # 不可达次数记录
LOG_DIR = "./checklog" #日志存储目录
EMAIL_SENDER = "wuhongsheng@email.com" # 发件邮箱
EMAIL_RECEIVER = "wuhongsheng@email.com" # 收件邮箱
SMTP_SERVER = "smtp.qiye.aliyun.com" # SMTP邮件服务器地址
SMTP_PORT = 465 # SMTP服务端口
EMAIL_USER = "wuhongsheng@email.com" # 邮箱账户
EMAIL_PASSWORD = "Wuhs@20240603" # 邮箱密码# 日志检查和格式化
if not os.path.exists(LOG_DIR):os.makedirs(LOG_DIR)logging.basicConfig(filename=os.path.join(LOG_DIR, f"{datetime.now().strftime('%Y-%m-%d')}.log"),level=logging.INFO,format="%(asctime)s - %(levelname)s - %(message)s",
)# 定义邮件告警函数
def send_alert():msg = MIMEMultipart()msg['From'] = EMAIL_SENDERmsg['To'] = EMAIL_RECEIVERmsg['Subject'] = f"Ping Alert: {TARGET_IP} is Unreachable"body = f"Warning: {TARGET_IP} has been unreachable for {UNREACHABLE_THRESHOLD} consecutive attempts."msg.attach(MIMEText(body, 'plain'))with smtplib.SMTP_SSL(SMTP_SERVER, 465) as server:server.login(EMAIL_USER, EMAIL_PASSWORD)server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string())# 定义监控函数
def monitor():unreachable_count = 0while True:#日志按天记录today = datetime.now().strftime("%Y-%m-%d")logging.root.handlers[0].baseFilename = os.path.join(LOG_DIR, f"{today}.log")# ping结果判断,记录连续中断次数response = ping(TARGET_IP, timeout=1)if response is None:unreachable_count += 1logging.warning(f"{TARGET_IP} is unreachable ({unreachable_count}/{UNREACHABLE_THRESHOLD})")if unreachable_count >= UNREACHABLE_THRESHOLD:send_alert()unreachable_count = 0 # else:unreachable_count = 0latency = round(response * 1000, 2) # logging.info(f"{TARGET_IP} is reachable, latency: {latency} ms")time.sleep(CHECK_INTERVAL)# 主函数
if __name__ == "__main__":monitor()
四、运行测试
1、启动检查脚本
(base) wuhs@jj100:~/python_scripts/test$ python InternetIpCheck.py &
2、检查输出日志
3、验证邮件告警
修改一个不可ping地址,然后重启监控脚本,3秒一次,连续5次不可达之后收到了监控告警邮件。
相关文章:
Python学习笔记之IP监控及告警
一、需求说明 作为一名运维工程师,监控系统必不可少。不过我们的监控系统往往都是部署在内网的,如果互联网出口故障,监控系统即使发现了问题,也会告警不出来,这个时候我们就需要补充监控措施,增加从外到内的…...
2024/11/30 RocketMQ本机安装与SpringBoot整合
目录 一、RocketMQ简介 1.1、核心概念 1.2、应用场景 1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收 4.1、添加maven依赖 4.2、yaml配置 4.3、生产者 4.4、消费者 4.5、接口 4.6、接口测试 一、R…...
解决“磁盘已插上,但Windows系统无法识别“问题
电脑上有2块硬盘,一块是500GB的固态硬盘,另一块是1000GB的机械硬盘,按下开机键,发现500G的固态硬盘识别了,但1000GB的机械硬盘却无法识别。后面为了描述方便,将"500GB的固态硬盘"称为X盘…...
解决vue3,动态添加路由,刷新页面出现白屏或者404
解决vue3,动态添加路由,刷新页面出现白屏或者404 1.解决出现刷新页面,出现404的情况 1.问题的出现 在做毕设的时候,在权限路由得到时候,我问通过router**.**addRoute(item)的方式,在路由守卫动态添加路由…...
大数据新视界 -- 大数据大厂之 Hive 数据质量监控:实时监测异常数据(下)(18/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
可视化建模以及UML期末复习篇----相关软件安装
作为一个过来人,我的建议是别过来。 一、可视化建模 <1>定义: 官方:一种使用图形符号来表示系统结构和行为的建模技术。 我:其实说白了就是把工作流程用图形画出来。懂不? <2>作用: 提高理解和分析复杂系统的能力。促…...
Flask项目入门—request以及Response
导入 request(请求)以及Response(响应)通过flask导入,如下: from flask import Blueprint, request, render_template, \jsonify, make_response, Response, redirect, url_for, abort requestÿ…...
【VUE3】【Naive UI】<n-button> 标签
【VUE3】【Naive UI】<n-button> 标签 **type**- 定义按钮的类型,这会影响按钮的颜色和样式。**size**- 设置按钮的大小。**disabled**- 布尔值,控制按钮是否处于禁用状态。**loading**- 布尔值,表示按钮是否处于加载状…...
接口测试工具:reqable
背景 在众多接口测试工具中挑选出一个比较好用的接口测试工具。使用过很多工具,如Postman、Apifox、ApiPost等,基本上是同类产品,一般主要使用到的功能就是API接口和cURL,其他的功能目前还暂未使用到。 对比 性能方面ÿ…...
autoware.universe源码略读(3.20)--perception:radar_tracks_msgs_converter
autoware.universe源码略读3.20--perception:radar_tracks_msgs_converter Overviewradar_tracks_msgs_converter_node Overview 这里看起来是非常简单的一个模块,作用就是把radar_msgs/msg/RadarTracks类型的消息数据转换到autoware_auto_perception_msgs/msg/Tra…...
【论文阅读】Multi-level Semantic Feature Augmentation for One-shot Learning
用于单样本学习的多层语义特征增强 引用:Chen, Zitian, et al. “Multi-level semantic feature augmentation for one-shot learning.” IEEE Transactions on Image Processing 28.9 (2019): 4594-4605. 论文地址:下载地址 论文代码:https:…...
说说Elasticsearch查询语句如何提升权重?
大家好,我是锋哥。今天分享关于【说说Elasticsearch查询语句如何提升权重?】面试题。希望对大家有帮助; 说说Elasticsearch查询语句如何提升权重? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…...
jeecgbootvue2重新整理数组数据或者添加合并数组并遍历背景图片或者背景颜色
想要实现处理后端返回数据并处理,添加已有静态数据并遍历快捷菜单背景图 遍历数组并使用代码 需要注意: 1、静态数组的图片url需要的格式为 require(../../assets/b.png) 2、设置遍历背景图的代码必须是: :style"{ background-image: url( item…...
Vue-常用指令-02
目录 Vue常用指令 实操 v-bind、v-model v-bind v-model 总结 v-on 总结 编辑 v-if、v-show v-if v-show 总结 v-for 总结 综合案例 编辑 Vue常用指令 Vue指令:在HTML文件或者HTML标签中涉及的带有v-..的指令都是Vue的指令。不同指令不同含义不同作用。v-…...
ESLint 配置文件全解析:格式、层叠与扩展(3)
配置文件系统处于一个更新期,存在两套配置文件系统,旧的配置文件系统适用于 v9.0.0 之前的版本,而新的配置文件系统适用于 v9.0.0之后的版本,但是目前还处于 v8.x.x 的大版本。 配置文件格式 在 ESLint 中,支持如下格…...
曲面单值化定理
曲面单值化定理(Uniformization Theorem)是复分析、几何和拓扑学中的一个重要结果。它为紧致黎曼曲面提供了标准化的几何结构,是研究复几何和代数几何的基础。以下是对曲面单值化定理的详细介绍以及其应用场景。 曲面单值化定理的陈述 基本版…...
数据预处理方法—数据增强、数据平衡
1.数据增强 1.1 原理 通过对数据进行变换增加数据的多样性,提高模型泛化能力,常用于图像和文本处理任务。 1.2 核心公式 例如:图像旋转: 其中,R()是旋转矩阵,是旋转角度。 1.3 Python案例 下面是一个…...
从扩散模型开始的生成模型范式演变--SDE
SDE是在分数生成模型的基础上,将加噪过程扩展时连续、无限状态,使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后,本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型…...
基于Java Springboot 协同过滤算法音乐推荐系统
一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue2、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&#x…...
【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?
【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势? 重要性:⭐⭐⭐ 💯 NLP Github 项目: NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练…...
win10中使用ffmpeg的filter滤镜
1 给视频加文字水印 1.1 添加播放时间 ffmpeg -i input.mp4 -vf "drawtextfontfileC\\:/Windows/fonts/consola.ttf:fontsize30:fontcolorwhite:timecode00\:00\:00\:00:rate25:textTCR\::boxcolor0x000000AA:box1:x20:y20" -y output.mp4 在视频的x20:y20位置添加t…...
shell编程7,bash解释器的 for循环+while循环
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
Flutter 1.2:flutter配置gradle环境
1、在android的模块中进行gradle环境配置 ①在 gradle-wrapper.properties文件中将url配置为阿里云镜像,因为gradle的服务器在国外,国内下载非常慢,也可在官网进行下载 gradle版本下载 gradle版本匹配 阿里云镜像gradle下载 可以通过复制链…...
LVS 负载均衡面试题及参考答案
目录 什么是 LVS 负载均衡?它的主要作用是什么? 为什么要使用 LVS 进行负载均衡? LVS 有哪些组成部分? 简述 LVS 的架构。 LVS 中有哪两种典型的架构?请简要说明它们的特点。 LVS 的工作原理是怎样的?简述 LVS 的工作原理。 解释 LVS 中的虚拟服务器(VS)概念。 …...
GaussDB(类似PostgreSQL)常用命令和注意事项
文章目录 前言GaussDB(类似PostgreSQL)常用命令和注意事项1. 连接到GaussDB数据库2. 查看当前数据库中的所有Schema3. 进入指定的Schema4. 查看Schema下的表、序列、视图5. 查看Schema下所有的表6. 查看表结构7. 开始事务8. 查询表字段注释9. 注意事项&a…...
c语言编程1.17蓝桥杯历届试题-回文数字
题目描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之…...
MVC core 传值session
MVC Entity Framework MVC Core session 》》 需要添加 Session 服务 和 Session中间件 builder.Services.AddSession(); app.UseSession(); 》》》控制器中 public IActionResult Privacy(){HttpContext.Session.SetString("key", "123");return View(…...
六:安装服务-compute node
一:工具、环境准备-controller node 二:OpenStack环境准备-controller node 三:安装服务-controller node 四:工具、环境准备-compute node 五:OpenStack环境准备-compute node 六:安装服务-compute node 七…...
【050】基于51单片机计步器【Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统ADXL345三轴加速度传感器LCD1602液晶显示AT24C02存储芯片按键控制。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片,LCD1602实时显示; 2、设计采用ADXL345三轴加速度传感器实现对行走步…...
qt QGraphicsPolygonItem详解
1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类,它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem,你可以定义和显示一个多边形,包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…...
OpenAI浅聊爬虫
前提 OpenAI越来越火,大有要干掉一片程序员的架势。在此,我们看看Sider(本文使用的OpenAI工具)对爬虫的看法。 爬虫的应用场景 爬虫技术(Web Scraping)有广泛的应用场景,以下是一些主要的应用…...
Java学习,ArrayList
ArrayList 是 Java 集合框架(Collections Framework)中的一个重要类,它实现了 List 接口。ArrayList 基于动态数组的数据结构,能够根据需要自动调整其大小。 关键特性 动态数组:ArrayList 底层使用数组来存储元素&…...
拓扑排序的两种实现
1 按节点结束时间进行排序 拓扑排序针对一张DAG,将所有节点按照结束时间从大到小依次排列。 算法描述为:初始化一个空链表 L L L,对DAG进行DFS,维护一个全局时钟 T T T,记录每个节点的开始时间(从白色变成…...
洛谷 P10491 [USACO09NOV] The Chivalrous Cow B C语言 bfs
题目: https://www.luogu.com.cn/problem/P10491?contestId217365 题目背景 农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋…...
C语言——指针初阶(三)
目录 一.指针-指针 代码1: 运行结果: 代码2: 运行结果: 代码3: 运行结果: 二.指针数组 例: 往期回顾 一.指针-指针 指针减去指针的前提:两个指针指向同一块空间。 指针减去指针…...
【Spring】Spring IOCDI:架构旋律中的“依赖交响”与“控制华章”
前言 🌟🌟本期讲解关于Spring IOC&DI的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么…...
安全基线检查
一、安全基线检测基础知识 安全基线的定义 安全基线检查的内容 安全基线检查的操作 二、MySQL的安全基线检查 版本加固 弱口令 不存在匿名账户 合理设置权限 合理设置文件权限 日志审核 运行账号 可信ip地址控制 连接数限制 更严格的基线要求 1、禁止远程连接数据库 2、修改…...
python 生成tts语音
之前一直使用微软、或者国内大厂的接口,网页操作比较麻烦,最近发现一个python库可以完美解决,在这里分享给大家 在这里 GitHub - rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsof…...
【链表】【删除节点】【刷题笔记】【灵神题单】
237.删除链表的节点 链表删除节点的本质是不用删除,只需要操作指针,跳过需要删除的节点,指向下下一个节点即可! 删除某个节点,但是不知道这个节点的前一个节点,也不知道头节点!摘自力扣评论区…...
Keil 5, Flash Timeout. Reset the Target and try it again.
stm32F303RBT6 Flash Timeout. Reset the Target and try it again. 需要pack DFP 1.4.0, FLASH 烧写算法需要包括1.4.0...
如何估算自然对流传热系数
介绍 一般来说,对流可以定义为通过加热流体(例如空气或水)的运动来传递热量的过程。 自然对流(对流的一种特定类型)可以定义为流体在重力作用下由于较热因此密度较小的物质上升,而较冷且密度较大的物质下…...
uniapp中scrollview配合swiper实现一个简单的tab标签页
<template><view class"tab-container"><!-- Tab 标签滚动容器 --><scroll-view scroll-x"true" class"tab-scroll" scroll-with-animation"true"><view class"tab-list"><viewv-for"…...
Redis3——线程模型与数据结构
Redis3——线程模型与数据结构 本文讲述了redis的单线程模型和IO多线程工作原理,以及几个主要数据结构的实现。 1. Redis的单线程模型 redis6.0之前,一个redis进程只有一个io线程,通过reactor模式可以连接大量客户端;redis6.0为了…...
JavaScript(JS)的对象
目录 1.array 数组对象 2.String 字符串对象 3.JSON 对象(数据载体,进行数据传输) 4.BOM 浏览器对象 5.DOM 文档对象(了解) 1.array 数组对象 定义方式1:var 变量名 new Array(元素列表); 定义方式…...
计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
二阶信息在机器学习中的优化;GPTQ算法利用近似二阶信息;为什么要求近似二阶(运算量大,ReLu0点不可微)
目录 二阶信息在机器学习中的优化 GPTQ算法利用近似二阶信息来找到合适的量化权重 详细解释 举例说明 近似二阶信息 定义与解释 举例说明 总结 为什么要求近似二阶(运算量大,ReLu0点不可微) 计算复杂性 精度需求 实际应用场景中的权衡 二阶信息在机器学习中的优…...
Spring事务管理学习记录
一、概念 事务(Transaction)是指一组操作的集合,这些操作要么全部成功,要么全部失败。事务的四大特性(ACID)确保了数据的完整性和一致性: 原子性(Atomicity):…...
Linux locate 命令详解
简介 locate 命令用于通过查询预构建的数据库来快速搜索文件和目录,该数据库包含来自文件系统的索引文件路径。它比 find 之类的命令要快得多,因为它不会实时搜索整个文件系统。 关键概念 locate 命令依赖于数据库,通常位于 /var/lib/mloca…...
uniapp手机端一些坑记录
关于 z-paging-x 组件,在ios上有时候通过弹窗去粗发它reload时会触发闪退,可能是弹框插入进去导致的DOM 元素已经被移除或者不可用,解决办法是加上他自带属性 :showRefresherWhenReload"true" 加上showRefresherWhe…...
快速排序算法
快速排序是一种非常高效的排序算法,采用分治策略来对一个数组进行排序。它由C. A. R. Hoare在1960年提出。快速排序的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分…...