原文链接:https://blog.csdn.net/wangzhicheng987/article/details/122325623
持久化systemd日志
CentOS 7 可以使用systemd-journald来做日志中心库(生成日志文件夹),systemd-journald 守护进程提供一种改进的日志管理服务,可以收集来自内核,启动过程的早期阶段,标准输出,系统日志,以及服务,守护进程启动和运行期间的错误的消息。
默认情况下,systemd 的日志保存在 /run/log/journal 中,系统重启会清除掉。
可通过新建目录,让日志自动记录到新建目录中,并永久存储。
将这些消息写到一个结构化的事件日志中,默认情况下不在重新启动之间保留。
修改journal存储模式,配置为持久化
[root@shuge ~]# sed -i "/^#Storage/cStorage=persistent" /etc/systemd/journald.conf
[root@shuge ~]# cat /etc/systemd/journald.conf
....
[Journal]
Storage=persistent
....
先处理所需要的目录与相关权限设置 ( 可选,服务重启后会自动创建该目录 )
[root@shuge ~]# mkdir /var/log/journal
[root@shuge ~]# chown root:systemd-journal /var/log/journal
[root@shuge ~]# chmod 2775 /var/log/journal/
重新启动 systemd-journald 并且观察备份的日志数据!
[root@shuge ~]# systemctl restart systemd-journald.service
[root@shuge ~]# ll /var/log/journal/
total 0
drwxr-sr-x 2 root systemd-journal 117 Jan 5 16:06 2b17394d61974d95b2f8810a81a2dfcb
查看日志(journalctl)
Systemd 统一管理所有 Unit 的启动日志。可以只用journalctl一个命令,查看所有相关日志(内核日志和应用日志)。
以flow形式查看日志,类似tail -f的效果
$ journalctl -f
[root@shuge local]# journalctl -f
-- Logs begin at Mon 2021-01-04 19:16:30 CST. --
...
Jan 07 09:05:16 shuge.cn systemd[1]: Started Network Manager Script Dispatcher Service.
Jan 07 09:05:16 shuge.cn nm-dispatcher[1981]: req:1 'dhcp4-change' [ens32]: new request (2 scripts)
Jan 07 09:05:16 shuge.cn nm-dispatcher[1981]: req:1 'dhcp4-change' [ens32]: start running ordered scripts...
Jan 07 09:07:12 shuge.cn systemd[1]: Starting Cleanup of Temporary Directories...
Jan 07 09:07:13 shuge.cn systemd[1]: Started Cleanup of Temporary Directories.
查看内核日志
$ journalctl -k
[root@shuge local]# journalctl -k
-- Logs begin at Mon 2021-01-04 19:16:30 CST, end at Fri 2022-01-07 09:07:13 CST. --
....
Jan 07 16:51:31 zaishu.cn kernel: BIOS-e820: [mem 0x000000003ff00000-0x000000003fffffff] usable
Jan 07 16:51:31 zaishu.cn kernel: BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
Jan 07 16:51:31 zaishu.cn kernel: BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
Jan 07 16:51:31 zaishu.cn kernel: BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
Jan 07 16:51:31 zaishu.cn kernel: BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
Jan 07 16:51:31 zaishu.cn kernel: NX (Execute Disable) protection: active
......
查看指定服务日志
$ journalctl -u mysql.serivce
[root@shuge local]# journalctl -u mysql.service
-- Logs begin at Mon 2021-01-04 19:16:30 CST, end at Fri 2022-01-07 09:07:13 CST. --
Jan 07 09:03:30 shuge.cn systemd[1]: Starting MySQL Server...
Jan 07 09:03:31 shuge.cn mysqld[1771]: Starting MySQL.[ OK ]
Jan 07 09:03:31 shuge.cn systemd[1]: Started MySQL Server.
查看指定日期日志
$ journalctl --since=“2021-11-21 12:14:00” -u mysql
$ journalctl --since=“2021-11-21 12:14:00” --until=“2021-11-21 23:14:00” -u mysql
[root@shuge local]# journalctl --since="2021-11-21 12:14:00" -u mysql
-- Logs begin at Mon 2021-01-04 19:16:30 CST, end at Fri 2022-01-07 09:07:13 CST. --
Jan 07 09:03:30 shuge.cn systemd[1]: Starting MySQL Server...
Jan 07 09:03:31 shuge.cn mysqld[1771]: Starting MySQL.[ OK ]
Jan 07 09:03:31 shuge.cn systemd[1]: Started MySQL Server.
[root@shuge local]# journalctl --since="2021-11-21 12:14:00" --until="2021-11-21 23:14:00" -u mysql
-- Logs begin at Mon 2021-01-04 19:16:30 CST, end at Fri 2022-01-07 09:07:13 CST. --
查看指定级别日志
$ journalctl -p 3 -u mysql.service
日志级别
操作系统提供了从0 (emerg) 到 7 (debug) 一共7个级别的日志,7个级别的含义为:
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
[root@shuge local]# journalctl -p 3 -u mysql.service
-- No entries --
查看日志占用的磁盘空间
$ journalctl --disk-usage
[root@shuge local]# journalctl --disk-usage
Archived and active journals take up 16.0M on disk.
设置日志占用的空间
$ journalctl --vacuum-size=500M
[root@shuge local]# journalctl --vacuum-size=500M
Vacuuming done, freed 0B of archived journals on disk.
设置日志保存的时间
$ journalctl --vacuum-time=1month
[root@shuge local]# journalctl --vacuum-time=1month
Deleted archived journal /var/log/journal/2b17394d61974d95b2f8810a81a2dfcb/system@03f61e2080f54516b6dc72d59c364ebd-0000000000000001-0005b81138ce4b57.journal (8.0M).
Vacuuming done, freed 8.0M of archived journals on disk.
检查日志文件一致性
$ journalctl --verify
[root@shuge local]# journalctl --verify
PASS: /var/log/journal/2b17394d61974d95b2f8810a81a2dfcb/system.journal
Systemd 统一管理所有 Unit 的启动日志。可以只用journalctl一个命令,查看所有相关日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf。