介绍

1. 标准化检查流程

  • 避免遗漏

    :手动检查容易忽略关键指标(如磁盘空间、内存泄漏、日志异常等)。

  • 统一标准

    :脚本可固化检查项(如安全配置、服务状态),确保每次检查覆盖所有必要环节。

2. 及时发现潜在风险

  • 资源预警

    :监控CPU、内存、磁盘使用率,防止资源耗尽导致服务中断。

  • 安全漏洞

    :自动检测未更新的软件包、弱密码、开放端口等安全隐患。

  • 日志分析

    :快速识别错误日志、入侵痕迹或异常访问。

3. 提升运维效率

  • 批量操作

    :一次性检查多台服务器,减少重复劳动。

  • 定时任务

    :通过cron定时执行,实现全天候监控(如每小时检查一次)。

  • 快速响应

    :结合报警机制(邮件/Slack通知),问题发生时第一时间介入。

4. 降低人为错误

  • 一致性

    :避免不同运维人员因经验差异导致检查疏漏。

  • 可复现性

    :脚本可重复执行,确保问题复现和验证修复效果。

5. 合规性与审计

  • 满足规范

    :自动化验证系统是否符合行业安全标准(如PCI DSS、ISO 27001)。

  • 审计支持

    :生成检查日志,便于后续追踪和合规审查。

6. 资源优化与成本管控

  • 容量规划

    :长期监控数据帮助预测硬件升级需求。

  • 成本优化

    :识别闲置资源(如未使用的磁盘空间、低利用率服务),避免资源浪费。

典型检查项示例

  • 系统健康

    uptimedf -hfree -mtop

  • 安全配置

    :防火墙状态(firewalld)、SSH弱密码、SELinux模式。

  • 服务状态

    :关键服务(如Nginx、MySQL)是否运行。

  • 日志监控

    /var/log/messagesdmesg, 应用日志错误关键词。

  • 备份验证

    :检查备份文件完整性及时间戳。

脚本设计建议

  • 模块化

    :按功能拆分脚本(如check_disk.shcheck_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}"

执行结果: