1. 如何记录系统信息?日志有什么作用?
记录系统信息的方法:
-
日志文件:系统和服务将运行状态、错误、事件写入文件(如
/var/log/syslog
)。 -
日志服务:通过
systemd-journald
或rsyslog
统一收集和管理日志。
日志的核心作用:
-
故障排查:通过错误日志定位问题根源(如服务崩溃原因)。
-
安全审计:记录用户登录、文件修改等敏感操作。
-
性能监控:分析资源使用情况(如 CPU、内存占用峰值)。
-
合规要求:满足行业法规对日志保留的要求。
通俗比喻:日志就像飞机的“黑匣子”,记录系统运行的每一刻。
2. systemd-journald 服务的事件来源
systemd-journald
是系统日志的“中央收集站”,从以下来源获取信息:
-
内核日志:硬件错误、驱动问题(如
dmesg
显示的内容)。 -
系统服务日志:所有 systemd 管理的服务(如
nginx
、ssh
)。 -
标准输出/错误:应用程序直接输出的日志。
-
结构化日志:支持附加元数据(如优先级、时间戳)。
关键特性:
-
二进制格式存储(效率高,但需用
journalctl
查看)。 -
支持按时间、服务名、优先级过滤日志。
3. systemd-journald 与 rsyslog 的协作流程
-
systemd-journald:
-
实时收集所有日志(包括内核、服务、应用)。
-
临时存储日志到内存或持久化文件(
/var/log/journal/
)。
-
-
rsyslog:
-
从
systemd-journald
读取日志。 -
根据规则将日志分类存储到不同文件(如
/var/log/auth.log
)。 -
支持转发到远程服务器或数据库。
-
流程示意图:
应用程序 → systemd-journald → rsyslog → /var/log/ 或远程服务器
4. rsyslog 的日志处理规则存放位置
-
主配置文件:
/etc/rsyslog.conf
-
自定义规则:
/etc/rsyslog.d/*.conf
示例规则:
# 将所有认证相关日志存到 auth.log
auth.* /var/log/auth.log
# 将错误日志转发到远程服务器
*.error @192.168.1.100:514
5. 日志文件轮转的作用
轮转(Log Rotation):自动分割、压缩、删除旧日志,防止单个文件过大。
-
作用:
-
节省磁盘空间。
-
保留历史日志(如按周、月归档)。
-
避免打开大文件时的性能问题。
-
轮转工具:logrotate
(配置文件在 /etc/logrotate.conf
和 /etc/logrotate.d/
)。
示例配置:
# 轮转 /var/log/nginx/access.log,保留30天
/var/log/nginx/access.log { daily rotate 30 compress missingok
}
6. 手动发送 Syslog 消息
使用 logger
命令:
logger -p auth.warning "Failed login attempt" # 发送一条认证警告日志
-
参数解释:
-
-p
:指定优先级(如auth.warning
)。 -
-t
:添加标签(如-t "MyScript"
)。
-
7. 默认系统日志存储位置
-
传统日志:
/var/log/
目录下,如:-
syslog
:通用系统日志。 -
auth.log
:认证相关日志。 -
kern.log
:内核日志。 -
messages
:旧版系统的通用日志。
-
-
Journald 日志:
/var/log/journal/
(二进制格式,需用journalctl
查看)。
8. 系统日志字段解析
一条典型的 Syslog 条目包含以下字段:
Aug 10 14:30:01 server sshd[1234]: Failed password for root from 192.168.1.5 port 22
│ │ │ │ │ │
│ │ │ │ │ └─ 日志内容
│ │ │ │ └─ 进程名和 PID
│ │ │ └─ 服务名
│ │ └─ 主机名
│ └─ 时间
└─ 月份
9. 避免系统重启时清除日志
针对 Journald:
-
修改
/etc/systemd/journald.conf
,设置:Storage=persistent # 持久化存储日志
-
创建日志目录并重启服务:
sudo mkdir -p /var/log/journal sudo systemctl restart systemd-journald
10. /etc/systemd/journald.conf
的 Storage 参数
-
auto:默认值,若
/var/log/journal/
存在则持久化,否则存内存。 -
persistent:强制持久化存储(重启后保留)。
-
volatile:仅存内存(重启后丢失)。
-
none:不存储(仅转发到其他服务)。
11. 持久系统日志的优点与轮转机制
优点:
-
长期保留日志,便于追溯历史问题。
-
支持全文搜索和复杂过滤。
内置轮转机制:
-
Journald 自动按时间或大小分割日志文件。
-
默认配置:
-
单个日志文件不超过 10MB。
-
总日志大小不超过磁盘空间的 10%。
-
12. 配置持久系统日志
-
编辑
/etc/systemd/journald.conf
:Storage=persistent Compress=yes # 启用压缩 SystemMaxUse=1G # 日志最大占用 1GB 空间
-
重启服务:
sudo systemctl restart systemd-journald
时间同步(NTP)与 Chrony
13. NTP 协议的作用
-
网络时间协议(NTP):确保所有设备时间一致(误差在毫秒级)。
-
重要性:
-
日志时间戳对齐(排查跨主机问题)。
-
加密通信(如 HTTPS 证书验证)。
-
分布式系统协调(如数据库事务)。
-
通俗比喻:NTP 是互联网的“原子钟”,让全球计算机时间同步。
14. tzselect 命令
-
作用:交互式选择时区(不修改系统配置,仅生成时区名称)。
-
用法:
tzselect # 按提示选择洲、国家、城市 # 输出示例:TZ='Asia/Shanghai'
-
实际配置时区:
sudo timedatectl set-timezone Asia/Shanghai
15. chronyd 服务
-
作用:替代传统
ntpd
,实现更精确的时间同步。 -
优点:
-
更快适应时钟漂移(如虚拟机暂停后恢复)。
-
支持间歇性网络连接(如笔记本电脑)。
-
-
管理命令:
systemctl status chronyd # 查看状态 chronyc tracking # 查看时间同步状态
16. chrony.conf 中的时间源类别
-
server:指定具体的 NTP 服务器(如
server ntp.aliyun.com
)。 -
pool:使用池域名(自动选择多个服务器,如
pool.ntp.org
)。
示例配置:
server ntp1.aliyun.com iburst
pool pool.ntp.org iburst
17. iburst 选项的作用
-
功能:在启动时快速同步时间(发送多个请求包,加速收敛)。
-
适用场景:初次同步或长时间未同步后恢复连接。
18. NTP 时间源的 Stratum 层级
-
Stratum:表示时间源的距离权威源(如原子钟)的跳数。
-
Stratum 0:原子钟、GPS 时钟(物理设备)。
-
Stratum 1:直接连接 Stratum 0 设备的服务器。
-
Stratum 2:从 Stratum 1 同步的服务器,依此类推。
-
-
选择原则:Stratum 越小,时间越精确(通常优先选择 Stratum 1-3)。