上一篇 下一篇 分享链接 返回 返回顶部

宝塔负载排行工具:自动抓取进程推送运维群

发布人: 发布时间:6 天前 阅读量:39

运维场景中的进程监控痛点

在服务器日常维护中,进程资源占用异常是导致业务响应变慢的常见原因。传统做法通常由运维人员手动登录服务器执行 topps 命令查看,但这种方式存在明显局限:发现问题往往滞后,且无法形成持续记录。当多台服务器同时运行多个业务进程时,仅靠人工巡检很难及时捕捉到瞬间的负载尖峰。

宝塔面板配合脚本实现定时抓取

宝塔面板提供计划任务功能,可结合Shell脚本实现对服务器进程负载的周期性采样。一个可行的实现思路是:

  1. 编写脚本调用 ps aux --sort=-%cputop -bn1 获取当前CPU与内存占用排名靠前的进程列表。
  2. 将抓取结果与设定阈值(如CPU超过80%)进行比较,筛选出异常进程。
  3. 将符合条件的数据格式化后,通过企业微信群机器人或钉钉机器人的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等专业监控系统。当前方案的核心价值在于,用最低成本让运维人员第一时间感知到进程负载异常,并及时介入处理。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com