20220926 18. 认识与分析登录文件
18.1 什么是登录文件
登录文件可以记录系 统在什么时间、哪个主机、哪个服务、出现了什么讯息等信息, 这些信息也包括使用者识别 数据、系统故障排除须知等信息。如果你能够善用这些登录文件信息的话,你的系统出现错 误时, 你将可以在第一时间发现,而且也能够从中找到解决的方案
什么是登录文件呢?简单的说,就是记录系统活动信息的几个文件, 例如:何时、何地 (来源 IP)、何人 (什么服务名称)、做了什么动作 (讯息登录啰)。 换句话说就是:记 录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。
18.1.1 CentOS 7 登录文件简易说明
Linux 主机在背景之下有相当多的 daemons 同时在工作着,这些工作中 的程序总是会显示一些讯息, 这些显示的讯息最终会被记载到登录文件当中啦。也就是说, 记录这些系统的重要讯息就是登录文件的工作啦!
登录文件的重要性
-
解决系统方面的错误
-
解决网络服务的问题
-
过往事件记录簿
Linux 常见的登录文件文件名
登录文件可以帮助我们了解很多系统重要的事件,包括登陆者的部分信息,因此登录文件的 权限通常是设置为仅有 root 能够读取而已。
常见的几个登录文件
登录文件 | 描述 |
---|---|
/var/log/boot.log | 开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持 的功能启动等。这些流程都会记录在 /var/log/boot.log 里面哩! 不过这个文件只会存在 这次开机启动的信息,前次开机的信息并不会被保留下来! |
/var/log/cron | crontab 调度有没有实际被进 行? 进行过程有没有发生错误?你的 /etc/crontab 是否撰写正确?在这个登录文件内查 询看看。 |
/var/log/dmesg | 记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS 默认将开机时核心的硬件侦测过程取消显示, 因此额外将数据记录一份在这个文件中 |
/var/log/lastlog | 可以记录系统上面所有的帐号最近一次登陆系统时的相关信息 |
/var/log/maillog /var/log/mail/* |
记录邮件的往来信息,其实主要是记录 postfix (SMTP 协定提供者) 与 dovecot (POP3 协定提供者) 所产生的讯息啦。 SMTP 是发 信所使用的通讯协定, POP3 则是收信使用的通讯协定。 postfix 与 dovecot 则分别是两 套达成通讯协定的软件。 |
/var/log/messages | 这个文件相当的重要,几乎系统发生的错误讯息 (或者是重要的信 息) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是一定要查阅的登 录文件之一 |
/var/log/secure | 基本上,只要牵涉到“需要输入帐号密码”的软件,那么当登陆时 (不管 登陆正确或错误) 都会被记录在此文件中。 包括系统的 login 程序、图形接口登陆所使 用的 gdm 程序、 su, sudo 等程序、还有网络连线的 ssh, telnet 等程序, 登陆信息都会 被记载在这里; |
/var/log/wtmp /var/log/faillog |
这两个文件可以记录正确登陆系统者的帐号信息 (wtmp) 与错误登陆时所使用的帐号信息 (faillog) ! 我们在第十章谈到的 last 就是 读取 wtmp 来显示的, 这对于追踪一般帐号者的使用行为很有帮助! |
/var/log/httpd/ /var/log/samba/ |
不同的网络服务会使用它们自己的登录文件来记载它们 自己产生的各项讯息!上述的目录内则是个别服务所制订的登录文件 |
常见的登录文件就是这几个,但是不同的 Linux distributions ,通常登录文件的文件名不会相 同
登录文件所需相关服务 (daemon) 与程序
登录文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入 的登录文件与相关格式, 例如 WWW 软件 apache 就是这样处理的。另一种则是由 Linux distribution 提供的登录文件管理服务来统一管理。 你只要将讯息丢给这个服务后,他就会自 己分门别类的将各种讯息放置到相关的登录文件去!CentOS 提供 rsyslog.service 这个服务 来统一管理登录文件喔!
可以通过 logrotate (登录文件轮替) 这玩意儿来自动化处理登录文件容量与更新的问题
所谓的 logrotate 基本上,就是将旧的登录文件更改名称,然后创建一个空的登录文件,如此 一来, 新的登录文件将重新开始记录,然后只要将旧的登录文件留下一阵子,嗯!那就可以 达到将登录文件“轮转”的目的啦! 此外,如果旧的记录 (大概要保存几个月吧!) 保存了一 段时间没有问题,那么就可以让系统自动的将他砍掉, 免得占掉很多宝贵的硬盘空间说!
需要的服务与程序有:
-
systemd-journald.service:最主要的讯息收受者,由 systemd 提供的;
-
rsyslog.service:主要登录系统与网络等服务的讯息;
-
logrotate:主要在进行登录文件的轮替功能。
CentOS 7.x 使用 systemd 提供的 journalctl 日志管理
CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录 文件日志管理功能喔!他使用的是 systemd-journald.service 这个服务来支持的。基本上,系 统由 systemd 所管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一 些问题或者是正常的讯息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下 来,之后再将这个讯息发送给 rsyslog.service 作进一步的记载。
systemd-journald.service 的记录主要都放置于内存中,因此在存取方面性能比较好~我们也 能够通过 journalctl 以及 systemctl status unit.service 来查看各个不同服务的登录文件! 这有 个好处,就是登录文件可以随着个别服务让你查阅,在单一服务的处理上面,要比跑到 /var/log/messages 去大海捞针来的简易很多!
system-journald.service 里面的很 多观念还是沿用 rsyslog.service 相关的信息
18.1.2 登录文件内容的一般格式
系统产生的讯息经过记录下来的数据中,每条讯息均会记录下面的几个重要数 据:
-
事件发生的日期与时间;
-
发生此事件的主机名称;
-
启动此事件的服务名称 (如 systemd, CROND 等) 或指令与函数名称 (如 su, login..);
-
该讯息的实际数据内容。
怎么登录文 件格式中,第二个字段项目是“主机名称”啊? 这是因为登录文件可以做成登录文件服务器, 可以收集来自其他服务器的登录文件数据喔!
18.2 rsyslog.service :记录登录文件的服务
ps aux | grep rsyslog
systemctl status rsyslog.service
18.2.1 rsyslog.service 的配置文件:/etc/rsyslog.conf
rsyslogd 针对各种服务与讯息记录在某些文件的配置文件就是 /etc/rsyslog.conf
服务名称[.=!]讯息等级 讯息记录的文件名或设备或主机
# 下面以 mail 这个服务产生的 info 等级为例:
mail.info /var/log/maillog_info
# 这一行说明:mail 服务产生的大于等于 info 等级的讯息,都记录到
# /var/log/maillog_info 文件中的意思。
服务名称
rsyslogd 主要还是通过 Linux 核心提供的 syslog 相关规范来设置数据的分类的,Linux 的 syslog 本身有规范一些服务讯息, 你可以通过这些服务来储存系统的讯息。Linux 核心的 syslog 认识的服务类型主要有下面这些: (可使用 man 3 syslog 查询到相关的信息,或查询 syslog.h 这个文件来了解的!)
相对序号 | 服务类别 | 说明 |
---|---|---|
0 | kern(kernel) | 就是核心 (kernel) 产生的讯息,大部分都是硬件侦测以及 核心功能的启用 |
1 | user | 在使用者层级所产生的信息,例如后续会介绍到的用户使用 logger 指令来记录登录文件的功能 |
2 | 只要与邮件收发有关的讯息记录都属于这个; | |
3 | daemon | 主要是系统的服务所产生的信息,例如 systemd 就是这个有 关的讯息! |
4 | auth | 主要与认证/授权有关的机制,例如 login, ssh, su 等需要帐 号/密码的咚咚; |
5 | syslog | 就是由 syslog 相关协定产生的信息,其实就是 rsyslogd 这 支程序本身产生的信息啊! |
6 | lpr | 亦即是打印相关的讯息啊! |
7 | news | 与新闻群组服务器有关的东西; |
8 | uucp | 全名为 Unix to Unix Copy Protocol,早期用于 unix 系统间 的程序数据交换; |
9 | cron | 就是例行性工作调度 cron/at 等产生讯息记录的地方; |
10 | authpriv | 与 auth 类似,但记录较多帐号私人的信息,包括 pam 模块 的运行等! |
11 | ftp | 与 FTP 通讯协定有关的讯息输出! |
16~23 | local0 ~ local7 | 保留给本机用户使用的一些登录文件讯息,较常与终端机互 动。 |
举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有 关的软件,这些软件在设计登录文件记录时,都会主动调用 syslog 内的 mail 服务名称 (LOG_MAIL)。所以上述三个软件 (sendmail, postfix, dovecot) 产生的讯息在 syslog 看 起来,就会“是 mail ”类型的服务了
讯息等级
Linux 核心的 syslog 将讯息分为七个主要的等级,根据 syslog.h 的定义,讯息名称 与数值的对应如下:
等级数值 | 等级名称 | 说明 |
---|---|---|
7 | debug | 用来 debug (除错) 时产生的讯息数据; |
6 | info | 仅是一些基本的讯息说明而已; |
5 | notice | 虽然是正常信息,但比 info 还需要被注意到的一些信息内 容; |
4 | warning(warn) | 警示的讯息,可能有问题,但是还不至于影响到某个 daemon 运行的信息;基本上, info, notice, warn 这三个讯息都是在告 知一些基本信息而已,应该还不至于造成一些系统运行困扰; |
3 | err(error) | 一些重大的错误讯息,例如配置文件的某些设置值造成该服务 服法启动的信息说明, 通常借由 err 的错误告知,应该可以了 解到该服务无法启动的问题呢! |
2 | crit | 比 error 还要严重的错误信息,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔! |
1 | alert | 警告警告,已经很有问题的等级,比 crit 还要严重! |
0 | emerg(panic) | 疼痛等级,意指系统已经几乎要死机的状态! 很严重的错误 信息了。通常大概只有硬件出问题,导致整个核心无法顺利运 行,就会出现这样的等级的讯息吧! |
除了 0 到 6 之外还有两个比较特殊的等级, 那就是 debug(错误侦测等 级) 与 none (不需登录等级) 两个
链接符号
-
. :代表“比后面还要严重的等级 (含该等级) 都被记录下来”的意思,例如: mail.info 代表只要是 mail 的信息,而且该信息等级严重于 info (含 info 本身)时,就会被记录下 来的意思。
-
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
-
.!:代表不等于, 亦即是除了该等级外的其他等级都记录。
讯息记录的文件名或设备或主机
常见 的放置处:
-
文件的绝对路径:通常就是放在 /var/log 里头的文件啦!
-
打印机或其他:例如 /dev/lp0 这个打印机设备
-
使用者名称:显示给使用者啰!
-
远端主机:例如 @study.vbird.tsai 当然啦,要对方主机也能支持才行!
-
*:代表“目前在线上的所有人”,类似 wall 这个指令的意义!
服务、daemon 与函数名称
名词 | 描述 |
---|---|
syslog | 这个是 Linux 核心所提供的登录文件设计指引,所有的要求大概都写 入道一个名为 syslog.h 的头文件案中。如果你想要开发与登录文件有 关的软件, 那你就得要依循这个 syslog 函数的要求去设计才行!可以 使用 man 3 syslog 去查询一下相关的数据! |
rsyslogd | 为了要达成实际上进行讯息的分类所开发的一套软件,所以,这就是 最基本的 daemon 程序! |
rsyslog.service | 为了加入 systemd 的控制,因此 rsyslogd 的开发者设计的启动服务脚 本设置! |
CentOS 7.x 默认的 rsyslog.conf 内容
# 来自 CentOS 7.x 的相关数据
[root@study ~]# vim /etc/rsyslog.conf
1 #kern.* /dev/console
2 *.info;mail.none;authpriv.none;cron.none /var/log/messages
3 authpriv.* /var/log/secure
4 mail.* -/var/log/maillog
5 cron.* /var/log/cron
6 *.emerg :omusrmsg:*
7 uucp,news.crit /var/log/spooler
8 local7.* /var/log/boot.log
-
kern.*:只要是核心产生的讯息,全部都送到 console(终端机) 去。console 通常是由 外部设备连接到系统而来, 举例来说,很多封闭型主机 (没有键盘、屏幕的系统) 可以 通过连接 RS232 连接口将讯息传输到外部的系统中, 例如以笔记本电脑连接到封闭主机 的 RS232 插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的屏幕观察 系统时, 可以通过这个项目来连接取得核心的讯息
-
*.info;mail.none;authpriv.none;cron.none:由于 mail, authpriv, cron 等类别产生的讯息较 多, 且已经写入下面的数个文件中,因此在 /var/log/messages 里面就不记录这些项 目。除此之外的其他讯息都写入 /var/log/messages 中。很重要
-
authpriv.*:认证方面的讯息均写入 /var/log/secure 文件
-
mail.*:邮件方面的讯息则均写入 /var/log/maillog 文件
-
cron.*:例行性工作调度均写入 /var/log/cron 文件
-
*.emerg:当产生最严重的错误等级时,将该等级的讯息以 wall 的方式广播给所有在系统 登陆的帐号得知, 要这么做的原因是希望在线的使用者能够赶紧通知系统管理员来处理 这么可怕的错误问题
-
uucp,news.crit:uucp 是早期 Unix-like 系统进行数据传递的通讯协定,后来常用在新闻 群组的用途中。 news 则是新闻群组。当新闻群组方面的信息有严重错误时就写入 /var/log/spooler 文件中
-
local7.*:将本机开机时应该显示到屏幕的讯息写入到 /var/log/boot.log 文件中
第四行关于 mail 的记录中,在记录的文件 /var/log/maillog 前面还有个减号“ - ”是干 嘛用的?由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的 内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁盘内,这样将有助于 登录文件的存取性能。 只不过由于讯息是暂存在内存内,因此若不正常关机导致登录信息未 回填到登录文件中,可能会造成部分数据的遗失。
每个 Linux distributions 的 rsyslog.conf 设置差异是颇大的
自行增加登录文件文件功能
想要让“所有的信息”都额外写入到 /var/log/admin.log 这个文件
# 1\. 先设置好所要创建的文件设置!
[root@study ~]# vim /etc/rsyslog.conf
# Add by VBird 2015/08/19 <==再次强调,自己修改的时候加入一些说明
*.info /var/log/admin.log <==有用的是这行啦!
# 2\. 重新启动 rsyslogd 呢!
[root@study ~]# systemctl restart rsyslog.service
18.2.2 登录文件的安全性设置
rsyslogd 的登录文件只要“被编辑过”就无法继续记录,需要重新启动 rsyslog.service
# 仅能被增加,而不能被删除
chattr +a /var/log/admin.log
18.2.3 登录文件服务器的设置
再想像一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了 解每部主机的状态,因此,你常常需要登陆这十部主机去查阅你的登录文件~ 哇!光用想 的,每天要进入十部主机去查数据,想到就烦~没关系~这个时候我们可以让某一部主机当 成 “登录文件服务器”,用他来记录所有的十部 linux 主机的信息
登录文件服务器默认的端口就是 UDP 或 TCP 的 port 514
服务端设置:
# 1\. Server 端:修改 rsyslogd 的启动配置文件,在 /etc/rsyslog.conf 内!
[root@study ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
# 上面的是 UDP 端口,下面的是 TCP 端口,放开一个就可以
# 2\. 重新启动与观察 rsyslogd 喔!
[root@study ~]# systemctl restart rsyslog.service
[root@study ~]# netstat -ltnp | grep syslog
客户端设置:
[root@study ~]# vim /etc/rsyslog.conf
*.* @@192.168.1.100
#*.* @192.168.1.100 # 若用 UDP 传输,设置要变这样!
[root@study ~]# systemctl restart rsyslog.service
18.3 登录文件的轮替(logrotate)
rsyslogd 利用的是 daemon 的方 式来启动的, 当有需求的时候立刻就会被执行的,但是 logrotate 却是在规定的时间到了之后 才来进行登录文件的轮替, 所以这个 logrotate 程序当然就是挂在 cron 下面进行的
/etc/cron.daily/logrotate 就是记录了每 天要进行的登录文件轮替的行为
18.3.1 logrotate 的配置文件
logrotate 这个程序的参数配置文件
-
/etc/logrotate.conf
-
/etc/logrotate.d/
logrotate.conf 才是主要的参数文件,至于 logrotate.d 是一个目录, 该目录里面的所有 文件都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的文件 中,如果没有规定到的一些细部设置,则以 /etc/logrotate.conf 这个文件的规定来指定为默认 值!
logrotate 的主要功能就是将旧的登录文件移动成旧文件, 并且重新创建 一个新的空的文件来记录,他的执行结果有点类似下面的图示:
当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存登录文件。而第二次执行之后,则 messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存登录文件!那么如果我们仅设置保留三个登录文件而已的话,那么执行第四 次时,则 messages.3 这个文件就会被删除,并由后面的较新的保存登录文件所取代
看一 下默认的 logrotate 的内容
[root@www ~]# vim /etc/logrotate.conf
# 底下的配置是 "logrotate 的默认配置值" ,如果个别的文件配置了其他的参数,
# 则将以个别的文件配置为主,若该文件没有配置到的参数则以这个文件的内容为默认值!
weekly <==默认每个礼拜对登录文件进行一次 rotate 的工作
rotate 4 <==保留几个登录文件呢?默认是保留四个!
create <==由於登录文件被更名,因此创建一个新的来继续储存之意!
#compress <==被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来运行 rotate 的工作!
/var/log/wtmp { <==仅针对 /var/log/wtmp 所配置的参数
monthly <==每个月一次,取代每周!
minsize 1M <==文件容量一定要超过 1M 后才进行 rotate (略过时间参数)
create 0664 root utmp <==指定新建文件的权限与所属帐号/群组
rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。
}
# 这个 wtmp 可记录登陆者与系统重新启动时的时间与来源主机及登陆期间的时间。
# 由於具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看文件容量。
# 由於仅保留一个登录文件而已,不满意的话可以将他改成 rotate 5 吧!
logrotate.conf 的 设置语法是:
登录文件的绝对路径档名 ... {
个别的参数配置值,如 monthly, compress 等等
}
以 /etc/logrotate.d/syslog 这个轮替 rsyslog.service 服务的文件,来看看该如何设 置他的 rotate 呢?
[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
logrotate 的写法为:
-
文件名:被处理的登录文件绝对路径文件名写在前面,可以使用空白字符分隔多个登录 文件;
-
参数:上述文件名进行轮替的参数使用 { } 包括起来;
-
执行脚本:可调用外部指令来进行额外的命令下达,这个设置需与 sharedscripts .... endscript 设置合用才行。至于可用的环境为:
-
prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;
-
postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服 务!
-
/bin/kill -HUP
是 reload 的意思
假设我们有针对 /var/log/messages 这个文件增加 chattr +a 的属性时, 依据 logrotate 的工作 原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是 由于加上这个 +a 的参数啊,所以更名是不可能成功的! 那怎么办呢?
[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages
endscript
}
18.3.2 实际测试 logrotate 的动作
[root@www ~]# logrotate [-vf] logfile
选项与参数:
-v :启动显示模式,会显示 logrotate 运行的过程喔!
-f :不论是否符合配置档的数据,强制每个登录文件都进行 rotate 的动作!
logrotate -v /etc/logrotate.conf
# 强制进行 logrotate 的动作
logrotate -vf /etc/logrotate.conf
注意一下那个 /var/log/messages 里头是否常常有类似底下的字眼:
Aug 20 01:45:34 study rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="2145" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
这说明的是 rsyslogd 重新启动的时间
18.3.3 自订登录文件的轮替功能
假设你已经创建了 /var/log/admin.log 这个文件, 现在,你想要将该文件加上 +a 这个隐藏标签,而且配置底下的相关资讯:
- 登录文件轮替一个月进行一次;
- 该登录文件若大於 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
- 保存五个备份文件;
- 备份文件需要压缩
# 1. 先创建 +a 这个属性啊!
[root@www ~]# chattr +a /var/log/admin.log
# 2. 开始创建 logrotate 的配置档,添加一个文件在 /etc/logrotate.d 内就对了!
[root@www ~]# vi /etc/logrotate.d/admin
# This configuration is from VBird 2009/04/08
/var/log/admin.log {
monthly <==每个月进行一次
size=10M <==文件容量大於 10M 则开始处置
rotate 5 <==保留五个!
compress <==进行压缩工作!
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/chattr +a /var/log/admin.log
endscript
}
# 3. 测试一下 logrotate 相关功能的资讯显示:
[root@www ~]# logrotate -v /etc/logrotate.conf
# 4. 测试一下强制 logrotate 与相关功能的资讯显示:
[root@www ~]# logrotate -vf /etc/logrotate.d/admin
[root@www ~]# lsattr /var/log/admin.log*
-----a------- /var/log/admin.log
------------- /var/log/admin.log.1.gz <==有压缩过喔!
18.4 systemd-journald.service 简介
在开机过程中的所有信息,包括启动 服务与服务若启动失败的情况等等,都可以直接被记录到 systemd-journald 里头
不过 systemd-journald 由于是使用于内存的登录文件记录方式,系统还是利用文件的型态将 它记录到 /run/log/ 下面,因此重新开机过后,开机前 的登录文件信息当然就不会被记载了。
systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来 记录以前及现在的所以数据到磁盘文件中,方便未来进行查询喔!
18.4.1 使用 journalctl 观察登录信息
[root@study ~]# journalctl [-nrpf] [--since TIME] [--until TIME] _optional
选项与参数:
默认会秀出全部的 log 内容,从旧的输出到最新的讯息
-n :秀出最近的几行的意思~找最新的信息相当有用
-r :反向输出,从最新的输出到最旧的数据
-p :秀出后面所接的讯息重要性排序!请参考前一小节的 rsyslogd 信息
-f :类似 tail -f 的功能,持续显示 journal 日志的内容(实时监测时相当有帮助!)
--since --until:设置开始与结束的时间,让在该期间的数据输出而已
_SYSTEMD_UNIT=unit.service :只输出 unit.service 的信息而已
_COMM=bash :只输出与 bash 有关的信息
_PID=pid :只输出 PID 号码的信息
_UID=uid :只输出 UID 为 uid 的信息
SYSLOG_FACILITY=[0-23] :使用 syslog.h 规范的服务相对序号来调用出正确的数据!
范例一:秀出目前系统中所有的 journal 日志数据
[root@study ~]# journalctl
范例二:(1)仅显示出 2015/08/18 整天以及(2)仅今天及(3)仅昨天的日志数据内容
[root@study ~]# journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00"
[root@study ~]# journalctl --since today
[root@study ~]# journalctl --since yesterday --until today
范例三:只找出 crond.service 的数据,同时只列出最新的 10 笔即可
[root@study ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10
范例四:找出 su, login 执行的登录文件,同时只列出最新的 10 笔即可
[root@study ~]# journalctl _COMM=su _COMM=login -n 10
范例五:找出讯息严重等级为错误 (error) 的讯息!
[root@study ~]# journalctl -p err
范例六:找出跟登录服务 (auth, authpriv) 有关的登录文件讯息
[root@study ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10
18.4.2 logger 指令的应用
logger [-p 服务名称.等级] "讯息"
范例一:指定一下,让 dmtsai 使用 logger 来传送数据到登录文件内
[root@study ~]# logger -p user.info "I will check logger command"
[root@study ~]# journalctl SYSLOG_FACILITY=1 -n 3
18.4.3 保存 journal 的方式
systemd-journald.servicd 的讯息是不会放到下一次开机后的
systemd-journald.service 的配置文件主要参考 /etc/systemd/journald.conf
如果想要保存你的 journalctl 所读取的登录文件
# 1\. 先处理所需要的目录与相关权限设置
[root@study ~]# mkdir /var/log/journal
[root@study ~]# chown root:systemd-journal /var/log/journal
[root@study ~]# chmod 2775 /var/log/journal
# 2\. 重新启动 systemd-journald 并且观察备份的日志数据!
[root@study ~]# systemctl restart systemd-journald.service
[root@study ~]# ll /var/log/journal/
这样处理后,在 /run/log 下面就 没有相关的日志可以观察了!因为移动到 /var/log/journal 下面来
18.5 分析登录文件
18.5.1 CentOS 默认提供的 logwatch
CentOS 7.x 上面默认的 logwatch 这 个套件所提供的分析工具, 他会每天分析一次登录文件,并且将数据以 email 的格式寄送给 root
默认并没有安装 logwatch
18.5.2 鸟哥自己写的登录文件分析工具:
略