Shell 性能监控:指标采集、告警规则与可视化大盘设计

张开发
2026/4/13 0:37:58 15 分钟阅读

分享文章

Shell 性能监控:指标采集、告警规则与可视化大盘设计
一、前言Shell 性能监控指标采集、告警规则与可视化大盘设计是运维工程师和全栈开发者的必备技能。本文从Shell和监控出发配有完整的命令和脚本示例。二、常用命令速查2.1 系统监控# CPU 和内存使用 top -c htop # 更直观 # 磁盘使用 df -h du -sh /* 2/dev/null | sort -hr | head -10 # 网络连接 ss -tulnp | grep :80 netstat -anp | grep ESTABLISHED # 进程监控 ps aux | grep java | grep -v grep2.2 日志分析# 实时查看日志 tail -f /var/log/nginx/access.log # 过滤错误日志 grep -E ERROR|FATAL /var/log/app/error.log | tail -50 # 分析访问日志统计 awk {print $7} access.log | sort | uniq -c | sort -rn | head -20 # 查看错误率 awk {if ($9 400) count} END {print 错误率:, count/NR*100%} access.log三、Shell 脚本实战3.1 自动化部署脚本#!/bin/bash set -euo pipefail APP_NAMEmyapp DEPLOY_DIR/opt/${APP_NAME} BACKUP_DIR/opt/backups/${APP_NAME} TIMESTAMP$(date %Y%m%d_%H%M%S) echo 开始部署 ${APP_NAME} # 1. 备份旧版本 if [ -d ${DEPLOY_DIR} ]; then echo 备份旧版本到 ${BACKUP_DIR}/${TIMESTAMP} mkdir -p ${BACKUP_DIR} cp -r ${DEPLOY_DIR} ${BACKUP_DIR}/${TIMESTAMP} fi # 2. 停止旧服务 echo 停止旧服务... systemctl stop ${APP_NAME} || pkill -f ${APP_NAME} # 3. 部署新版本 echo 拉取最新镜像... docker pull myregistry:5000/${APP_NAME}:latest docker-compose down docker-compose up -d # 4. 健康检查 echo 等待服务启动... sleep 10 curl -f http://localhost:8080/health || { echo 健康检查失败回滚; exit 1; } echo 部署成功 3.2 日志清理脚本#!/bin/bash # 清理 7 天前的日志文件保留最近 100MB LOG_DIR/var/log/myapp MAX_AGE7 MAX_SIZE_MB100 # 删除过期日志 find ${LOG_DIR} -name *.log.* -mtime ${MAX_AGE} -delete # 如果总大小超过限制删除最旧的 TOTAL_SIZE$(du -sm ${LOG_DIR} | cut -f1) if [ ${TOTAL_SIZE} -gt ${MAX_SIZE_MB} ]; then echo 日志大小超限 (${TOTAL_SIZE}MB)清理最旧的文件... find ${LOG_DIR} -name *.log.* -printf %T %p | sort | head -n 20 | cut -d -f2- | xargs rm -f fi echo 日志清理完成当前大小: $(du -sh ${LOG_DIR})四、Nginx 配置4.1 反向代理配置server { listen 80; server_name myapp.example.com; # HTTP 跳转到 HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name myapp.example.com; ssl_certificate /etc/ssl/certs/myapp.crt; ssl_certificate_key /etc/ssl/private/myapp.key; ssl_protocols TLSv1.2 TLSv1.3; # 安全头 add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超时配置 proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s; } # 静态资源缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { proxy_pass http://127.0.0.1:8080; expires 30d; add_header Cache-Control public, immutable; } }五、总结监控先行——没有监控的服务器等于裸奔日志要分级和轮转——防止磁盘撑满脚本要加set -euo pipefail——提前失败避免连锁反应配置变更要备份——出问题能快速回滚收藏本文关注我后续更新更多 Linux 运维实战系列。觉得有用的话点个赞收藏关注我持续更新优质技术内容标签Shell | 监控 | Prometheus | Grafana | 运维

更多文章