日志记录由内核、服务、应用程序和安全组件发出的事件。它们可以帮助排查问题和审计,但前提是收集功能正常、时间戳得到正确理解,并且相关来源已包含在内。
日志 · 第 1 课
系统日志
学习 Linux 日志源、收集器、存储和查看工具如何协同工作。
跟踪一条日志消息
一条日志路径包含几个不同的环节:
- 来源发出事件。
- 收集器接收事件并补充信息。
- 路由和保留规则选择存储位置或转发目的地。
- 查看工具查询已存储的记录。
在 systemd 主机上,systemd-journald 通常会收集服务标准输出、内核消息,以及 journal 原生消息或 syslog 消息。rsyslog 等 syslog 守护进程也可以接收消息,将其写入传统文本文件或转发出去。应用程序也可能自行维护文件或外部遥测数据。
哪个部分决定已接收的消息存储到哪里或转发到哪里?
查找可用日志
不要假定每台主机都有相同的文件。应检查活动的日志服务和本地配置:
$ systemctl --type=service --state=running | grep -E 'journal|syslog'
$ ls -la /var/log
$ journalctl --disk-usage
在使用兼容路由的 Debian 系发行版上,/var/log/syslog 很常见;其他系统则常使用 /var/log/messages。只使用 journal 的主机可能没有这两个文件。应用程序文档和单元配置可以指出其他目的地。
缺少 /var/log/syslog 文件必然意味着什么?
查询 journal
应先使用有边界的查询,而不是倾倒整个 journal:
$ journalctl -b -p warning
$ journalctl -u ssh.service --since '1 hour ago'
-b 选择当前启动,-p 按优先级过滤,-u 按单元过滤。不同主机上的单元名称和保留启动记录并不相同。使用 journalctl --list-boots 查看可用的启动记录;重现问题时,可用 journalctl -f 跟踪新记录。
哪个选项将 journalctl 查询限制在当前启动?
结合上下文阅读记录
传统 syslog 风格的日志行可能如下:
Jan 27 07:41:32 icebox anacron[4650]: Job `cron.weekly' started
其中包含时间戳、主机、程序和 PID,最后是消息。应把消息文本视为应用程序输出,而不是有保证的结构化事实。检查时区、时钟同步、启动 ID、PID 重用,以及事件前后的记录。与单独渲染出的文本相比,journal 字段可以提供更可靠的标识符。
日志可能包含用户名、地址、路径、令牌或其他敏感数据。调查时应采用最小权限访问,对导出内容进行脱敏,并保留原始记录和时间戳。
向外部分享日志摘录前应该做什么?
课程已完成
你已完成 系统日志
现在,你可以在不假定统一存储路径的情况下查找和查询 Linux 日志。
区分事件来源、收集器、路由、存储和查看工具。
查明主机当前使用的日志配置。
按单元、启动、时间或优先级使用有边界的 journal 查询。
结合上下文关联记录,并保护日志中的敏感数据。