python小脚本,实时监测服务器是否宕机状态,并发送到指定群组

news2024/9/20 20:45:09

一,前言

众所周知,市面上监控软件很多,有Zabbix,Prometheus等,但对于相对简单的功能,需要第一时间发现问题,如服务器宕机,zabbix和Prometheus都需要等几分钟才会报警。

想到最原始的方法,也是最简单的方法,就是ping 服务器,ping断开就是宕机。所以用一个小脚本即可。

二,脚本内容

1,脚本说明:

  • 每个服务器都有对应的名称,保存在字典 servers 中。

  • 如果某个服务器连续 10 秒无法 ping 通,则向 TG群发送服务器的名称和 IP(根据自己需求添加发送指定的媒体)。

  • 可以根据需求调整 time.sleep(10) 的时间间隔。

  • 状态跟踪: server_status 字典保存了每个服务器的当前状态,True 表示服务器在线,False 表示服务器不在线。

  • 状态变化检测:
    如果服务器从“在线”变为“不在线”,就会被标记为挂掉,发送“服务器挂掉”通知。
    如果服务器从“不在线”变为“在线”,就会被标记为恢复,发送“服务器恢复”通知。

  • 状态更新: 状态在每次检测后更新为当前状态。
    这样就能在服务器挂掉时收到通知,在恢复后也会及时得到通知。

  • 每次检测时挂掉服务器都会发送通知: 即使之前已经挂掉过,只要服务器继续挂掉,脚本会在每次循环中发送挂掉信息,如果只发送一次,会误发或者忽略,所以重复发送可以肯定服务器状态。

  • 恢复的服务器只发送一次通知: 通过跟踪状态,只在服务器从“不在线”状态切换到“在线”状态时发送“恢复”通知。重复发的挂掉信息则会停止。

2,脚本内容

import os
import time
import requests

# 服务器列表,格式为 { '服务器名称': '服务器IP' }
servers = {
    '测试服务器1': '192.168.203.132',
    'servername2': '192.168.1.2',
    'servername3': '192.168.1.3'
}

# 记录每个服务器的状态,True 表示在线,False 表示不在线
server_status = {name: True for name, ip in servers.items()}

# TG 机器人 API Token 和群 ID
telegram_token = '5249774617:asdasdasd.....'
chat_id = '-459853...'

# 向 Telegram 群发送通知的函数
def send_telegram_message(message):
    url = f'https://api.telegram.org/bot{telegram_token}/sendMessage'
    data = {
        'chat_id': chat_id,
        'text': message
    }
    try:
        requests.post(url, data=data)
    except Exception as e:
        print(f"发送消息失败: {e}")

# 检查服务器状态的函数
def check_servers():
    down_servers = []
    recovered_servers = []
    
    for name, ip in servers.items():
        response = os.system(f"ping -c 1 {ip} > /dev/null 2>&1")
        is_online = (response == 0)
        
        # 如果服务器挂掉(即 ping 不通)
        if not is_online:
            # 如果之前是在线的,刚刚挂掉,标记为挂掉并发送通知
            if server_status[name]:
                server_status[name] = False
            # 每次服务器挂掉时都发送通知
            down_servers.append((name, ip))
        
        # 如果服务器恢复(即 ping 通),只发送一次恢复通知
        elif not server_status[name] and is_online:
            recovered_servers.append((name, ip))
            server_status[name] = True

    return down_servers, recovered_servers

# 主循环
while True:
    down_servers, recovered_servers = check_servers()
    
    # 处理挂掉的服务器
    for name, ip in down_servers:
        send_telegram_message(f"❌{name} -Server DOWN,IP:({ip})")
    
    # 处理恢复的服务器
    for name, ip in recovered_servers:
        send_telegram_message(f"✅{name} -Server UP,IP:({ip})")

    time.sleep(10)  # 每 10 秒检测一次

三,脚本运行测试

原脚本由于是持续运行,所以是死循环,只要后台运行一次即可。

nohup python3 monitor.py >dev/null 2>&1 &

模拟测试结果,完成。
在这里插入图片描述
后续可以继续完善,可以写个检测此脚本的小shell程序,定时检查此脚本,万一机器重启,可以重启自动重启。

参考我以前文章:grep在shell脚本中使用,判断进程是否存在

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

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

相关文章

链路层和交换网_计算机网络

文章目录 链路层和交换网链路层多路访问链路和协议 ARPWeb 页面请求的历程 链路层和交换网 target: 分组是如何通过构成端到端通信路径的各段链路的?网络层的数据报是怎样被封装进链路层帧的呢?不同的通信链路能够采用不同的链路层协议吗&a…

【Linux】常见指令(2)

1.cp指令 cp指令用于复制文件或目录。 使用:cp [选项] [源文件或目录] [目标文件或路径] 常使用的选项是-r,即递归式复制。 接下来给两个使用示例来看: 当前有这些文件: 复制后: 2.mv指令 mv指令具有两个作用&am…

通义千问× DataV:AIGC “大时代”与可视化“小进步”

云布道师 阿里云数据可视化产品 DataV 借助“通义千问”大模型能力,推出“智能助手 DataV Copilot ”;通过代码自动生成、智能样式设计、“对话式”业务模版创建等功能,全面提速数据可视化应用开发效率。 一、DataV AI 探索之路&#xff1a…

闪存产品概述 NAND NOR FLASH

随着国内对集成电路,特别是存储芯片的重视,前来咨询我们关于NOR Flash,NAND Flash,SD NAND, eMMC, Raw NAND的客户越来越多了。这里我们专门写了这篇文章:1,把常用的存储产品做了分类; 2把一些产品的特点做…

Leetcode 188. 买卖股票的最佳时机 Ⅳ 状态机dp C++实现

Leetcode 188.买卖股票的最佳时机 Ⅳ 问题:给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次&…

Dubbo--高性能RPC框架

文章目录 Dubbo介绍Dubbo基本架构Dubbo是什么,它能做什么 Dubbo入门示例1.准备工作2.创建Maven项目3.添加依赖3.1提供者服务3.2消费者服务 4.创建服务接口5.实现服务接口6.配置服务提供者7.配置服务消费者8.启动 ZooKeeper9.运行服务提供者10.运行服务消费者 Dubbo介…

信号发生器在扫描模式下输出正弦波信号,示波器呈现的波形显示异常与不理想,这是为什么

如下图所示,在信号发生器扫描模式下输出正弦波信号,示波器呈现出的波形显示“异常”“不理想”情况,其原因可能与以下因素有关: 1、扫描速度与示波器刷新率不匹配 如果信号发生器的扫描速率(频率变化速度)…

Leetcode题解精讲之二叉树的基本理论(分类、四种遍历方式、存储方式)

目录 0 专栏介绍1 二叉树的基本概念2 二叉树的分类3 二叉树的遍历3.1 前序遍历3.1.1 递归实现3.1.2 迭代实现 3.2 中序遍历3.2.1 递归实现3.2.2 迭代实现 3.3 后序遍历3.3.1 递归实现3.3.2 迭代实现 3.4 层序遍历3.4.1 递归实现3.4.2 迭代实现 4 二叉树存储模式5 其他技巧 0 专…

直觉微调——简化语言模型对齐过程

人工智能咨询培训老师叶梓 转载标明出处 预训练语言模型在遵循指令和信任度方面仍有待提高。为了解决这一问题,研究者们提出了监督式微调(Supervised Fine-Tuning, SFT)和偏好优化(Preference Optimization, PO)两种方…

算法提高模板强连通分量tarjan算法

AC代码&#xff1a; #include<bits/stdc.h>using namespace std;typedef long long ll; const int MOD 998244353; const int N 2e5 10;//强联通分量模板 //tarjan算法 vector<int>e[N]; int n, m, cnt; int dfn[N], low[N], ins[N], idx; int bel[N];//记录每…

STL容器真的好用吗

大家都在用的c STL就一定是完美无缺的吗&#xff1f; 本文一针见血的指出常见STL顺序容器vector的致命bug。 在Scott Meyers的《Effective C》中&#xff0c;第一个条款明确指出&#xff0c;C是一个语言联邦。 这体现在&#xff1a; ● C&#xff1a;C继承了C语言的基础特性&a…

零基础学习Python(八)—— time模块、request模块、数据分析和自动化办公相关模块、jieba模块、文件操作和os相关模块的简单介绍

1. time模块 time()&#xff1a;获取当前时间戳&#xff0c;是一个数字 localtime()&#xff1a;返回一个time.struct_time对象&#xff0c;里面有年月日时分秒&#xff0c;还有星期几&#xff08;0表示星期一&#xff09;和今年的第几天 import timeprint(time.time()) pri…

我又被Spring的事务坑了,用户兑奖之后,什么东西都没收到!!

没错&#xff0c;我又被事务坑了&#xff01; 即上次的mq发送消息之后&#xff0c;业务代码回滚&#xff0c;导致发了一条中奖消息给用户&#xff01;&#xff01;&#xff0c;这次又被spring的事务坑了 这次是这样的&#xff0c;一个兑奖接口进来&#xff0c;我们先改变了这…

输入一段文字,瞬间生成应用。Furion低代码平台与AI协同工作,展现出非凡的效率与精准。

引言&#xff1a;展示问题背景 在当今快速变化的商业环境中&#xff0c;企业面临着前所未有的挑战。随着数字化转型的加速&#xff0c;企业对应用开发的需求日益增加。然而&#xff0c;传统的应用开发流程通常需要耗费大量时间和资源&#xff0c;从需求分析、设计、编码、测试到…

概念科普|ChatGPT是什么

一、引言 在人工智能的迅猛发展中&#xff0c;ChatGPT作为前沿技术的代表&#xff0c;其原理和运作方式成为了研究和讨论的热点。 常有观点将ChatGPT比喻为一种高级词语接龙&#xff0c;通过海量数据的学习与训练&#xff0c;机器能够根据给定的文本内容续写出下文&#xff0…

小米商业营销陈高铭:品牌应该多方整合,关注高质量营销 | SMARTIES CHINA 2024终审报道②

小米互联网业务部商业营销品牌总经理 陈高铭 近日&#xff0c;SMARTIES CHINA 2024终审活动在苏州音昱水中天落下帷幕。来自各行业的40位品牌广告主代表&#xff0c;历时两天时间&#xff0c;通过紧张的评审和精彩的讨论&#xff0c;从178个优秀入围案例中评选出了每个类别的金…

数据分析-螺旋环状气泡图

1 原理 采用阿基米德螺线原理&#xff0c;即以一个点匀速离开一个固定点的同时又以固定的角速度绕该固定点转动而产生的轨迹。具体原理见&#xff1a;阿基米德螺线。坐标轴公式为&#xff1a; 其中x为横坐标&#xff0c;y为纵坐标&#xff0c;r为离中心点的半径&#xff0c;为坐…

茶叶商家开店拓客线上发展增长生意

部分地区的人群酷爱喝茶&#xff0c;其他地区也有大量购茶者&#xff0c;其爱好者对茶叶的种类、年份季节口感度、价格等有着较高要求&#xff0c;花茶、绿茶、红茶、白茶、龙井、碧螺春、乌龙茶等&#xff0c;国内国外庞大市场&#xff0c;不能仅局限于本地附近客户&#xff0…

【ArcGIS】栅格计算器原理及案例介绍

ArcGIS&#xff1a;栅格计算器原理及案例介绍 栅格计算器&#xff08;Raster Calculator&#xff09;原理介绍案例案例1&#xff1a;计算栅格数据平均值 参考 栅格计算器&#xff08;Raster Calculator&#xff09;原理介绍 描述&#xff1a;在类似计算器的界面中&#xff0c;…

跨境独立站支付收款常见问题排雷篇1.0丨出海笔记

最近小伙伴们在社群讨论挺多关于独立站支付问题的&#xff0c;鉴于不少朋友刚接触独立站&#xff0c;我整理了一些独立站支付相关的问题和解决方案&#xff0c;供大家参考&#xff0c;百度网上一堆媒体的那些软文大家就别看了&#xff0c;都是软广或者抄来抄去&#xff0c;让大…