介绍
1. 标准化检查流程
避免遗漏
:手动检查容易忽略关键指标(如磁盘空间、内存泄漏、日志异常等)。
统一标准
:脚本可固化检查项(如安全配置、服务状态),确保每次检查覆盖所有必要环节。
2. 及时发现潜在风险
资源预警
:监控CPU、内存、磁盘使用率,防止资源耗尽导致服务中断。
安全漏洞
:自动检测未更新的软件包、弱密码、开放端口等安全隐患。
日志分析
:快速识别错误日志、入侵痕迹或异常访问。
3. 提升运维效率
批量操作
:一次性检查多台服务器,减少重复劳动。
定时任务
:通过
cron定时执行,实现全天候监控(如每小时检查一次)。快速响应
:结合报警机制(邮件/Slack通知),问题发生时第一时间介入。
4. 降低人为错误
一致性
:避免不同运维人员因经验差异导致检查疏漏。
可复现性
:脚本可重复执行,确保问题复现和验证修复效果。
5. 合规性与审计
满足规范
:自动化验证系统是否符合行业安全标准(如PCI DSS、ISO 27001)。
审计支持
:生成检查日志,便于后续追踪和合规审查。
6. 资源优化与成本管控
容量规划
:长期监控数据帮助预测硬件升级需求。
成本优化
:识别闲置资源(如未使用的磁盘空间、低利用率服务),避免资源浪费。
典型检查项示例
系统健康
:
uptime,df -h,free -m,top。安全配置
:防火墙状态(
firewalld)、SSH弱密码、SELinux模式。服务状态
:关键服务(如Nginx、MySQL)是否运行。
日志监控
:
/var/log/messages,dmesg, 应用日志错误关键词。备份验证
:检查备份文件完整性及时间戳。
脚本设计建议
模块化
:按功能拆分脚本(如
check_disk.sh,check_security.sh),便于维护。报警集成
:结合
mailx或API通知工具(如Telegram Bot)。日志记录
:输出检查结果到文件,便于后续分析。
阈值配置
:允许自定义警告阈值(如磁盘使用率>80%触发报警)。
脚本
1 #!/bin/bash
2
3 # 定义颜色输出
4 RED='\033[31m'
5 GREEN='\033[32m'
6 YELLOW='\033[33m'
7 BLUE='\033[34m'
8 RESET='\033[0m'
9
10 # 创建日志目录
11 LOG_DIR="/var/log/system_maintenance"
12 mkdir -p $LOG_DIR
13 LOG_FILE="$LOG_DIR/maintenance_$(date +%Y%m%d_%H%M%S).log"
14
15 # 检查root权限
16 if [ "$(id -u)" != "0" ]; then
17 echo -e "${RED}错误:必须使用root权限运行本脚本${RESET}" | tee -a $LOG_FILE
18 exit 1
19 fi
20
21 # 系统基础信息检查
22 echo -e "\n${BLUE}====== 系统基础信息 ======${RESET}" | tee -a $LOG_FILE
23 {
24 echo -e "${GREEN}主机名: $HOSTNAME"
25 echo "系统时间: $(date)"
26 echo "运行时间: $(uptime)"
27 echo "系统版本: $(cat /etc/redhat-release)"
28 echo "内核版本: $(uname -r)"
29 echo "CPU使用率: $(top -bn1 | grep 'Cpu(s)' | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}')%"
30 echo "内存使用: $(free -m | awk '/Mem/{printf "%.2f%", $3/$2*100}')"
31 echo "磁盘使用:"
32 df -h | grep -vE 'tmpfs|devtmpfs' | sed 's/^/ /'
33 } | tee -a $LOG_FILE
34
35 # 内核参数检查
36 echo -e "\n${BLUE}====== 内核参数检查 ======${RESET}" | tee -a $LOG_FILE
37 {
38 echo -e "${YELLOW}当前生效参数:${RESET}"
39 sysctl -a | grep -E 'net.ipv4.ip_forward|fs.file-max|net.core.somaxconn'
40
41 echo -e "\n${YELLOW}配置文件差异检查:${RESET}"
42 grep -E '^net.ipv4.ip_forward|^fs.file-max|^net.core.somaxconn' /etc/sysctl.conf
43 } | tee -a $LOG_FILE
44
45 # 防火墙检查
46 echo -e "\n${BLUE}====== 防火墙状态 ======${RESET}" | tee -a $LOG_FILE
47 {
48 firewall-cmd --state 2>&1
49 echo -e "\n${YELLOW}开放端口:${RESET}"
50 firewall-cmd --list-ports
51 echo -e "\n${YELLOW}开放服务:${RESET}"
52 firewall-cmd --list-services
53 } | tee -a $LOG_FILE
54
55 # 网络信息检查
56 echo -e "\n${BLUE}====== 网络状态检查 ======${RESET}" | tee -a $LOG_FILE
57 {
58 echo -e "${YELLOW}IP地址信息:${RESET}"
59 ip addr show | grep 'inet ' | grep -v '127.0.0.1'
60
61 echo -e "\n${YELLOW}路由表:${RESET}"
62 ip route
63
64 echo -e "\n${YELLOW}监听端口:${RESET}"
65 ss -tulnp | grep -vE '127.0.0.1|::1'
66 } | tee -a $LOG_FILE
67
68 # 服务状态检查
69 echo -e "\n${BLUE}====== 服务状态检查 ======${RESET}" | tee -a $LOG_FILE
70 {
71 echo -e "${YELLOW}关键服务状态:${RESET}"
72 systemctl list-units --type=service --state=running | \
73 grep -E 'sshd|nginx|httpd|mysql|mariadb|postgresql'
74
75 echo -e "\n${YELLOW}失败服务检测:${RESET}"
76 systemctl --failed
77 } | tee -a $LOG_FILE
78
79 # 软件包检查
80 echo -e "\n${BLUE}====== 软件包检查 ======${RESET}" | tee -a $LOG_FILE
81 {
82 echo -e "${YELLOW}可用更新:${RESET}"
83 yum check-update | grep -v '^$'
84
85 echo -e "\n${YELLOW}最近安装的软件包:${RESET}"
86 rpm -qa --last | head -20
87 } | tee -a $LOG_FILE
88
89 # 安全审计
90 echo -e "\n${BLUE}====== 安全审计 ======${RESET}" | tee -a $LOG_FILE
91 {
92 echo -e "${YELLOW}SSH登录记录:${RESET}"
93 grep 'sshd' /var/log/secure | tail -10
94
95 echo -e "\n${YELLOW}sudo使用记录:${RESET}"
96 grep 'sudo:' /var/log/secure | tail -5
97 } | tee -a $LOG_FILE
98
99 echo -e "\n${GREEN}检查完成,完整日志请查看:$LOG_FILE${RESET}"执行结果:



评论