排查方法论
遇到问题时,盲目搜索和试错往往浪费大量时间。本文介绍一套适用于 EL 系统的通用排查框架。
- 先观察,后行动 — 在修改任何配置之前,先收集足够的信息
- 从近到远 — 先检查最近的变更,再扩大排查范围
- 一次只改一个变量 — 每次只修改一项,验证后再改下一项
- 记录过程 — 记下你做了什么、看到了什么
通用排查步骤
Section titled “通用排查步骤”-
明确问题现象
能具体描述问题吗?“网站打不开”不够具体,“访问 80 端口返回 connection refused” 才是有效描述。
-
检查最近的变更
查看最近的系统日志 $ sudo journalctl --since "1 hour ago" --priority err查看最近安装/更新的包 $ dnf history list --reverse | tail -20 -
检查服务状态
查看相关服务的状态和日志 $ sudo systemctl status <服务名>$ sudo journalctl -u <服务名> -n 50 --no-pager -
检查资源
磁盘空间 $ df -h内存使用 $ free -hCPU 和进程 $ top -bn1 | head -20 -
检查网络
端口监听状态 $ sudo ss -tlnp防火墙规则 $ sudo firewall-cmd --list-all -
检查 SELinux
SELinux 拒绝是 EL 系统上非常常见的问题来源:
查看 SELinux 拒绝日志 $ sudo ausearch -m avc -ts recent查看 SELinux 当前模式 $ getenforce -
查阅日志文件
系统日志 $ sudo journalctl -xe特定应用日志(以 nginx 为例) $ sudo tail -50 /var/log/nginx/error.log
日志查看速查
Section titled “日志查看速查”| 目标 | 命令 |
|---|---|
| 系统全部日志 | journalctl |
| 当前启动的日志 | journalctl -b |
| 指定服务日志 | journalctl -u sshd |
| 实时跟踪日志 | journalctl -f |
| 错误级别以上 | journalctl -p err |
| 指定时间范围 | journalctl --since "2024-01-01" --until "2024-01-02" |
- 不要第一时间关闭 SELinux — 先排查是否是 SELinux 策略问题
- 不要随意
chmod 777— 这会引入安全风险,应该找到正确的权限设置 - 不要忽略磁盘空间 —
/var/log写满是非常常见的故障原因 - 不要忘记防火墙 — 服务正常但外部访问不了,很可能是 firewalld 规则问题