日志管理
日志采集格式
目的:
设置日志得格式是为了更清晰或者说更有目的性的看到日志的相关参数,方便管理,满足自己或者客户的需求。
方法:
当然我们这里采集的也是之前上一章中提到的系统日志rsyslog,那么当然是修改其配置文件/etc/rsyslog
vim /etc/rsyslog
查看设置日志模板过后,日志的采集格式跟之前是否不同:
关于如何去修改日志生成的模板(template),我们可以使用man rsyslog.conf查看
%timegenerated% | 显示日志时间 |
---|---|
%FROMHOST-IP% | 显示来源ip |
%syslogtag% | 显示记录目标 |
%msg% | 日志内容 |
\n | 换行 |
man rsyslog.conf
我们可以设置所有的日志按照默认的格式输出:
查看结果:发现格式确实变化,按照我们制定的默认方式输出。
查看内存中日志:journalctl
我们之前说过,rsyslog的作用只是用来采集系统日志的,而除此之外,我们还可以通过journalctl来查看内存当中的日志。
journalctl相关指令及参数
- 查看最近五条日志:
journalctl -n 5
- 查看错误日志信息
journalctl -p err
- 查看日志详细信息
journalctl -o verbose
- 查看日志信息以json格式显示
journalctl -o json
- 查看某个进程的日志
journalctl _PID=107
- 查看某个时间段内产生的日志
journalctl --since "XXXX-XX-XX XX:XX:XX" 查看从某时间起之后的日志
journalctl --until "XXXX-XX-XX XX:XX:XX" 查看到某时间点之前的日志
journalctl --since "XXXX-XX-XX XX:XX:XX" --until "XXXX-XX-XX XX:XX:XX" 查看某个时间段内日志
如何用systemd.journald保存系统产生的日志
默认情况下,系统是不会保存使用journalctl查看的日志,默认情况下重启后删除,所以一般只能使用journalctl查看开机之后产生的日志,我们依旧还是可以采取方法保存的,并且重启后不失效。
- 首先,我们先查找这个服务是否的进程
- 接着,我们创建相关目录存储日志信息
mkdir /var/log/journal
- 改变目录的所属组为systemd.journald,并修改其强制位,使该目录下产生的文件都属于systemd.journald这个组
chgrp systemd-journal /var/log/journal
chmod g+s /var/log/journal
- killall -1 systemd.journald 重新加载该服务,不关闭重载。发现生成了一个目录,并且里面有相关文件,这些文件应该就可以记录日志
killall -l systemd-journald 重新加载该服务
ls /var/log/journal 第一次查看
stat /var/log/journal/9366cc67b11b4b6d8356bb08e3db18a5
- 重启后,依旧可以查看之前的日志信息,默认情况下是不可以的。
两种日志服务的区别:systemd-journald和rsyslog
- rsyslog是一种改进的日志管理服务,是 syslog 的补充,收集来自内核、启动过程早期阶段、标准输出、系统日志,守护进程启动和运行期间错误的信息
- journald将消息写入到结构化的事件日志中(数据库),默认情况下重启后删除
- syslog 的信息也可以由 systemd-journald 转发到 rsyslog 中进一步处理
- 默认情况下,systemd 的日志保存在 /run/log/journal 中,系统重启就会清除,这是RHEL7的新特性。通过新建/var/log/journal 目录,日志会自动记录到这个目录中,并永久存储。
- rsyslog 服务随后根据优先级排列日志信息,将它们写入到 /var/log目录中永久保存