参考文档
http://fedoraproject.org/wiki/Changes/NoDefaultSyslog
http://0pointer.de/blog/projects/journalctl.html
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/s1-Using_the_Journal.html
https://wiki.archlinux.org/index.php/systemd
Contents
rsyslog
rsyslog.conf
日志的优先级。
Code | Priority | Severity |
---|---|---|
0 | emerg | System is unusable. |
1 | alert | Action must be taken immediately. |
2 | crit | Critical condition. |
3 | err | Non-critical error condition. |
4 | warning | Warning condition. |
5 | notice | Normal but significant event. |
6 | info | Informational event. |
7 | debug | Debugging-level message. |
在 /etc/rsyslog.conf 和 /etc/rsyslog.d/*.conf 中可以设置rsyslog记录日志的规则。
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info表示所有服务大于等于info优先级的信息都会记录到/var/log/messages中;
mail.none表示不记录任何mail的信息到/var/log/messages中。
logrotate
为防止/var/log/messages过大,logrotate可以定时按规则将日志归档到不同文件。
可以参考 man 8 logrotate
(TODO: 补充logrotate)
日志格式
rsyslog的日志有固定格式。
时间戳,发送消息的Host,发送消息的程序/进程,消息内容;
Dec 31 10:59:57 rhel7-0 yum[9992]: Installed: psmisc-22.20-8.el7.x86_64
用tail -f /var/log/messages 可以监视日志。
logger
用logger命令可以手动发送一条日志。不指定-p的话,它会以user.notice的优先级来发送消息。
[root@rhel7-0 ~]# logger -p local7.notice "Log entry created on rhel7" [root@rhel7-0 ~]# tail -1 /var/log/boot.log Dec 31 11:53:30 rhel7-0 root: Log entry created on rhel7
修改完rsyslog的配置之后,重启rsyslog服务让它生效。
[root@rhel7-0 ~]# systemctl restart rsyslog.service
systemd Journal
journalctl是systemd的日志系统,它可以替代rsyslog来记录日志,也可以与rsyslog共存。
用journalctl查看日志
[root@rhel7-0 ~]# journalctl
它类似于cat /var/log/messages
journal -n 类似于 tail /var/log/messsages
journalctl -f 类似于 tail -f /var/log/messages
用journal -p 可以看特定优先级(及更高优先级)的日志内容。
[root@rhel7-0 ~]# journalctl -p err
可以指定查看日志的时间
[root@rhel7-0 ~]# journalctl --since today [root@rhel7-0 ~]# journalctl --since "2014-12-30" --until "2014-12-31"
第二条是不显示12-31日志的。
查看更详细的信息,可以用journalctl -o verbose
[root@rhel7-0 ~]# journalctl -o verbose -- Logs begin at Tue 2014-12-30 20:19:53 EST, end at Wed 2014-12-31 12:21:51 EST. -- Tue 2014-12-30 20:19:53.575455 EST [s=d98f189de2ef411f8a45fdb5c6e2d84d;i=1;b=76af4accd843440c8b38e33f0dea260b;m=7ea4c;t=50b78e7a0481f;x=d3a97e9fae269460] PRIORITY=6 _TRANSPORT=driver MESSAGE=Runtime journal is using 6.2M (max 49.7M, leaving 74.5M of free 490.8M, current limit 49.7M). MESSAGE_ID=ec387f577b844b8fa948f33cad9a75e6 _PID=81 _UID=0 _GID=0 _COMM=systemd-journal _EXE=/usr/lib/systemd/systemd-journald _CMDLINE=/usr/lib/systemd/systemd-journald _CAP_EFFECTIVE=4402800cf _SYSTEMD_CGROUP=/system.slice/systemd-journald.service _SYSTEMD_UNIT=systemd-journald.service _SYSTEMD_SLICE=system.slice _SELINUX_CONTEXT=kernel _BOOT_ID=76af4accd843440c8b38e33f0dea260b _MACHINE_ID=5ae5a23249dbba212fa0c307ab9f101f _HOSTNAME=localhost.localdomain
_COMM 是command的名称;
_EXE 是process的路径;
_SYSTEMD_UNIT The systemd unit that started the process;
可以用这些参数作为筛选条件进行查询,多个条件则需要同时满足。
[root@rhel7-0 ~]# journalctl _SYSTEMD_UNIT=sshd.service
永久记录
默认情况下,journal在重启后就清空了。要想永久保存日志,可以按以下方法操作。
[root@rhel7-0 ~]# mkdir /var/log/journal [root@rhel7-0 ~]# chown root:systemd-journal /var/log/journal/ [root@rhel7-0 ~]# chmod 2755 /var/log/journal/ [root@rhel7-0 ~]# killall -USR1 systemd-journald