网站首页 > 技术教程 正文
一、系统资源巡检脚本
1. 基础资源监控脚本system_check.sh
#!/bin/bash
# 功能:检查CPU、内存、磁盘、网络状态
# 输出:表格化显示关键指标,异常值标红
# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色
# 获取系统时间
current_time=$(date "+%Y-%m-%d %H:%M:%S")
# CPU负载检查(1分钟)
cpu_load=$(uptime | awk -F 'load average:' '{print $2}' | cut -d, -f1)
cpu_cores=$(nproc)
load_threshold=$(echo "$cpu_cores * 0.7" | bc -l | awk '{printf "%.2f", $0}')
# 内存使用率
mem_total=$(free -m | awk '/Mem/{print $2}')
mem_used=$(free -m | awk '/Mem/{print $3}')
mem_percent=$(awk "BEGIN {printf \"%.1f\", $mem_used/$mem_total*100}")
# 磁盘根分区使用率
disk_percent=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
# 网络连通性测试(以Google DNS为例)
network_check=$(ping -c 2 8.8.8.8 >/dev/null 2>&1 && echo "OK" || echo "FAIL")
# 输出结果(表格化)
echo -e "\n===== 系统资源巡检报告 ($current_time) ====="
printf "%-20s %-15s %-10s %s\n" "指标" "当前值" "阈值" "状态"
printf "%-20s %-15s %-10s " "CPU负载(1min)" "$cpu_load" "$load_threshold"
if (( $(echo "$cpu_load > $load_threshold" | bc -l) )); then
echo -e "${RED}警告${NC}"
else
echo -e "${GREEN}正常${NC}"
fi
printf "%-20s %-15s %-10s " "内存使用率" "${mem_percent}%" "80%"
if (( $(echo "$mem_percent > 80" | bc -l) )); then
echo -e "${RED}警告${NC}"
else
echo -e "${GREEN}正常${NC}"
fi
printf "%-20s %-15s %-10s " "磁盘使用率(根)" "${disk_percent}%" "90%"
if [ $disk_percent -gt 90 ]; then
echo -e "${RED}警告${NC}"
else
echo -e "${GREEN}正常${NC}"
fi
printf "%-20s %-15s %-10s " "网络连通性" "$network_check" "-"
if [ "$network_check" == "OK" ]; then
echo -e "${GREEN}正常${NC}"
else
echo -e "${RED}失败${NC}"
fi
使用说明:
chmod +x system_check.sh
./system_check.sh # 直接运行
二、日志分析与告警脚本
2. 关键错误日志监控log_monitor.sh
#!/bin/bash
# 功能:扫描系统日志中的关键错误并触发告警
# 配置:自定义关键字和日志路径
LOG_FILE="/var/log/syslog"
KEYWORDS=("error" "fail" "timeout" "denied")
ALERT_EMAIL="admin@example.com"
# 临时存储匹配内容
TEMP_FILE="/tmp/critical_errors.log"
# 按时间范围过滤(最近1小时)
since_time=$(date -d "1 hour ago" "+%b %d %H")
# 搜索关键字并记录
echo "===== 关键错误日志 ($(date)) =====" > $TEMP_FILE
for keyword in "${KEYWORDS[@]}"; do
grep -i -E "$keyword" $LOG_FILE | grep "$since_time" >> $TEMP_FILE
done
# 发送邮件告警(如果发现错误)
if [ -s $TEMP_FILE ]; then
mail -s "[紧急] 系统发现关键错误日志" $ALERT_EMAIL < $TEMP_FILE
echo "告警邮件已发送至 $ALERT_EMAIL"
else
echo "未检测到关键错误日志"
fi
使用说明:
# 每30分钟运行一次
crontab -e
*/30 * * * * /path/to/log_monitor.sh
三、安全审计脚本
3. 用户权限审计脚本security_audit.sh
#!/bin/bash
# 功能:检查异常用户、SUID/SGID文件、SSH密钥
# 输出:生成安全审计报告
REPORT_FILE="/var/log/security_audit_$(date +%F).log"
# 检查空密码账户
echo "===== 空密码账户 =====" > $REPORT_FILE
awk -F: '($2 == "") {print $1}' /etc/shadow >> $REPORT_FILE
# 检查sudo权限用户
echo -e "\n===== 拥有sudo权限的用户 =====" >> $REPORT_FILE
grep -Po '^sudo.+:\K.*#39; /etc/group >> $REPORT_FILE
# 查找SUID/SGID文件
echo -e "\n===== 异常的SUID/SGID文件 =====" >> $REPORT_FILE
find / -type f $ -perm -4000 -o -perm -2000 $ -exec ls -l {} \; 2>/dev/null >> $REPORT_FILE
# 检查SSH公钥
echo -e "\n===== 用户SSH公钥 =====" >> $REPORT_FILE
for user in $(ls /home); do
if [ -f "/home/$user/.ssh/authorized_keys" ]; then
echo "用户 $user 的SSH密钥:" >> $REPORT_FILE
cat "/home/$user/.ssh/authorized_keys" >> $REPORT_FILE
fi
done
echo "安全审计报告已生成: $REPORT_FILE"
使用说明:
chmod +x security_audit.sh
sudo ./security_audit.sh # 需要root权限
四、自动化备份脚本
4. MySQL数据库备份mysql_backup.sh
#!/bin/bash
# 功能:全量备份MySQL数据库并压缩存档
# 配置:修改数据库凭据和备份路径
DB_USER="root"
DB_PASS="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 全量备份并压缩
mysqldump -u$DB_USER -p$DB_PASS --all-databases | gzip > $BACKUP_DIR/full_backup_$DATE.sql.gz
# 保留最近7天备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete
echo "MySQL备份完成: $BACKUP_DIR/full_backup_$DATE.sql.gz"
使用说明:
# 每天凌晨2点执行
0 2 * * * /path/to/mysql_backup.sh
五、高级功能扩展
5. 结合Prometheus的监控指标采集
#!/bin/bash
# 功能:采集自定义指标供Prometheus拉取
# 依赖:需安装Prometheus Node Exporter
OUTPUT_FILE="/var/lib/prometheus/node-exporter/custom_metrics.prom"
# 采集TCP连接数
tcp_connections=$(netstat -ant | wc -l)
echo "node_tcp_connections $tcp_connections" > $OUTPUT_FILE
# 采集僵尸进程数量
zombie_procs=$(ps aux | awk '{if ($8=="Z") print $0}' | wc -l)
echo "node_zombie_processes $zombie_procs" >> $OUTPUT_FILE
六、脚本管理建议
- 统一存放路径:
/opt/scripts/ # 存放所有脚本
├── system_check.sh
├── log_monitor.sh
└── ...
2.日志统一管理:
# 所有脚本日志重定向到/var/log/ops/
./system_check.sh >> /var/log/ops/system_check.log 2>&1
3.版本控制:
使用Git管理脚本变更:
cd /opt/scripts
git init
git add .
git commit -m "初始化运维脚本"
总结
以上脚本覆盖了日常运维的核心场景,用户可根据实际需求调整阈值、告警方式和存储路径。建议结合Ansible批量分发脚本并配置统一调度(如Jenkins),构建完整的自动化运维体系。
猜你喜欢
- 2025-04-24 Linux 下安装最新版 MySQL
- 2025-04-24 快速教会你优雅的解决TCP客户端端口耗尽的问题
- 2025-04-24 Linux系统——用户、用户组、权限和文件属性
- 2025-04-24 Linux 远程数据同步工具详解
- 2025-04-24 高流量大并发Linux TCP性能调优
- 2025-04-24 Linux 解决 oracle ORA-12537: TNS:connection closed 问题
- 2025-04-24 Linux 网络错误 TCP: too many orphaned sockets 分析与解决
- 2025-04-24 MySQL max_connections 达到最大值 – 我们如何解决它
- 2025-04-24 socket连接数受端口号的限制?谬论
- 2025-04-24 如何排查网络丢包问题
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)