【引言】
在Linux运维日常工作中,服务器卡顿、服务宕机、网络异常、权限报错等问题,80%都能通过日志快速定位根源。但很多运维人员在面对密密麻麻的日志文件时,往往无从下手,要么找不到日志位置,要么找不到关键报错信息,白白浪费大量排查时间。
那么,本篇文章就从日志存放位置、排查故障思路、日志排查实战、高效日志分析工具四个维度,手把手教你Linux 日志分析的全套方法,高效解决Linux运维故障。
【日志存放位置】
排查Linux日志的第一步,是找对日志文件,系统、服务的日志路径有规律可循,记住这些核心路径,再也不用盲目搜索。
一、系统通用日志
①/var/log/messages:系统核心日志,记录内核消息、系统启动、服务运行、硬件驱动、网络配置等绝大多数系统级信息,是排查系统故障的首选日志
② /var/log/dmesg:内核环形缓冲区日志,专门记录硬件检测、驱动加载、内核启动相关信息,开机硬件故障必看
③ /var/log/secure:安全认证日志,记录用户登录、SSH 连接、sudo 授权、用户创建删除等安全操作,排查登录失败、暴力破解必备
④ /var/log/cron:定时任务 crontab 运行日志,查看定时任务是否执行、执行是否报错
⑤ /var/log/boot.log:系统启动过程日志,记录开机各项服务启动状态
⑥ /var/log/yum.log:YUM 包安装日志,排查软件安装失败、依赖冲突问题
Linux7版本以上或者Ubuntu 16.04以上采用 Systemd管理服务,部分日志不再写入文件,而是通过journalctl命令查看,支持实时查询、过滤筛选。
二、常见应用服务日志路径
Nginx:
/var/log/nginx/access.log(访问日志)
/var/log/nginx/error.log(错误日志)
MySQL:
/var/log/mysqld.log
/var/lib/mysql/主机名.err
Tomcat:
Tomcat安装目录/logs/catalina.out或localhost.log
Redis:
/var/log/redis/redis-server.log
Docker:
/var/log/docker.log
journalctl -u docker
SSH 服务:
/var/log/secure(CentOS)、
/var/log/auth.log(Ubuntu)
【日志排查核心思路】
拿到问题别盲目翻日志,遵循先定位→再查看→筛信息→析原因→验结果的流程,高效锁定问题根源。
一、明确故障现象,缩小排查范围
先确定3个问题,精准锁定日志方向:
①是系统级故障(无法启动、网络不通、磁盘满、卡顿),还是应用级故障(服务启动失败、访问50X/40X、业务报错)?
②故障发生在什么时间?精准定位时间点,避免翻海量无效日志
③有没有明显报错提示?比如端口占用、权限不足、配置错误等信息
二、使用高效日志查询命令
日志文件动辄几百 M,直接用vim命令查看内容太多,掌握这几个命令,快速查看关键信息:
①tail -f 日志文件:实时查看日志,排查正在发生的故障,运维最常用
② tail -n 200 日志文件:查看最后 200 行日志,快速定位近期故障
③ head -n 100 日志文件:查看前 100 行日志,适合排查启动类问题
④ cat 日志文件| grep "error/warn/fail/失败/报错":关键词过滤,精准抓错误信息
⑤ less 日志文件:分页查看大日志,支持上下翻页、搜索关键词(输入/关键词搜索)
三、筛选关键信息,忽略无效内容
日志中大部分是正常运行信息,重点关注这几类关键词:
①系统日志关键词:error、warn、failed、timeout、panic、oops、denied、disk full、cannot find
②应用日志关键词:500、502、403、404、connection refused、permission denied、timeout、exception
四、分析报错根源,对应解决方案
根据报错信息匹配问题:
权限类报错(permission denied):检查文件/目录权限、用户属主
连接类报错(connection refused):检查服务是否启动、端口是否监听、防火墙是否拦截
资源类报错(disk full/out of memory):清理磁盘、释放内存、优化服务配置
配置类报错(invalid config/cannot find file):检查配置文件语法、文件路径是否正确
【故障日志排查实操】
场景1:系统无法远程登录,排查 secure 日志
故障现象:SSH 远程连接服务器,提示密码正确但无法登录,或连接直接拒绝
排查步骤:
①查看安全日志:tail -f /var/log/secure
②常见报错及原因:
Failed password for root from xxx.xxx.xxx.xxx port 22 ssh2:密码错误,或 IP 被黑名单拦截
Permission denied, please try again:用户被限制登录,或 SSH 配置禁止root登录
Connection closed by xxx.xxx.xxx.xxx:SSH 服务配置异常,或防火墙拦截端口
场景 2:服务器卡顿,排查 messages 日志
故障现象:服务器响应慢,CPU / 内存占用高,业务运行卡顿
排查步骤:
①查看系统核心日志:grep “error\|warn\|out of memory" /var/log/messages
②常见报错及原因:
Out of memory: Killed process xxx:内存溢出,系统杀死占用内存过高的进程
kernel: nfs: server xxx not responding:网络存储挂载异常,导致系统卡顿
disk full:磁盘空间占满,系统无法写入数据,运行缓慢
场景 3:Nginx 服务无法访问,排查应用日志
故障现象:访问网站提示 502 Bad Gateway,Nginx 服务启动失败
排查步骤:
①先看 Nginx 错误日志:tail -n 200 /var/log/nginx/error.log
②常见报错及原因:
bind() to 0.0.0.0:80 failed (98: Address already in use):80 端口被其他进程占用
permission denied:Nginx用户无网站目录访问权限
upstream timed out:后端 Tomcat/PHP 服务未启动,或连接超时
场景 4:定时任务不执行,排查cron日志
故障现象:配置的 crontab 定时任务,到时间未运行
排查步骤:
①查看定时任务日志:tail -f /var/log/cron
②常见报错及原因:
CMD (xxx) ERROR:脚本执行权限不足,或脚本路径错误
无执行记录:crontab 服务未启动,或定时任务配置语法错误
【高效日志分析工具】
除了基础命令,用好这些工具,日志分析速度翻倍,告别手动翻日志:
#journalctl:Systemd 系统日志管理工具,支持多维度过滤#实时查看:journalctl -f#查看指定服务:journalctl -u nginx#按时间筛选:journalctl --since "10分钟前"#grep + 正则:高级过滤,精准提取信息#过滤指定时间段日志:grep "2024-04-03 14:00" /var/log/messages#awk:日志数据统计,分析访问量、错误率#统计 Nginx 访问日志 IP 访问量:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr#tail+grep 组合:实时监控错误日志tail -f /var/log/messages | grep error#ELK/ Grafana Loki:大型集群日志集中管理,适合多服务器运维,可视化查看日志
【总结】
Linux日志排查没有捷径,核心就是找对日志、抓准关键词、理清故障逻辑。
下次遇到服务器或服务故障,别再慌手慌脚,按照本文的思路,先定位日志位置,再过滤关键报错,一步步分析根源,90% 的运维问题都能快速解决。
评论区有文章总结,欢迎大家讨论!觉得好可以关注、点赞、推荐、转发,谢谢!