宝塔负载排行工具:自动抓取进程推送运维群
运维场景中的进程监控痛点
在服务器日常维护中,进程资源占用异常是导致业务响应变慢的常见原因。传统做法通常由运维人员手动登录服务器执行 top 或 ps 命令查看,但这种方式存在明显局限:发现问题往往滞后,且无法形成持续记录。当多台服务器同时运行多个业务进程时,仅靠人工巡检很难及时捕捉到瞬间的负载尖峰。
宝塔面板配合脚本实现定时抓取
宝塔面板提供计划任务功能,可结合Shell脚本实现对服务器进程负载的周期性采样。一个可行的实现思路是:
- 编写脚本调用
ps aux --sort=-%cpu或top -bn1获取当前CPU与内存占用排名靠前的进程列表。 - 将抓取结果与设定阈值(如CPU超过80%)进行比较,筛选出异常进程。
- 将符合条件的数据格式化后,通过企业微信群机器人或钉钉机器人的Webhook地址发送到运维群。
将该脚本添加到宝塔的计划任务中,并选择执行周期(如每分钟或每5分钟),即可实现接近实时的自动监控。
推送格式与告警策略
为避免消息轰炸,建议脚本中加入去重与冷却机制,例如同一进程持续异常时,仅每10分钟推送一次。推送内容可包含:
- 服务器名称/IP
- 检测时间
- 进程PID与名称
- CPU占用率与内存占用率
- 进程运行时长及启动命令
以下为推送消息的典型结构:
【负载告警】服务器:web-01(192.168.1.10) 时间:2025-06-20 14:30:01 进程:java(PID 2231) CPU:87.5% | 内存:62.0% 命令:/usr/bin/java -Xmx1g -jar app.jar
脚本示例(含企业微信机器人推送)
以下是一个简易的参考脚本,读者可根据实际环境修改阈值和Webhook地址:
#!/bin/bash
CPU_THRESHOLD=80
WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"
ps aux --sort=-%cpu | awk 'NR>1 {print $2, $3, $11, $12}' | while read pid cpu cmd args; do
if [[ $(echo "$cpu > $CPU_THRESHOLD" | bc) -eq 1 ]]; then
message="进程占用过高:PID $pid CPU ${cpu}% 命令 $cmd"
curl -H 'Content-Type: application/json' -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$message\"}}" $WEBHOOK_URL
fi
done更严谨的生产环境脚本应增加锁机制、日志记录以及错误捕获,避免并发重复执行或推送中断。
适用性与局限说明
该方案适合中小型业务集群,尤其是已经使用宝塔面板作为管理入口的环境,无需额外安装监控Agent。但需要注意:普通宝塔面板只能管理单台服务器,若要监控多台服务器,需要在每台服务器上分别配置计划任务与脚本。
此外,进程抓取本身会消耗少量系统资源,执行频率不宜过高。如果业务对实时性要求极高,或需要久历史数据做性能分析,建议采用Prometheus + Alertmanager等专业监控系统。当前方案的核心价值在于,用最低成本让运维人员第一时间感知到进程负载异常,并及时介入处理。