centos7的日志系统:journald, rsyslog, logrotate

  • 1 日志系统

  • 2 systemd-journald

    • 2.1 journalctl查看日志
    • 2.2 journald存储
  • 3 journald日志固化:rsyslog

  • 4 rsyslog文件轮转: logrotate

  • 5 centos7.2的bug

1 日志系统

centos7使用systemd-journald做日志中心库,使用rsyslog来持久化日志,使用logrotate来轮转日志文件。

2 systemd-journald

systemd-journald 守护进程提供一种改进的日志管理服务,可以收集来自内核,启动过程的早期阶段,标准输出,系统日志,以及守护进程启动和运行期间的错误的消息。它将这些消息写到一个结构化的事件日志中,默认情况下不在重新启动之间保留。

2.1 journalctl查看日志

journalctl –dmesg 查看 dmesg 信息。
journalctl -f follow形式查看日志
journalctl –since=yesterday 指定时间段
journalctl -u kubelet 指定UNIT,即使用journald的组件。
journalctl –verify 检查日志文件的一致性

例如,docker daemon会配置为将所有容器的日志为存储到journald。

2.2 journald存储

centos7上journald的日志存储在/run/log中,所以journal的日志是存储于内存中的(/run是tmpfs),重启之后清空。默认journald占用空间上限4G,可以通过systemctl status systemd-journald查看。

3 journald日志固化:rsyslog

默认journald配置#ForwardToSyslog=no,所以并未将日志转发给syslog。syslog自己去读取的journald的日志文件(类似journalctl)。

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

4 rsyslog文件轮转:logrotate

rsyslog的日志存储于/var/log下,显然日志文件不能无限变大,否则磁盘空间会被耗尽。centos7使用logrotate来做日志文件轮转。

$cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

logrotate的配置文件是/etc/logrotate.conf,其定义了logrotate的玩法:每周,最多4周,文件名加时间后缀,默认不压缩

cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
在/etc/logrotate.d/中定义了需要轮转的文件,syslog也在其中。

cat /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler

5 centos7.2的bug

有时会在cento7.2的dmesg里发现如下日志,此时可能journald已经停止记录日志了。

[92658.758413] systemd-journald[17718]: Failed to write entry (21 items, 547 bytes), ignoring: Cannot assign requested address

可以通过verify找到冲突的文件后,删除该文件得到解决。

journalctl --verify
File corruption detected at /run/log/journal/024eed52f512473bb1bfbca2d3faedc3/system.journal:000000 (of 83886080 bytes, 0%).      

为了避免日后出现问题,可以设置Compress=no来规避。

echo "Compress=no" >> /etc/systemd/journald.conf
systemctl restart systemd-journald
systemctl restart rsyslog.service
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 了解日志文件是很重要的事情。日志文件可以记录系统在什么时间、哪台主机、哪个服务、出现了什么信息等。可以在系统出现问...
    Zhang21阅读 10,741评论 0 5
  • 日志介绍 日志 记录历史事件:时间,地点,人物,事件 日志级别:事件的关键性程度,Loglevel 系统日志服务 ...
    Ben0606阅读 5,697评论 0 2
  • muahao阅读 6,286评论 0 3
  • 日志介绍rsyslog日志管理journalctlMySQL管理日志 一、日志介绍 (一)日志的基本概念 日志:将...
    哈喽别样阅读 3,610评论 0 0
  • 1 概述 系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误...
    ghbsunny阅读 9,523评论 0 0

友情链接更多精彩内容