Linux服务器产生的事态日志主要分为系统日志、服务应用日志、登录安全日志和内核日志四大类,运维排查问题时优先看/var/log/messages、secure和journalctl输出。
Linux服务器日志查询:从/var/log目录说起
很多刚接触服务器运维的朋友,第一反应是去翻文件。/var/log目录就是Linux日志的“大本营”,这个目录下面躺着几十个文件,每个文件对应不同的子系统,搞清楚这些文件的职责,比记一堆命令更有用。
/var/log目录下有哪些日志文件
不同发行版会有些差异,但以下这几个文件在CentOS、Ubuntu、Debian上基本都存在,属于通用核心文件:
/var/log/messages:系统级总日志,记录内核消息、服务启停、网络变更等杂项信息,多数排查场景第一步看它。/var/log/secure:认证与安全日志,记录SSH登录、sudo提权、用户切换等操作,被暴力破解时,这里是最直接的证据来源。/var/log/boot.log:系统启动时的输出信息,开机异常时可用来定位是哪个服务卡住了。/var/log/cron:计划任务执行记录,定时脚本没跑,先看这个文件有没有报错。/var/log/dmesg:内核环形缓冲区信息,硬件识别、驱动加载、磁盘IO错误都会写在这里。/var/log/maillog或/var/log/mail.log:邮件服务收发记录,自建邮件服务器时必查。
linux服务器日志查询命令推荐
日志文件是文本,最基础的查询工具就是grep配合tail,下面这几条命令是日常运维中使用频率最高的:
# 实时跟踪日志输出,部署服务后观察启动情况 tail -f /var/log/messages # 查找最近1小时内的错误信息 grep "$(date +'%b %d %H')" /var/log/messages | grep -i error # 查看SSH登录失败记录 grep "Failed password" /var/log/secure # 系统日志则用journalctl更高效 journalctl --since "1 hour ago" --priority err
行业共识认为,系统级故障先看messages,安全事件先看secure,服务问题先看对应的应用日志,这个顺序能省下大量排查时间。
Linux服务器怎么看日志:三种典型场景下的操作路径
日志不是用来“看”的,是用来“查”的,不同的业务场景,查询策略完全不同,这里拆解三个最常遇到的场景。
服务突然挂掉或启动失败
假设Nginx或MySQL无缘无故退出,不要急着重启,先收集现场信息:
- 查系统日志,确认是否OOM或磁盘写满导致进程被杀死
- 查应用自己的错误日志,如
/var/log/nginx/error.log或MySQL的error.log - 确认
/var/log/messages中是否有内核报错,比如Out of memory: Kill process

多数情况下,服务是被系统杀掉或依赖的资源不可用,直接重启只是掩盖问题,不解决根因,正确做法是把日志中有价值的报错信息摘出来,针对具体报错去处理。
日志文件太多怎么清理
生产环境跑久了,磁盘被日志填满是很常见的事,清理要讲究方法,直接删文件会导致进程仍然持有文件句柄,磁盘空间不会释放。
正确的清理顺序如下:
- 用
du -sh /var/log/查看哪个日志文件最大 - 不能直接
rm,推荐用truncate或> /var/log/messages保留句柄 - 配置
logrotate日志轮转,设置按天或按大小切割,保留最近30天,自动压缩旧日志
# 安全清空日志文件,不影响正在写入的进程 truncate -s 0 /var/log/messages
logrotate配置在/etc/logrotate.d/目录下,每个服务可以单独配置轮转策略,这是每台服务器都应该做好的基础工作。
服务器日志被篡改怎么识别
攻击者拿到权限后的常规操作是清理日志痕迹,日志被篡改分两种情况:一种是文件内容被删除或修改,另一种是日志时间戳被改,通过以下方法识别:
- 用
stat查看日志文件的mtime(修改时间)和ctime(状态变更时间),如果时间异常,比如凌晨3点修改,就说明出事了 - 将日志通过
rsyslog实时转发到远程日志服务器,本地被改了,远程还有一份 - 检查
/var/log/secure中是否有session opened和session closed记录,正常登录操作会留下完整的会话起止记录
对安全要求较高的业务系统,日志集中收集是必须做的合规要求,仅靠服务器本地的日志,在攻防对抗的状态下根本站不住脚。
日志分类的进阶视角:内核日志与硬件事件
很多人会把内核日志和系统日志混为一谈,实际上这两者有清晰边界,内核日志通常通过dmesg查看,记录的是Linux内核在运行期间产生的各类事件,比如USB设备插拔、网卡链路状态变化、RAID阵列降级,硬件故障前,内核日志往往会有明显的预警信号。
查看硬件相关日志的操作路径:
# 查看最近的内核消息 dmesg -T # 查磁盘IO错误 dmesg | grep -i error # 查硬件设备识别情况 dmesg | grep -i usb
如果服务器出现不明原因的重启或卡顿,优先翻dmesg,不需要去看应用日志,少数情况下,硬件故障的报错只在内核日志中出现一次,不会写进messages,这个细节很值得留意。
应用日志的位置因服务而异
不同应用存放日志的位置不一样,规律是应用自己的日志目录优先于系统日志,常见的服务日志位置如下表所示:
| 服务类型 | 日志路径 | 主要记录内容 |
|---|---|---|
| Nginx | /var/log/nginx/access.log 和 error.log |
HTTP访问记录、请求报错 |
| MySQL | /var/log/mysql/error.log(或datadir目录下) |
SQL错误、启动关闭记录 |
| PostgreSQL | /var/log/postgresql/postgresql-.log |
查询慢日志、连接异常 |
| Java应用(Spring Boot) | 业务自定义目录 | 业务异常、GC日志、堆栈信息 |
| Docker容器 | docker logs <container_id> |
容器内主进程的标准输出 |
访问日志的价值不止于排错
Nginx的access.log除了排错,还能做业务层面的分析,通过分析访问日志,能得出用户分布、热门接口、恶意爬虫访问规律等信息,行业中做安全分析的工程师,相当一部分工作内容就是翻访问日志找攻击特征。
分析访问日志时经常用的命令:
# 查看访问量最高的10个IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 查看返回500错误的请求
grep ' 500 ' /var/log/nginx/access.log
# 统计最近5分钟的请求数
tail -5000 /var/log/nginx/access.log | awk -v date="$(date +'%d/%b/%Y:%H:%M')" '{print $4}' | grep "$date" | wc -l
这类操作在排查线上故障、评估带宽占用时非常实用,掌握日志分析,本质上是掌握Linux服务器运行状态的语言。
日志管理不上心,后续维护成本翻倍
日志有非常明显的时效性特征,磁盘空间有限,日志轮转是每一台Linux服务器的基础配置,日志被大量写入时,系统IO会飙升,直接拖垮业务性能,这些问题的根源,往往只是当年没有认真配置logrotate。
远程日志集中收集的部署思路
日志集中管理在服务器数量超过三台以后就应该考虑,常用的架构方案是

rsyslog或ELK,对于中小团队,先用rsyslog把日志汇总到一台集中服务器,成本最低,配置也简单。
集中收集方案的常识性步骤如下:
- 服务端:在日志服务器上配置
rsyslog接收模块,开放514端口,指定接收日志的存放目录 - 客户端:在业务服务器上配置
. @logserver:514,将日志实时转发 - 定期检查:确保日志没有中断传输,防止网络波动导致日志丢失
日志集中存储还有个额外优势配合auditd审计功能,可以追踪到具体用户执行的命令操作,直接满足等保合规的审计要求。
多查日志,少走弯路
主动看日志的习惯比技术本身重要得多,每天花五分钟翻一下/var/log/secure和w命令的输出,能提前发现异常登录行为;每周扫一眼dmesg里的硬件报错,就能在磁盘彻底报废前完成替换,绝大多数百度服务器运维故障的复盘文章中,分析思路都是从日志检索起步的,日志文件不是摆设,而是服务器给你写的“日记”。
Linux服务器日志常见问题解答
问:linux服务器日志查询有哪些常用命令?
日志查询主要靠tail、grep、awk组合使用,系统日志用journalctl,查看实时日志用tail -f /var/log/messages,搜索关键词用grep -i error /var/log/messages,分析访问日志统计IP访问量,则用awk '{print $1}' 日志文件 | sort | uniq -c | sort -nr,核心思路是先定位日志文件,再按时间范围和关键词做筛选。
问:日志文件能直接删除释放磁盘空间吗?
不能直接rm删除,正在运行的进程会保留已删除文件的句柄,磁盘空间不会释放,重启服务才会释放,正确做法是使用truncate -s 0 文件名清空文件内容,同时保留文件句柄,治本的办法是配置logrotate,按时间或大小自动切割、压缩和清理旧日志,不需要手动介入。
问:/var/log/messages和dmesg有什么区别?
messages是系统服务与内核消息的汇总文件,适合日常排错;dmesg显示的是内核环形缓冲区的内容,侧重硬件识别、驱动加载和底层IO事件,两类日志有重叠部分,但dmesg的信息更底层、更详细,硬件故障排查时优先看dmesg的输出,两者的写入机制也不同,messages由rsyslog服务管理,dmesg直接读取内核缓冲区。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/828851.html


评论列表(2条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是记录部分,给了我很多新的思路。感谢分享这么好的内容!
@木木4522:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是记录部分,给了我很多新的思路。感谢分享这么好的内容!