分析和存储日志
系统日志
进程和内核都会记录日志,有助于进行故障排除
系统日志保存在 /var/log 目录中,使用 less 和 tail 命令可以查看
RHEL 日志基于 Syslog 协议,systemd-journald 和 rsyslog 服务处理 syslog 日志
systemd-journald 是日志架构核心,记录几乎所有事件消息并存放到带索 引的数据库中,包括内核、引导过程早期的输出;守护进程的标准输出及 标准错误等
systemd-journald 默认将日志记录在内存中
rsyslog 从数据库中读取 systemd-journald 的日志,按照配置文件的定义 进行存放。rsyslog 对日志按照优先级进行分类存放
日志文件类型
将事件记录到系统
/etc/rsyslog.conf 是全局配置文件,/etc/rsyslog.d/*.conf 为个性化配置文件
日志文件轮转
logrotate 工具轮转日志文件,防止 /var/log 空间被占满
轮转时,重命名日志文件(添加时间戳),并创建新的日志文件
轮转若干次(默认4次),丢弃最旧的日志文件,释放磁盘空间
每天都会计划运行 logrotate 程序,轮转频率依据配置文件定义
分析 syslog 条目
日志文件在末尾显示最新的信息,信息记录采用标准格式,以 /var/log/secure 举例
1. 日志条目的时间戳
2. 发送信息的主机
3. 发送信息的程序名称和 PID 编号
4. 具体信息
监控日志
使用命令 tail -f /path/to/file
可以边运行命令,边监控日志
查找事件
systemd-journald 将日志存放在带索引的结构化二进制 journal 文件中,存放在 /run/log 目录中
journalctl 命令可用于检索日志信息,建议以 root 用户执行
error 及以上的日志显示为红色文本
journalctl -n 指定显示最后10条日志,也可以指定条目数量 journalctl -f 刷新日志
journalctl -p debug、info、notice、warning、err、crit、 alert 和 emerg 分别显示该级别及其之上的日志
journalctl --since --until "YYYY-MM-DDhh:mm:ss” yesterday、today 和 tomorrow 可以指定日志时间段,可参考:systemd.time(7) man 帮助
journalctl -o verbose 显示更加详细的日志信息
journalctl 配合以下字段,可以搜索特定内容的日志:
- _COMM 是命令的名称
- _EXE 是进程的可执行文件的路径
- _PID 是进程的 PID
- _UID 是运行该进程的用户的 UID
- _SYSTEMD_UNIT 是启动该进程的 systemd 单元
永久保存系统日志
默认情况下,system journal 保存在内存 /run/log/journal 目录中,系统重启会被清除
修改 /etc/systemd/journald.conf 中 Storage 参数可以设置日志永久保存:
- persistent:永久保存在 /var/log/journal 目录中
- voltile:临时保存在 /run/log/journal 目录中
- auto(默认):如果有 /var/log/journal 目录存在,则永久保存, 如果没有则临时保存
日志大小受到轮转机制限制:默认情况下,日志的大小不能超过所处文件系统的 10%,也不能造成文件系统的可用空间低于15%,此值可以在 /etc/systemd/journald.conf 中设置
配置文件修改完毕记得重启 systmed-journald
设置本地时钟和时区
timedatectl 命令显示系统时钟信息
时间同步采用 NTP 协议
timedatectl list-timezones 可以列出时区数据库,tzselect 命令可以协助选择正确的时区
timedatectl set-timezone 可以设置时区
timedatectl set-time 可以设置时间
timedatectl set-ntp true | false 设置是否开启 NTP
配置和监控 chronyd
chronyd 服务通过与配置的 NTP 服务器进行同步,使通常不准确的本地 硬件时钟 (RTC) 保持正确运行。如果没有可用的网络连接,chronyd 将计 算 RTC 的时钟漂移,并记录在 /etc/chrony.conf 配置文件指定的 driftfile 变量中
修改配置后,需要 systemctl restart chronyd
使用 chrony sources -v 查看是否进行时钟同步