目录
一、日志文件的产生过程
二、产生的日志文件保存在哪儿
(1)文本日志(rsyslong)
(2)二进制日志(systemd-journald)
三、日志存放规则的相关配置文件
四、把自定义文字(日志)添加到日志文件
五、日志轮转
(1)二进制日志rsyslong、文本日志systemd-journald的通用轮转
(2)二进制日志systemd-journald的专属轮转
六、分析监控日志(rsyslong)
七、分析监控日志(systemd-journald)
(1)显示所有日志信息
(2)查看日志文件大小
(3)过滤显示指定的日志信息
八、持久化二进制日志(systemd-journald)
(1)持久化思路
(2)持久化实现
一、日志文件的产生过程
日志内容:内核、开机引导、守护进程启动运行的事件和输出
产生过程:系统的syslog组件产生,由rsyslog.srevice和systemd-journald.srevice这2个服务产生日志、写到日志文件里
分类:分为文本类型日志、二进制类型日志
二、产生的日志文件保存在哪儿
(1)文本日志(rsyslong)
- 由rsyslong服务产生;
- 可以用cat、more、tail等命令查看
- 存放在:/var/log/
补充(上图)
/var/log/secure:包含登录相关的。比如用户登录失败的记录、原因
/var/log/wtmp:是二进制文件,用命令查看是乱码。只能用last命令才看得到
/var/log/utmp:是二进制文件,用命令查看是乱码。只能用w和who命令才看得到
/var/log/boot.log:开机时,系统启动服务时,相关的输出
/var/log/demsg:开机时,系统启用硬件时,相关的输出。是二进制文件,用命令查看是乱码,只能用dmesg命令才看得到
(2)二进制日志(systemd-journald)
- 由systemd-journald服务产生;
- 用cat、more、tail这些命令查看是乱码,只能用journaldctl命令查看;
- 存放在:/run/log/
/run/是内存映射的目录,重启后/run/log/会清空重建,二进制日志会丢失。不过在重启前系统会先把二进制日志重要内容记录到“文本日志存放目录/var/log/”下
三、日志存放规则的相关配置文件
作用:比如,与安全相关的日志都是存放到/var/log/secure文件。这个默认行为就是在配置文件里预设置好的
配置文件:/etc/rsyslog.conf(主配置文件)、/etc/rsyslog.d/*.conf(子配置文件)
主配置文件参数:
# rules #
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#.none表示匹配所有优先级。所有优先级的邮件、安全、定时任务服务产生的日志信息,都会写到 /var/log/messages
#####除了none,其他优先级如下图
mail.* /var/log/maillog
#邮件服务产生的日志信息(.*表示匹配所有优先级),都会写到 /var/log/maillog
authpriv.* /var/log/secure
#安全服务产生的日志信息(.*表示匹配所有优先级),都会写到 /var/log/secure
cron.* /var/log/cron
#定时任务服务产生的日志信息(.*表示匹配所有优先级),都会写到 /var/log/cron
*.emerg :omusrmsg:*
#所有服务(.emerg表示匹配最高优先级紧急)的紧急日志,都直接打印在控制台,不记录到日志文件
local7.* /var/log/boot.log
#local7服务产生的日志信息(.*表示匹配所有优先级),都会写到/var/log/boot.log
四、把自定义文字(日志)添加到日志文件
logger -p local7.notice "自定义日志内容" #手动把自定义文字添加到/var/log/boot.log末尾,备注优先级为notice
五、日志轮转
(1)二进制日志rsyslong、文本日志systemd-journald的通用轮转
出现问题:系统日志一直都增加,由各种系统服务产生。时间久了,服务器肯定存不下。
比如:
- 定时任务相关的服务,5月15日产生一个日志文件cron-20230515,5月16日又产生cron-20230516;
- 服务启动相关的服务,5月15日产生一个日志文件boot.log-20230515,5月16日又产生boot.log-20230516
解决办法:linux引入了日志轮转的机制来解决这个问题。日志轮转,就是创建新日志文件,删除旧日志文件的过程
具体实现:定时任务cron这个系统服务,每天会运行一次logrotate脚本(/etc/cron.daily/logrotate),脚本调用/etc/logrotate.conf这个配置文件,实现日志轮转 //logrotate脚本运行时只有守护进程,不产生服务
日志轮转配置文件/etc/logrotate.conf:
该文件设置了轮转规则
weekly:每周轮转一次(还有monthly、day、daily)
rotate4:同一个文件最多轮转4次,4次之后就删除该文件(这儿是只保留最近4周的日志文件,之前的旧日志都删了)
dateteext:创建日志文件时,名字以日期命名XXXX-YYYYMD。如mail-20230516
create:删除旧日志时,创建一个新的空日志文件 //今天创建的,那么今天的日志内容会由rsyslong服务或systemd-journald服务写到该空日志文件里
compress:日志文件要压缩,不写表示不压缩
include:包含子配置文件/etc/logrotate.d。要引入自定义轮转规则配置文件,可以在下面加一条include /etc/自定义配置文件
自定义轮转规则:
更多轮转规则参数:
(2)二进制日志systemd-journald的专属轮转
systemd-journald还对自己产生的二进制日志有1个专属轮转机制,每个月触发1次。默认设置是:日志的大小不能超过所处文件系统的10%,不能造成文件系统的可用空间低于15%;
可以修改/etc/systemd/journald.conf的默认设置调整。
查看当前日志文件大小:journalctl | grep -E 'Runtime|System journal'
查看文件系统的可用空间:df -h
六、分析监控日志(rsyslong)
(1)分析日志
每一条日志文件的内容,都由4部分组成
- 日志记录时间(操作系统时间)
- 日志是那一台主机产生的
- 日志由哪个服务产生 //[1433]是服务对应进程的pid
- 日志详细内容(记录的什么事件)
最新的日志在末尾:每写入一条日志,都写到文件最后
(2)监控日志
tail -f /var/log/日志文件
七、分析监控日志(systemd-journald)
我们可以使用journalctl命令查看systemd-journald服务产生的二进制类型日志文件;
journalctl功能非常强大,比查看rsyslong方便得多。
(1)显示所有日志信息
journalctl
#日志级别根据颜色和字体粗细来区别
(2)查看日志文件大小
journalctl | grep -E 'Runtime|System journal'
8.0M就是日志文件大小,max值是最大可以存多大,也可以用df -h查看当前文件系统支持存多大
(3)过滤显示指定的日志信息
journalctl 【选项】
-n:默认显示最后10条日志(-n 100指定显示最后100条)
-o verbose:比如journalctl -n -o verbose用于显示最后10条日志产生的更详细的相关信息(systemd-journald独有的。查看rsyslong没有)
-f:实时监控日志信息(与tail -f类似)
根据日志级别过滤
-p 【日志级别,如err】:只显示优先级为error及以上的日志条目(也可以过滤其他优先级比如debug、info、notice、warning、err、crit、alert、emerg等)
/**-p err是最常用的。用于查看错误日志(systemd-journald独有的。查看rsyslong就没有单独的选项,只能打印出所有然后过滤,比较麻烦)*/
根据产生时间过滤
--since today:显示今天的所有日志(since后可以跟:yesterday、today、tomorrow)
--since "2014-02-10 20:30:00" --until "2014-02-13 12:00:00":显示指定时间段的日志信息
根据可执行文件路径过滤
_EXE=/xxxx/XXXX.sh
过滤指定服务
-u 【单元名,如nginx.service】:也是最常用的,用于查看指定服务输出的日志
-b:查看开机单元相关输出日志
_COMM=nginx:过滤执行nginx这个命令(作业)输出的日志(同-u nginx)
_SYSTEMD_UNIT=nginx.service:过滤启动nginx的单元输出的日志(同-u nginx)
过滤指定进程
_PID=XXXX #根据进程PID过滤
_UID=XXXX #根据进程的用户UID过滤
八、持久化二进制日志(systemd-journald)
systemd-journald产生的二进制日志文件存放在/run/log/里,而/run/是内存映射的目录,重启后/run/log/会清空重建,二进制日志会丢失。
(1)持久化思路
要想把systemd-journald产生的日志永久保存到系统,可以通过修改配置文件实现:
修改/ec/systemd/journald.conf
storage有三个参数
volatile:不持久化
persisent:重启后把二进制文件持久化保存到/var/log/journal/里,/var/log/journal/不存在会自动创建journal文件夹
auto:存在/var/log/journal/才持久化,没有journal文件夹不持久化
(2)持久化实现
具体持久化的操作步骤如下
方式一:编辑/ec/systemd/journald.conf,把storage参数改成persistent。然后重新加载systemd- journald服务的配置systemctl reload systemd- journald
方式二:因为storage参数默认是auto,所以只需手动在/var/log/下新建一个journal文件夹即可