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 定期轮转(重命名、压缩、清理旧文件)防止磁盘写满;
- 规模化运维的正确姿势:用 DataKit 把各服务器的日志采集到观测云,在日志查看器中统一检索、聚类与告警,而非逐台 SSH。
常见的系统日志文件有哪些?
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,开启磁盘文件采集(在 conf.d/log/logging.conf 中配置 logfiles、source、service),即可把 syslog、auth.log 等文件统一上报 。配合 Pipeline 把文本日志切割出 time、status 等标准字段后 ,就能在日志查看器中跨主机检索、按状态着色筛选、对 message 做聚类分析 ;再通过**监控器(日志检测)**设置"error 关键字在单位时间内出现超过 N 次即告警",经告警策略推送到钉钉/企业微信/飞书 。本地 logrotate 继续保留作为磁盘兜底,长期留存则交给观测云的多索引与存储策略(标准/低频/归档)分层管理 。
总结
Linux 系统日志的学习路径可以归纳为三步:知道日志在哪(/var/log)、会用命令查(tail/grep/less)、懂得管住体积(logrotate)。当服务器规模上来之后,请把"登录服务器翻日志"升级为"DataKit 采集 + 观测云集中分析"——这才是可持续的运维方式。
常见问题(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 采集会中断或丢数据吗?
不会。DataKit 的文件采集基于文件偏移量持续跟踪,能正确处理 logrotate 轮转产生的新旧文件切换,不会因文件改名而中断采集。