Linux 系统日志管理入门:日志在哪、怎么看、怎么集中化
Linux 系统日志都存在哪里?syslog、auth.log、kern.log 各自记录什么?本文讲解 Linux 日志的存放位置、文本与二进制格式、tail/grep/less 查看方法与 logrotate 轮转机制,并给出用观测云 DataKit 把多台服务器日志集中检索、告警的落地路径。
Linux 系统日志(System Log)是记录操作系统运行时各类事件的文件集合,默认集中存放在 /var/log 目录,是排障定位、安全审计与运维管理的第一手资料。 读懂日志是 Linux 管理员的基本功;而当日志分散在几十上百台服务器上时,逐台登录查文件会增加跨主机排障的时间,可以用集中采集与检索补充本地工具。
核心要点速览
- Linux 系统日志统一放在
/var/log目录,最常用的三个文件:syslog(全局活动)、auth.log(登录认证)、kern.log(内核事件); - 查日志三板斧:
tail -f实时跟踪、grep按关键词过滤、less翻阅大文件; - 日志只增不减,必须依赖 logrotate 定期轮转(重命名、压缩、清理旧文件)防止磁盘写满;
- 多台服务器可集中采集日志,保留主机与服务标识,按同一故障时间窗检索。
常见的系统日志文件有哪些?
Ubuntu/Debian 系统的日志集中在 /var/log,执行 ls /var/log 可以看到一长串文件。最重要的几个:
| 日志文件 | 记录内容 | 典型用途 |
|---|---|---|
/var/log/syslog |
系统全局活动信息 | 通用排障入口 |
/var/log/auth.log |
登录、注销、sudo 等认证安全事件 | 安全审计、入侵排查 |
/var/log/kern.log |
Linux 内核产生的事件 | 驱动、硬件问题排查 |
/var/log/boot.log |
系统启动过程信息 | 启动失败分析 |
/var/log/dmesg |
设备驱动相关消息 | 硬件识别问题 |
/var/log/faillog |
失败的登录尝试(二进制) | 爆破攻击排查 |
注意发行版差异:RHEL/CentOS/Fedora 没有
syslog和auth.log,对应文件是/var/log/messages和/var/log/secure。
Apache、Nginx、MySQL 等应用安装后,通常也会把日志写进 /var/log 下的专属子目录。
日志的两种形态:纯文本与二进制
纯文本日志:绝大多数系统日志是纯文本,遵循 rsyslog 传统格式,每行结构为"时间戳 主机名 进程名[PID]: 消息正文":
Jun 06 11:11:54 myserver sshd[47341]: Failed password for root from 103.106.189.143 port 60824 ssh2
二进制日志:wtmp(登录历史)、btmp(失败登录)以及 systemd 的 journal 文件不能用 cat/grep 直接读,需要专用工具——last、lastb、journalctl(journal 的完整用法见本系列《journalctl 日志查询指南》)。
查日志的三个必会命令
- 实时跟踪:
sudo tail -f /var/log/syslog——排障时开着终端盯新日志滚动; - 关键词过滤:
grep error /var/log/syslog——从几十万行中捞出含 error 的行; - 翻阅大文件:
less /var/log/syslog,按/搜索、n跳下一处、q退出。
日志轮转:防止磁盘被写满
日志文件只增不减,不加管理迟早撑爆磁盘。Linux 用 logrotate 解决:按天/周/月或按文件大小触发,把当前日志改名归档(可带时间戳后缀)、压缩旧文件、删除超期文件。全局配置在 /etc/logrotate.conf,单个服务的独立配置放在 /etc/logrotate.d/——例如 rsyslog 的默认策略是 syslog 每天轮转、保留 7 份压缩备份。轮转的完整配置方法见本系列《Logrotate 日志轮转实战》。
服务器一多,逐台登录看日志就不现实了
单台机器上 tail -f 很顺手,但面对几十上百台服务器,这种模式有三大硬伤:
- 排查一个问题要逐台 SSH、逐台 grep,效率低且容易漏;
- 日志散落在各机本地,机器释放或磁盘损坏后日志随之消失,无法回溯;
- 没有任何告警能力,故障只能靠人肉巡检发现。
使用观测云集中查询时,先在服务器上配置 DataKit 的文件日志采集,指定实际存在的日志路径、source 和 service 。用 Pipeline 解析时间与级别,并核对一条测试日志的 time、status 和主机标识 。
接着在日志查看器按故障时间窗和主机筛选,比较不同服务器是否出现相同错误 。需要通知时,创建日志检测规则,限定服务、错误条件、检测窗口与条数阈值 。本地仍由 logrotate 管理文件体积;已上传日志可按业务规则分配到不同索引,分别设置存储策略 。
总结
Linux 系统日志的学习路径可以归纳为三步:知道日志在哪(/var/log)、会用命令查(tail/grep/less)、懂得管住体积(logrotate)。多机排障时,再增加集中检索和必要的告警规则,并保留本地查看日志的手段。
常见问题(FAQ)
Q:Debian 系和 RedHat 系的日志文件有什么不同?
最核心的区别是命名:Debian/Ubuntu 的全局日志是 /var/log/syslog、认证日志是 /var/log/auth.log;RHEL/CentOS/Fedora 对应为 /var/log/messages 和 /var/log/secure。内容规范与格式基本一致。
Q:/var/log 下哪些文件不能直接 cat 查看?
wtmp、btmp、lastlog、faillog 以及 /var/log/journal/ 目录下的文件是二进制格式,需分别用 last、lastb、faillog、journalctl 等专用工具读取。
Q:本地 logrotate 和观测云的留存策略会冲突吗?
不冲突,二者解决不同问题:logrotate 管的是本机磁盘别被写满(兜底);观测云侧的多索引与存储策略管的是已上报数据的长期留存与归档成本。日志采集上云后,本地文件即使被轮转清理也不影响平台侧检索。
Q:日志文件被轮转改名后,DataKit 采集会中断或丢数据吗?
不能仅凭改名判断是否会丢数据。上线前按实际轮转方式写入连续编号的测试日志,轮转后核对新旧文件与平台记录;同时检查采集路径、读取权限、积压和旧文件删除时间。