服务器上实现在CPU占用超过50%并持续达到10秒时向Telegram发送警报信息,你可以使用一些脚本和工具来监控系统资源并发送通知。下面是一个基本的示例:

步骤概述:

安装所需的工具和库
编写监控脚本
设置定时任务

1. 安装所需的工具和库

在开始之前,你需要安装一些工具和库。使用 yum 或 apt-get 安装以下软件包:

sar(System Activity Reporter):用于系统资源监视。
jq:用于处理 JSON 数据。
curl:用于向 Telegram API 发送消息。

# 安装sar
sudo yum install sysstat   # 如果是 CentOS 或 RHEL
sudo apt-get install sysstat  # 如果是 Ubuntu 或 Debian

# 安装jq和curl
sudo yum install jq curl    # 如果是 CentOS 或 RHEL
sudo apt-get install jq curl  # 如果是 Ubuntu 或 Debian

2. 编写监控脚本

创建一个监控脚本,该脚本将检查 CPU 使用率并在满足条件时发送警报到 Telegram。以下是一个简单的示例脚本:

#!/bin/bash

# Telegram Bot API Token
TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
# Your Telegram chat ID
CHAT_ID="YOUR_TELEGRAM_CHAT_ID"

while true; do
    # 使用sar获取CPU使用率数据
    cpu_usage=$(sar -u 1 5 | tail -n 1 | awk '{print 100 - $NF}')

    # 检查CPU使用率是否超过50%
    if (( $(echo "$cpu_usage > 50" | bc -l) )); then
        # 如果超过50%,则开始计时
        count=0
        while (( $(echo "$cpu_usage > 50" | bc -l) )); do
            ((count++))
            sleep 1
            cpu_usage=$(sar -u 1 1 | tail -n 1 | awk '{print 100 - $NF}')
            # 检查连续时间是否达到10秒
            if ((count >= 10)); then
                # 发送警报到Telegram
                message="⚠️ CPU 使用率超过50%!当前使用率为 $cpu_usage %"
                curl -s -X POST https://api.telegram.org/bot$TOKEN/sendMessage -d chat_id=$CHAT_ID -d text="$message"
                break
            fi
        done
    fi

    sleep 5  # 等待5秒后重新检查
done

确保将 YOUR_TELEGRAM_BOT_TOKEN 和 YOUR_TELEGRAM_CHAT_ID 替换为你的 Telegram 机器人令牌和聊天 ID。

3. 设置定时任务

最后,将监控脚本设置为定时任务,以便它在服务器启动时自动运行,并持续监控 CPU 使用率。

使用 crontab -e 命令编辑 crontab 文件,添加以下行:

@reboot /path/to/your/script.sh >/dev/null 2>&1

将 /path/to/your/script.sh 替换为你实际存储脚本的路径。

保存并退出编辑器。现在,当服务器启动时,监控脚本将自动开始运行。

请注意,这只是一个简单的示例脚本,可能需要根据你的需求进行修改和调整。另外,确保在使用脚本之前对其进行测试,以确保其正常运行并发送正确的警报消息到你的 Telegram 帐号。

确保脚本具有执行权限,如果没有,可以使用 chmod 命令添加执行权限:

sudo chmod +x /root/script.sh

将/root/替换为脚本的路径

手动执行脚本

sudo ./script.sh

确认脚本是否在后台运行:

你可以使用 ps 命令查看正在运行的进程,检查脚本是否在后台运行:

ps aux | grep script.sh

如果脚本正在运行,你应该能够看到相关的进程信息。如果没有显示任何信息,说明脚本可能已经停止或未正确启动。

停止脚本的执行:

要停止正在运行的脚本,你可以使用 kill 命令加上脚本的进程 ID(PID)来终止它。首先找到脚本的进程 ID,然后使用 kill 命令终止:

ps aux | grep script.sh   # 找到脚本的 PID
sudo kill PID               # 使用实际的 PID 替换 PID

通过增加系统负载来模拟 CPU 使用率超过50%的情况,并观察是否会向 Telegram 发送警报信息。有几种方法可以增加系统负载:

方法一:使用 stress 工具

如果未安装 stress 工具,可以通过包管理器进行安装:

在 Debian/Ubuntu 系统中:

sudo apt-get install stress

在 CentOS/RHEL 系统中:

sudo yum install stress

然后,可以使用 stress 命令来模拟 CPU 负载。例如,以下命令将在系统上创建四个 CPU 负载任务:

stress --cpu 4

可以使用 Telegram Bot API 来发送消息。

以下是使用 curl 命令发送消息到 Telegram 的示例:

TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
MESSAGE="Hello, this is a test message from curl!"

curl -s -X POST https://api.telegram.org/bot$TOKEN/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE"

将 YOUR_TELEGRAM_BOT_TOKEN 替换为你的 Telegram Bot 令牌,YOUR_CHAT_ID 替换为你的 Chat ID,然后将消息内容替换为你想要发送的实际消息。

执行这个 curl 命令后,如果一切正常,你应该能够在 Telegram 上收到一条来自你的 Bot 的测试消息。

请确保你的服务器能够连接到互联网,并且没有被防火墙或其他网络设置阻止了 curl 命令与 Telegram API 的连接。

关于将BOT放入群组

你可以在 Telegram 中创建一个机器人,并向其发送 /start 命令。然后将此机器人添加到你想要获取 Chat ID 的群组中。接着,访问

https://api.telegram.org/bot<YourBOTToken>/getUpdates

(将 <YourBOTToken> 替换为你创建的机器人的令牌),然后查找包含群组信息的 JSON 数据,其中包括群组的 Chat ID

联系机器人@BotFather,输入命令 /setprivacy ,选择自己的机器人,设置为Disable模式即可。
若群组中机器人依然收不到普通消息,将机器人踢出群再拉进群,就可以收到消息了。

/setprivacy
Last modification:December 21st, 2023 at 09:35 am