aeolux 发表于 5 天前

[新功能]流量告警+企业微信推送-服务器监控流量异常

最近腾讯的服务器被黑客攻击,本来这个服务器上没什么东西,就是挂几个域名,测试一些功能用。平时没什么流量,就按照流量计费的,一个月也就几分钱。突然预存的5块钱花光了。每天几毛钱的流量费用超出了平时的范围。经过分析后找到异常进程关闭后流量正常了。观察了一天没有发现异常。因为穷没有购买服务器和宝塔的一些高级功能。没有流量的监控报警。我看了下,首页可以在负载,CPU,内存和硬盘卡片上添加阈值的告警推送。没有流量的告警功能。为了防止再被攻击,流量异常,损失银子,做了下面的计划任务脚本。主要功能就是在流量异常的时候,就是超过一定的阈值,就向企业微信发送消息。企业微信的配置按照系统教程配置即可。这里主要体现脚本的功能。告警阈值可以自己配置,我默认设置的是1MB,平时流量几K,很少超过1MB,被攻击后流量保持在2MB左右,所以我这里设置1MB,拿去用可以按照自己的流量设置即可。网卡和python脚本路径如有不同根据自己情况设置。
希望对各位有帮助。


任务名称:流量告警+企业微信推送
任务类型:shell脚本
执行周期:每2分钟一次
执行用户:root默认
脚本内容:
#!/bin/bash
# 最终极简版:流量告警+企业微信推送(无冗余校验)
THRESHOLD=1024# 告警阈值:1024KB/s=1MB/s
NETWORK_CARD="eth0"
PANEL_DIR="/www/server/panel"
PANEL_PYTHON="/www/server/panel/pyenv/bin/python3"

# 1. 流量计算(核心)
OLD_RX=$(cat /sys/class/net/${NETWORK_CARD}/statistics/rx_bytes)
OLD_TX=$(cat /sys/class/net/${NETWORK_CARD}/statistics/tx_bytes)
sleep 1
NEW_RX=$(cat /sys/class/net/${NETWORK_CARD}/statistics/rx_bytes)
NEW_TX=$(cat /sys/class/net/${NETWORK_CARD}/statistics/tx_bytes)

DOWNLOAD=$(( (NEW_RX - OLD_RX) / 1024 ))
UPLOAD=$(( (NEW_TX - OLD_TX) / 1024 ))

# 2. 组装告警消息
ALERT_MSG=""
if [ $UPLOAD -gt $THRESHOLD ]; then
    UPLOAD_MB=$(( UPLOAD / 1024 ))
    ALERT_MSG="上行流量超标:${UPLOAD} KB/s(${UPLOAD_MB} MB/s),阈值${THRESHOLD} KB/s"
fi
if [ $DOWNLOAD -gt $THRESHOLD ]; then
    DOWNLOAD_MB=$(( DOWNLOAD / 1024 ))
    ALERT_MSG=${ALERT_MSG:+"${ALERT_MSG};"}"下行流量超标:${DOWNLOAD} KB/s(${DOWNLOAD_MB} MB/s),阈值${THRESHOLD} KB/s"
fi

# 3. 推送企业微信
if [ -n "$ALERT_MSG" ]; then
    FINAL_MSG="【服务器流量告警】${ALERT_MSG}"
    cd "${PANEL_DIR}" && ${PANEL_PYTHON} -c "
import sys
sys.path.insert(0, 'class/')
import public
public.push_msg('weixin', {'msg': '${FINAL_MSG}'})"
    echo "告警已推送:${FINAL_MSG}"
else
    echo "流量正常:上行${UPLOAD}KB/s,下行${DOWNLOAD}KB/s"
fi
页: [1]
查看完整版本: [新功能]流量告警+企业微信推送-服务器监控流量异常