Shell监控告警:从零搭建服务器监控系统

张开发
2026/5/31 19:39:57 15 分钟阅读
Shell监控告警:从零搭建服务器监控系统
对于运维工程师来说服务器监控是保障业务稳定运行的核心能力。本文汇总10个实用的Shell监控告警技巧帮助你从零搭建轻量级监控系统。 一、核心监控指标获取1. CPU使用率监控# 获取CPU空闲率100-空闲率使用率 top -bn1 | grep Cpu(s) | awk {print $2} | cut -d% -f1 # 更精确的单核CPU使用率 mpstat 1 1 | awk /Average/ {print 100-$NF%}2. 内存使用情况# 获取内存使用百分比 free | awk /Mem:/ {printf %.0f, $3/$2 * 100} # 实时监控内存变化 watch -n 1 free -h | grep Mem3. 磁盘空间监控# 获取根分区使用率 df -h / | awk NR2 {print $5} | sed s/%// # 监控所有分区超过80%告警 df -h | awk NR1 { usage substr($5, 1, length($5)-1) if (usage 80) print $1: $5 (Warning!) } 二、日志与进程监控4. 关键进程存活检测#!/bin/bash # 检查进程是否存活不存在则告警 PROCESS_NAMEnginx if ! pgrep -x $PROCESS_NAME /dev/null; then echo $(date) ALERT: $PROCESS_NAME is down! | tee /var/log/process_alert.log # 这里可接入告警通知 fi5. 日志关键词实时监控# 实时监控错误日志关键词 tail -f /var/log/nginx/error.log | awk /error|critical|failed/ {system(echo $0 | notify-send Alert)} # 历史日志统计ERROR数量 grep -c ERROR /var/log/app.log6. 连接数异常检测# 获取当前TIME_WAIT连接数 netstat -an | awk /^tcp/ {s[$NF]} END {for(k in s) print k, s[k]} # 检测异常IP连接 netstat -an | grep ESTABLISHED | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -rn | head -10 三、告警通知实现7. 微信企业号告警# 企业微信机器人Webhook告警 send_wechat() { CORPIDyour_corpid WEBHOOK_URLhttps://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyyour_key curl -XPOST $WEBHOOK_URL -H Content-Type: application/json \ -d {\msgtype\:\text\,\text\:{\content\:\$(hostname): $1\}} }8. 钉钉告警# 钉钉机器人告警 send_dingtalk() { WEBHOOKhttps://oapi.dingtalk.com/robot/send?access_tokenyour_token curl -s -X POST $WEBHOOK \ -H Content-Type: application/json \ -d {\msgtype\:\text\,\text\:{\content\:\服务器告警: $1\}} }⚙️ 四、自动化监控脚本模板9. 一键巡检脚本#!/bin/bash # server_health_check.sh LOG_FILE/var/log/health_check_$(date %Y%m%d).log echo 服务器巡检报告 $(date) $LOG_FILE # CPU检查 CPU_USAGE$(top -bn1 | grep Cpu(s) | awk {print $2} | cut -d% -f1) echo CPU使用率: ${CPU_USAGE}% $LOG_FILE # 内存检查 MEM_USAGE$(free | awk /Mem:/ {printf %.1f, $3/$2 * 100}) echo 内存使用率: ${MEM_USAGE}% $LOG_FILE # 磁盘检查 DISK_USAGE$(df -h / | awk NR2 {print $5}) echo 磁盘使用率: ${DISK_USAGE} $LOG_FILE # 负载检查 LOAD$(uptime | awk -Fload average: {print $2}) echo 系统负载: $LOAD $LOG_FILE # 发送报告 [ -f /usr/local/bin/send_wechat ] /usr/local/bin/send_wechat $(cat $LOG_FILE)10. 定时任务配置# 添加到crontab每5分钟执行一次监控 # crontab -e */5 * * * * /root/scripts/server_health_check.sh # 每小时巡检邮件报告 0 * * * * /root/scripts/server_health_check.sh | mail -s Health Report $(hostname) adminexample.com 五、轻量级监控工具推荐工具用途特点htop进程监控交互式界面比top更直观iotopI/O监控监控磁盘读写情况nmon性能综合监控支持CPU/内存/磁盘/网络GlancesWeb化监控支持浏览器远程查看netdata实时监控面板安装简单界面美观# 一键安装Glances pip install glances glances -w # 启动Web服务浏览器访问61208端口✅ 总结通过Shell脚本配合定时任务和告警通知可以快速搭建轻量级监控系统。核心要点指标采集CPU、内存、磁盘、进程、日志告警触发设置阈值超过阈值自动通知定时执行crontab控制检查频率日志留存保留历史数据便于分析趋势这套方案适合中小规模服务器集群生产环境建议配合 Prometheus Grafana 使用。

更多文章