Python学习笔记之IP监控及告警

news2025/2/12 11:07:03

一、需求说明

  作为一名运维工程师,监控系统必不可少。不过我们的监控系统往往都是部署在内网的,如果互联网出口故障,监控系统即使发现了问题,也会告警不出来,这个时候我们就需要补充监控措施,增加从外到内的监控,主要监控互联网出口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_SENDER
    msg['To'] = EMAIL_RECEIVER
    msg['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 = 0
    while 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 += 1
            logging.warning(f"{TARGET_IP} is unreachable ({unreachable_count}/{UNREACHABLE_THRESHOLD})")
            if unreachable_count >= UNREACHABLE_THRESHOLD:
                send_alert()
                unreachable_count = 0  # 
        else:
            unreachable_count = 0
            latency = 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次不可达之后收到了监控告警邮件。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想YOGA Pro 14s至尊版电脑找不到独立显卡(N卡)问题,也无法安装驱动的问题

问题描述 电脑是联想YOGA Pro 14s至尊版,电脑上装的独立显卡是4060,一直是能够使用独立显卡的。然而有两次突然就找不到显卡了,NVIDIA CONTROL PANEL也消失了,而且也无法安装驱动。具体表现如下: 无法连接外接显示器…

【优先算法-滑动窗口——包含不超过两种字符的最长子串】

目录 1.题目解析 题目来源 测试用例 2.算法原理 1.入窗口 2.出窗口 3.更新结果 3.实战代码 代码解析 1.题目解析 题目来源 包含不超过两种字符的最长子串——牛客网 测试用例 2.算法原理 1.入窗口 这里的窗口限制条件为:窗口内不能超过两种字符,所以使用…

图片预处理技术介绍4——降噪

图片预处理 大家好,我是阿赵。   这一篇将两种基础的降噪算法。   之前介绍过均值模糊和高斯模糊。如果从降噪的角度来说,模糊算法也算是降噪的一类,所以之前介绍的两种模糊可以称呼为均值降噪和高斯降噪。不过模糊算法对原来的图像特征的…

Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...

全文链接:https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果,特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素:跳跃因子的自适应算法以及逆 Fisher 矩阵的计算,该逆 Fisher 矩阵可用作提议密…

cad软件打不开报错cad acbrandres dll加载失败

一切本来很顺利哒 但是,当我用快捷方式打开时,就出现了这个错误。进入文件路径,是有这个的; 在文件路径直接打开,也会提示错误 原因竟然是我改了个名字: 随便选的文件路径,空的,文件名为Acr…

HBU深度学习作业9

1. 实现SRN (1)使用Numpy实现SRN import numpy as npinputs np.array([[1., 1.],[1., 1.],[2., 2.]]) # 初始化输入序列 print(inputs is , inputs)state_t np.zeros(2, ) # 初始化存储器 print(state_t is , state_t)w1, w2, w3, w4, w5, w6, w7, …

泛化调用 :在没有接口的情况下进行RPC调用

什么是泛化调用? 在RPC调用的过程中,调用端向服务端发起请求,首先要通过动态代理,动态代理可以屏蔽RPC处理流程,使得发起远程调用就像调用本地一样。 RPC调用本质:调用端向服务端发送一条请求消息&#x…

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库,如 ​​OpenCV​​ 或 ​​​dlib​​​,但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。…

基于SpringBoot实现的编程训练系统(代码+论文)

🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…

【Spring】Spring IOCDI:架构旋律中的“依赖交响”与“控制华章”

前言 🌟🌟本期讲解关于Spring IOC&DI的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么…

webpack(react)基本构建

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的主要功能是将各种资源(如 JavaScript、CSS、图片等)视为模块,并将它们打包成一个或多个输出文件,以便…

mysql--二进制安装编译安装yum安装

二进制安装 创建用户和组 [rootlocalhost ~]# groupadd -r -g 306 mysql [rootlocalhost ~]# useradd -r -g 306 -u 306 -d /data/mysql mysql 创建文件夹并添加所属文件用户和组 [rootlocalhost ~]# mkdir -p /data/mysql [rootlocalhost ~]# chown mysql:mysql /data/mysql …

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示:ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

MongoDB集群分片安装部署手册

文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装(三台均需要操作)2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …

小程序-基于java+SpringBoot+Vue的乡村研学旅行平台设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

Ubuntu 包管理

APT&dpkg 查看已安装包 查看所有已经安装的包 dpkg -l 查找包 apt search <package_name>搜索软件包列表&#xff0c;找到与搜索关键字匹配的包 dpkg与grep结合查找特定的包 dpkg -s <package>&#xff1a;查看某个安装包的详细信息 安装包 apt安装命令 更新…

mac访达打开终端

选择文件夹打开 选中文件夹&#xff0c;然后右键即可&#xff1a; 在当前文件夹打开 在访达的当前文件夹长按option键 左下角出现当前文件夹路径 右键即可打开终端

数据结构--二叉树的创建和遍历

目录 引入 定义 性质 二叉树的创建 迭代法 注意事项&#xff1a; 递归法 注意事项&#xff1a; 二叉树的遍历 深度优先 广度优先 先序遍历&#xff08;前序遍历&#xff09; 中序遍历 后序遍历 层序遍历 查找树结构中是否存在某数值 方法一&#xff1a; 方法…

Linux零基础入门--Makefile和make--纯干货无废话!!

Makefile的概念与使用 Makefile其实是linux中的一种包含构建指令的文件&#xff0c;用于自动化构建 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff0c;…

数据结构与算法——N叉树(自学笔记)

本文参考 N 叉树 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 遍历 前序遍历&#xff1a;A->B->C->E->F->D->G后序遍历&#xff1a;B->E->F->C->G->D->A层序遍历&#xff1a;A->B->C->D->…