一、实验环境(rhel7.0版本)
主机环境:rhel7.0
各主机信息
主机名 | IP |
---|---|
server | 172.25.254.1 |
client | 172.25.254.2 |
二、日志文件介绍
1、Linux 常见的日志文件文件名
日志文件可以帮助我们了解很多系统重要地事件,包括登录者的部分信息,因此日志文件地权限通常设置为仅有 root 能够读取而已。
(1)/varlog/boot.log
开机启动的时候系统内核会去检测与启动硬件,接下来开始启动各种内核支持的功能等。这些流程都会记录在 /var/log/boot.log 里面。不过这个文件只会存储本次开机启动的信息,之前的启动信息并不会被保留下来。
(2)/var/log/cron
你的 crontab 任务有没有实际被执行?执行过程有没有发生错误?你的 /etc/crontab 是否编写正确?在这个日志文件内查询看看。
(3)/var/log/dmesg
记录系统在开机的时候内核检测过程所产生的各项信息。由于 CentOS 默认将开机启动时内核的硬件检测过程取消显示,因此额外将数据记录一份在这个文件中。
(4)/var/log/lastlog
可以记录系统上面所有账号最近一次登录系统时的相关信息。lastlog 命令就是利用这个文件的记录信息来显示的。
(5)/var/log/maillog
记录邮件的往来信息,其实主要是记录 postfix (SMTP 协议提供者)与 dovecot(POP3 协议提供者)所产生的信息。SMTP 是发送邮件所使用的通讯协议,POP3 则是接收邮件使用的通讯协议。postfix 与 dovecot 则分别是两个完成通讯协议的软件,
(6)/var/log/messages
这个文件相当重要,几乎系统发生的错误信息(或是重要的信息)都会记录在这个文件中,如果系统发生莫名的错误时,这个文件是一定要查看的日志文件之一。
(7)/var/log/secure
基本上,只要牵涉到【需要输入账号密码】的软件,那么当登录时(不管登录正确或错误)都会被记录在此文件中。包括系统的 login 程序、图形用户界面模式登录所使用的 gdm、su、sudo 等程序,还有网络连接的 ssh、telnet 等程序,登录信息都会被记录在这里。
(8)/var/log/wtmp
这两个文件可以记录正确登录系统者的账户信息(wtmp),last 命令就是来读取 wtmp 显示的,这对于检查一般账号者的使用操作很有帮助。
(9)/var/log/httpd/*、/var/log/samba/*
不同的网络服务会使用自己的日志文件来记录它们自己产生的各项信息,上述的目录则是个别服务所产生的日志文件。
2、日志文件所需相关服务(daemon)与程序
- systemd-journald.service:最主要的信息记录者,由 systemd 提供
- rsyslog.service:主要收集登录系统与网络等服务的信息
- logrotate:主要在进行日志文件的轮循功能。
所谓的 logrotate 基本上就是将旧的日志文件更改名称,然后建立一个空的日志文件,如此一来,新的日志文件将重新开始记录,然后只要将旧的日志文件留下一阵子,就可以达到将日志文件【轮循】的目的。此外,如果旧的记录(大概要保存几个月)保存了一段时间没有问题,那么就可以让系统自动地将它删除,免得占用很对宝贵地硬盘空间。
3、Redhat 7.x 使用 systemd 提供的 journalctl 日志管理
基本上,系统由 systemd 所管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或是正常的信息,就会将该信息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个信息发送给 rsyslog.service 作进一步的记录。
4、日志文件内容的一般格式
系统产生的信息并记录下来的内容中,每条信息均会记录下面几个重要内容:
- 事件发生的日期与时间;
- 发生此事件的主机名;
- 启动此事件的服务名称(systemd、crond 等)或命令与函数名称(如 su、login...);
- 该信息的实际内容。
另外,不知道你会不会觉得很奇怪?为什么日志文件就是登录本机的数据,那怎么日志文件格式中,第二个字段项目是【主机名】?这是因为日志文件可以做成日志文件服务器,可以收集来自其他服务器的日志文件数据。所以,为了了解到该信息主要是来自于哪一台主机,当然得要有第二个字段项目说明该信息来自哪一台主机名。
三、rsyslog.service:记录日志文件的服务
1、rsyslog.service 的配置文件:/etc/rsyslog.conf
(1)/etc/rsyslog.conf 文件基本模块介绍
/etc/rsyslog.conf 这个文件规定了【(1)什么服务 (2)的什么等级信息 (3)需要被记录在哪里(设备或文件)】这三个东西。所以设置的语法会是这样:
服务名臣[.=!]信息等级 信息记录的文件名或设备或主机
# 下面以 mail 这个服务产生的 info 等级为例。
60 mail.* -/var/log/maillog
# 这一行说明:mail 服务产生的大于等于 info 等级的信息,都记录到 /var/log/maillog 文件中
我们将上面的数据简单的分为三部分来说明:
【1】、服务名称
可使用 man 3 syslog 查询到相关的信息
相对序号 | 服务类别 | 说明 |
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 Protocol,早期用于 UNIX 系统间的程序数据交换 |
9 | cron | 就是计划任务 cron、at 等产生信息记录的地方 |
10 | authpriv | 与 auth 类似,但记录较多账号的私人信息,包括 pam 模块的运行等 |
11 | ftp | 与 FTP 通讯协议有关的信息输出 |
16~23 | local0~local7 | 保留给本机用户使用的一些日志信息,较常与终端互动 |
举例来说,sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这些软件在设计日志文件记录时,都会主动调用 syslog 内的 mail 服务名称。所以上述三个软件(sendmail、postfix、dovecot)产生的信息在 syslog 看起来,就会是【mail】类型的服务了。
【2】、信息等级
可使用 man 3 syslog 查询到相关的信息
等级数值 | 等级名称 | 说明 |
8 | none | 什么都不记录 |
7 | debug | 用来 debug (除错)时产生的数据 |
6 | info | 仅是一些基本的信息说明而已 |
5 | notice | 虽然是正常信息,但比 indo 还需要被注意到的一些信息内容 |
4 | warning(warn) | 警示的信息,可能有问题,但是还不至于影响到某个 daemon 运行的信息。基本上,info、notice、warn 这三个信息等级都是在告知一些基本信息而已,应该还不至于造成一些系统运行困扰 |
3 | err(error) | 一些重大的错误信息,例如篇日志文件的某些设置值造成该服务无法启动的信息说明,通常借由 err 的错误告知,应该可以了解到该服务无法启动的问题 |
2 | crit | 比 erroe 还要严重的错误信息,这个 crit 是临界点(critical)的缩写,这个错误已经很严重了 |
1 | alert | 警告,已经很有问题的等级,比 crit 还要严重 |
0 | emerg(panic) | 疼痛等级,意指系统已经几乎要宕机的状态,很严重的错误等级。通常大概只有硬件出问题,导致整个内核无法顺利运行,就会出现这样的等级的信息。 |
特别留意一下在信息等级之前还有【.=!】的连接符号,它代表的意思是这样的:
- .:代表【比后面还要严重的等级(含该等级)都会被记录下来】的意思,例如:mail.info 代表只要是 mail 的信息,而且该信息等级严重于 info (含 info 本身)时,就会被记录下来的意思。
- .=:代表所需要的等级就是后面接的等级而已,其他的不要
- .!:代表不等于,亦即是除了该等级外的其他等级都记录
【3】、信息记录的文件名或设备或主机
下面是一些常见的放置处:
- 文件的绝对路径:通常就是放在 /var/log 里面的文件
- 打印机或其他:例如 /dev/lp0 这个打印机设备
- 用户名称:显示给用户
- 远程主机:例如 @student,当然,也要对方主机也能支持才行
- *::代表【目前在线的所有人】,类似 wall 这个命令的意义。
(2)例题
【1】、如果我要将我的 mail 相关的数据写入到 /var/log/maillog 当中,那么 /etc/rsyslog.conf 的语法如何设计?
mail.info /var/log/maillog
【2】、我要将新闻组数据(news)及计划任务(cron)的信息都写入到一个称为 /var/log/cronnews 的文件中,但是这两个程序的警告信息则额外地记录在 /var/log/cronnews.warn 中,那我该如何设置 rsyslog.conf
news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
【3】、我的 messages 这个文件需要记录所有的信息,但是就是不想要记录 cron、mail 及 news 的信息,那么应该怎么写才好?
可以有下面的两种写法:
*.*;cron,mail,news.none /var/log/messages
*.*;cron.none;mail.none;news.none /var/log/messages
使用【,】分隔时,那么等级只要接在最后一个即可,如果是以【;】来分的话,那么就需要将服务与等级都写上去。
(3)Redhat 7.x 默认的 rsyslog.conf 内容
[root@server ~]# vim /etc/rsyslog.conf
50 #kern.* /dev/console
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
57 authpriv.* /var/log/secure
60 mail.* -/var/log/maillog
64 cron.* /var/log/cron
67 *.emerg :omusrmsg:*
70 uucp,news.crit /var/log/spooler
73 local7.* /var/log/boot.log
- #kern.*:只要是内核产生的信息,全部都送到 console(终端)去。console 通常是由外部设备连接到系统而来。
- *.info;mail.none;authpriv.none;cron.none:由于 mail、authpriv、cron 等类别产生的信息较多,且已经写入到下面的数个文件中,因此在 /va/log/messages 里面就不记录这些项目,除此之外的其他信息都写入 /var/log/messages 中。
- authpriv.*:认证方面的信息均写入 /var/log/secure 文件。
- mail.*:邮件方面的信息则均写入 /var/log/maillog 文件。
- cron.*:计划任务均写入 /var/log/cron 文件。
- *.emerg:当产生最严重的错误等级时,将该等级的信息以 wall 的方式广播给所有系统登录的账号,要这么做的原因是希望在线的用户能够赶紧通知系统管理员来处理这么可怕的错误问题
- uucp,news.crit:uucp 是早期 UNIX-linke 系统进行数据传递的通讯协议,后来常用在新闻组,news 则是新闻组。当新闻组方面的信息有严重错误时就写入 /var/log/spoller 文件中。
- local7.*:将本机启动时应该吸纳是到屏幕的信息写入到 /var/log/boot.log 文件中。
上面第四行关于 mail 的记录中,在记录的文件 /var/log/maillog 前面有个减号【-】是干什么用的?由于邮件所产生的信息比较多,因此我们希望邮件产生的信息先存储在速度较快的内存缓冲区中(buffer),等到数据量足够打了才一次性地将所由数据都写入磁盘,这样有助于日志文件地读取性能。只不过有与信息是暂存在内存中,因此若不正常关机导致登录信息未回到日志文件中,可能会造成部分数据地丢失。
(4)自行增加日志文件文件功能
【1】、范例一:如果你想要让【所有的信息】都额外写入到 /var/log/admin.log 这个文件时,你该怎么做?
‘
1、先设置好所要添加的参数
[root@server ~]# vim /etc/rsyslog.conf #在文件的任意地方,加入下面这两行内容
75 # Add by root 2019/06/16 <==再次强调,自己修改的时候加入一些说明
76 *.* /var/log/admin.log
2、重新启动 rsyslog.service
[root@server ~]# systemctl restart rsyslog.service
[root@server ~]# ll -d /var/log/admin.log
-rw-r--r--. 1 root root 531 Jun 16 14:30 /var/log/admin.log
# 看吧,自动建立了这个日志文件
2、日志文件的安全性设置
有没有办法防止日志文件被删除?或是被 root 自己不小心修改?
基本上,我们可以通过一个隐藏的属性来设置你的日志文件,成为【只可以增加数据,但是不能被删除】的状态——使用 chattr 的a 这个属性,那么或许可以达到些许的保护。
不过,如果你的 root 账号被破解,那么下面的设置是无法保护的,因为你要记得【root 是可以在系统上面进行任何事情的】。
另外,要注意的是,当【你不小心“手动”修改过日志文件后,例如 /var/log/messages,当你不小心用 vim 打开它,离开却执行 :wq 的参数,那么该文件未来将不会再继续进行记录操作】,这个问题真的经常发生。由于你以 vim 存储了日志文件,则 rsyslog.service 会被误判为该文件已被修改过了,将导致 rsyslog.service 不再写入新内容到该文件。要想让该日志文件继续写入,你只要重启 rsyslog.service 即可。
[root@server ~]# chattr +a /var/log/admin.log
[root@server ~]# lsattr /var/log/admin.log
-----a---------- /var/log/admin.log
3、日志文件服务器的设置
Redhat 7.x 默认的 rsyslog.service 本身就已经具有这个日志文件服务器的功能了,只是默认并没有启动该功能而已。你可以通过 【man rsyslogd】去查询一下相关的选项就能够知道。
既然是日志文件服务器,那么我们的 Linux 主机当然会启动一个端口来监听,这个默认的端口就是 UDP 或 TCP 的514 端口。
(1)服务端(日志接收方)——172.25.254.1
1、编辑配置文件
[root@server ~]# vim /etc/rsyslog.conf
# 找到下面这几行
14 # Provides UDP syslog reception
15 #$ModLoad imudp
16 #$UDPServerRun 514
17
18 # Provides TCP syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
# 上面的是 UDP 端口,下面的是 TCP 端口。UDP:不可靠传输协议(无连接);TCP:可靠传输协议(有连接)
# 下面使用 UDP 端口,即取消 15 和 16 行的注释
15 $ModLoad imudp # 日志接受模块
16 $UDPServerRun 514 # 开启接受端口
2、重启服务
[root@server ~]# systemctl restart rsyslog.service
[root@server ~]# netstat -antulpe | grep 514
udp 0 0 0.0.0.0:514 0.0.0.0:* 0 82148 5314/rsyslogd
udp6 0 0 :::514 :::* 0 82149 5314/rsyslogd
3、关闭防火墙
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
(2)客户端(日志发送方)——172.25.254.2
1、编辑配置文件
[root@client ~]# vim /etc/rsyslog.conf #在文件的任意地方,加入下面这行内容
75 *.* @172.25.254.1
### *.* @@172.25.254.1 #若用 TCP 传输,设置要变成这样
2、重启服务
[root@client ~]# systemctl restart rsyslog.service
(3)测试
(1)在发送方和接受方都清空日志文件
[root@server ~]# > /var/log/messages
[root@client ~]# > /var/log/messages
(2)在日志发送方:
[root@client ~]# logger test
[root@client ~]# cat /var/log/messages # 查看日志是否生成
...(省略)...
Jun 16 15:22:31 client root: test
(3)在日志接受方查看
[root@server ~]# cat /var/log/messages | grep test
Jun 16 15:26:15 client root: test
4、日志采集格式的设定
(1)客户端(日志发送方)——172.25.254.2
1、编辑配置文件
[root@client ~]# vim /etc/rsyslog.conf #在文件的任意地方加入如下两行的内容
45 $template LOGFMT,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
77 *.* /var/log/xin;LOGFMT
2、重启服务
[root@client ~]# systemctl restart rsyslog.service
### 参数介绍 ###
LOGFMT <==相当于变量名
%timegenerated% <==显示日志时间
%FROMHOST-IP% <==显示主机IP
%syslogtag% <==日志记录目标
%msg%" <==日志内容
\n <==换行
(2)测试
(1)在发送方和接受方都清空日志文件
[root@server ~]# > /var/log/messages
[root@client ~]# > /var/log/messages
[root@client ~]# > /var/log/xin
(2)在日志发送方:
[root@client ~]# logger world
[root@client ~]# cat /var/log/messages | grep world
Jun 16 16:01:29 client root: world
[root@client ~]# cat /var/log/xin | grep world
Jun 16 16:01:29 127.0.0.1 root: world
(3)在日志接受方查看
[root@server ~]# cat /var/log/messages | grep world
Jun 16 16:01:29 client root: world
四、日志文件的轮循(logrotate)
rsyslog 使用 daemon 的方式来启动,当有需求的时候立刻就会被执行,但是 logrotate 却是在规定的时间到了之后才来进行日志文件的轮循,所以这个 logrotate 程序当然就是挂在 cron 下面进行的。
仔细看一下,/etc/cron.daily/ 里面的文件,嘿嘿,/etc/cron.daily/logrotate 就是记录了每天要进行的日志文件轮循的操作。
1、logrotate 的配置文件
既然 logrotate 主要是针对日志文件来进行轮循的操作,所以,它当然必须要记录【在什么状态下才经日志文件进行轮循】的设置。那么 logrotate 这个程序的参数配置文件在哪里?那就是:
- /etc/logrotate.conf
- /etc/logrotate.d/
其中 logrotate.conf 才是主要的参数文件,至于 logrotate.d 则是一个目录,该目录里面的所有文件都会被主动地读入 /etc/logrotate.conf 当中来使用。另外,在 /etc/logrotate.d/ 里面地文件中,如果没有规定到一些详细设置,则以 /etc/logrotate.conf 这个文件地规定来指定为默认值。
下面,我们来看一下默认的 logrotate 的内容吧!
[root@server ~]# vim /etc/logrotate.conf
# 下面的设置是"logrotate 的默认设置值",如果个别的文件设置了其他的参数,
# 则将以个别的文件设置为主,若该文件没有设置到的参数则以这个文件的内容为默认值。
3 weekly <==默认每个星期对日志文件进行一次轮循的任务
6 rotate 4 <==保留几个日志文件,默认是保留4个
9 create <==由于日志文件被更名,因此建立一个新的来继续存储之意
12 dateext <==就是这个设置值,可以让被轮循的文件名称加上日期
18 include /etc/logrotate.d <==将 /etc/logrotate.d 这个目录中的所有文件都读进来执行轮循的任务
21 /var/log/wtmp { <==仅针对/var/log/wtmp 所设置的参数
22 monthly <==每个月一次,替换每周
23 create 0664 root utmp <==指定新建文件的权限与所属账号/组
24 minsize 1M <==文件容量一定要超过 1M 后才进行轮循(略过时间参数)
25 rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已
26 }
现将 /etc/logrotate.conf 文件的语法总结如下:
日志文件的绝对路径与文件名...{
个别的参数设置值,如 monthly,compress 等
}
下面,我们再以 /etc/logrotate.d/syslog 这个轮循 rsyslog.service 服务的文件,来看看该如何设置它的轮循?
[root@server ~]# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
在上面的语法当中,我们知道正确的 logrotate 的写法为:
- 文件名:被处理的日志文件绝对路径文件名写在前面,可以使用空格符分隔多个日志文件;
- 参数:上述文件名进行轮循的参数使用 {} 包括起来;
- 执行脚本:可调用外部命令来进行额外的命令执行,这个设置值需与 sharedscripts...endscript 设置合用才行。至于可用的环境为:
- prerotate:在启动 logrotate 之前进行的命令,例如修改日志文件的属性等操作;
- postrotate:在做完 logrotate 之后启动的命令,例如重新启动(kill -HUP)某个服务;
- prerotate 与 postrotate:对于已机上特殊属性的文件处理上面,是相当重要的执行程序。
那么 /etc/logrotate.d/syslog 内设置的 5 个文件的轮循功能就变成了:
- 该设置只对 /var/log 内的cron、maillog、messages、secure、spoller 有效;
- 日志文件轮循每周一次,保留4个且轮循下来的日志文件不进行压缩(未给该默认值)
- 轮循完毕后(postrotate)取得 syslog 的PID 后,以 kill -HUP 重新启动 syslogd。
请特别留意,那么/bin/kill -HUP 的意义,这一行的目的在于将系统的 rsyslogd 重新以其参数文件(rsyslog.conf)的数据读入一次,也可以想成是 reload 的意思。由于我们建立了一个空的记录文件,如果不执行此行来重新启动服务的话,那么记录的时候将会发生错误。
假设我们针对 /var/log/message 这个文件增加 chattr +a 的属性时,依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 这个文件将被更名成为 /var/log/messages.1。但是由于加上这个 +a 的参数,所以更名是不可能成功的。那怎么办?就利用 prerotate 与 postrotate 来进行日志文件轮循前、后所需要做的操作。
[root@server ~]# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
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
/usr/bin/chattr -a /var/log/messages <==新增的内容
endscript
}
2、实际测试 logrotate 的操作
logrotate [-vf] logfile
选项与参数:
-v:启动显示模式,会显示 logrotate 运行的过程
-f:不论是否符合配置文件的数据,强制每个日志文件都进行轮循的操作
【1】、范例一:强制执行一次 logrotate 看看整个流程是什么
[root@server ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf <==读取主要配置文件
including /etc/logrotate.d <==调用外部的设置
reading config file chrony <==就是外部设置
...(中间省略)...
Handling 20 logs <==共有20个日志文件被记录
...(中间省略)...
rotating pattern: /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/cron <==开始处理 message
log does not need rotating <==因为时间未到,不需要修改
五、systemd-journald.service 简介
虽然 systemd-journald 所记录的数据在内存中,但是系统还是利用文件属性是将它记录到 /run/log 下面。不过 /run 在 Redhat 7.x 的系统上,其实是内存中的数据,所以重新启动后,这个 /run/log 下面的数据当然就被刷新,旧的就不存在了。
1、使用 journalctl 查看登录信息
journalctl [-nrpf] [--since TIME] [--util TIME] _optional
选项与参数:
默认会显示全部的 log 内容,从旧的输出到最新的信息
-n:显示最近的几行的意思,找最新的信息相当有用
-r:反向输出,从罪新娘的输出到最旧的信息
-p:显示后面所接的信息重要性排序。参看上面的 rsyslogd 的信息等级对应的表格
-f:类似 tail -f 的功能,持续显示 journal 日志的内容(即时监控时相当有帮助)
--since --util:设置开始与结束的时间,让在该期间内的数据输出而已
_SYSTEMD_UNIT=unit.service:只输出 unit.service 的信息而已
_COMM=bash:只输出与 bash 有关的信息
_PID=pid:只输出此 PID 号的信息
_UID=uid:只输出此 UID 号的信息
SYSLOG_FACILITY=[0-23]:使用 syslog.h 规范的服务对应的序号来调用出正确的数据。参看上面的 rsyslogd 的服务名称对应的表格
【1】、范例一:显示目ian系统中所有的 journal 日志数据
通过 less 一页页翻动给管理员查看,数据量相当大。
【2】、范例二:仅显示出 2019/06/16 整天以及(2)仅今天(3)仅昨天的日志数据内容
通过 less 一页页翻动给管理员查看,数据量相当大。
【3】、范例三:只找出 crond.service 的数据,同时只列出最新的 10 条即可
通过 less 一页页翻动给管理员查看,数据量相当大。
【4】、范例四:找出 su 、login 执行的日志文件,同时只列出最新的 10 条即可
【5】、范例五:找出信息严重等级为错误(error)的信息
通过 less 一页页翻动给管理员查看,数据量相当大。
【6】、范例六、找出与登录认证服务(auth、authprive)有关的日志文件信息
【7】、查看日志的详细参数
sshd服务重启之后,进程号发生改变
2、logger 命令的应用
logger [-p 服务名称.等级] "信息"
选项与参数:
服务名称.等级:参考上面 rsyslogd 的内容
【1】、范例一:指定一下,让 root 来使用 logger 来传送数据到日志文件中
3、保存 journal 的方式
再强调一次,这个 systemd-journald.service 的信息是不会放到下一次开机启动后的,所以,重新启动后,之前的记录会丢失。虽然我们大概都有启动 rsyslogd 这个服务来进行后续的日志文件放置,不过如果你比较喜欢 journalctl 的读写方式,那么可以将这些数据保存下来。
systemd-journald.service 的配置文件为:/etc/systemd/journald.conf。也可以通过 【man 5 journald.conf】 来查看。
第一步:mkdir /var/log/journal
第二步:chown root:systemd-journal /var/log/journal/
第三步:chmod 2775 /var/log/journal
第四步:重新加载该配置进程
killall -1 systemd-journald 或 systemctl restart systemd-journald.service
第五步:ls /var/log/journal,会发现生成了b398e018986f4c65894352dec2a79216目录(用于存放journal日志)
系统重启之后的日志,存放在/var/log/journal/b398e018986f4c65894352dec2a79216/目录中
六、分析日志文件
1、Redhat 默认提供的 logwatch
Redhat 7.x 上面默认的 logwatch 所提供的分析工具,它会每天分析一次日志文件,并且将数据以 email 的格式寄送给 root。
不过,在我们的安装方式里面,默认并没有安装 logwatch,所以,需要手动安装 logwatch。
[root@server ~]# yum install logwatch -y <==安装 logwatch
[root@server ~]# ll /etc/cron.daily/0logwatch
-rwxr-xr-x. 1 root root 434 Dec 29 2013 /etc/cron.daily/0logwatch
安装完毕后,logwatch 就已经写入到了 cron 的执行列表中。未来则每天会发送一封邮件给 root。因为我们刚刚安装,那可以来分析一下。很简单,直接执行 0logwatch 即可。
[root@server ~]# /etc/cron.daily/0logwatch
[root@server ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 logwatch@server.loca Mon Jun 17 16:00 138/5131 "Logwatch for server (L"
& 1
Message 1:
From root@server.localdomain Mon Jun 17 16:00:40 2019
Return-Path: <root@server.localdomain>
X-Original-To: root
Delivered-To: root@server.localdomain
To: root@server.localdomain
From: logwatch@server.localdomain
Subject: Logwatch for server (Linux)
Auto-Submitted: auto-generated
Precedence: bulk
Content-Type: text/plain; charset="iso-8859-1"
Date: Mon, 17 Jun 2019 16:00:39 +0800 (CST)
Status: R
# logwatch 会说明分析的时间与 logwatch 版本等信息
################### Logwatch 7.4.0 (03/01/11) ####################
Processing Initiated: Mon Jun 17 16:00:38 2019
Date Range Processed: yesterday
( 2019-Jun-16 )
Period is day.
Detail Level of Output: 0
Type of Output/Format: mail / text
Logfiles for Host: server
##################################################################
# 开始一项一项的进行数据分析。
--------------------- Cron Begin ------------------------
**Unmatched Entries**
INFO (RANDOM_DELAY will be scaled with factor 53% if used.)
INFO (RANDOM_DELAY will be scaled with factor 25% if used.)
---------------------- Cron End -------------------------
...(中间省略)...
# 当然也得说明一下目前系统的磁盘使用状况。
--------------------- Disk Space Begin ------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/vda3 8.4G 3.4G 5.0G 40% /
devtmpfs 489M 0 489M 0% /dev
/dev/vda1 197M 102M 95M 52% /boot
---------------------- Disk Space End -------------------------
七、时间同步服务(chronyd.service)
(1)服务端——172.25.254.1
1、编辑配置文件
[root@server ~]# vim /etc/chrony.conf
22 allow 172.25.254.0/24 允许哪些客户端来同步本机时间
29 local stratum 10 本机不同步任何主机的时间,本机作为时间源
2、重启服务
[root@server ~]# systemctl restart chronyd.service
(2)客户端——172.25.254.2
1、编辑配置文件
[root@client ~]# vim /etc/chrony.conf
3 server 0.rhel.pool.ntp.org iburst
4 server 1.rhel.pool.ntp.org iburst
5 server 2.rhel.pool.ntp.org iburst
6 server 3.rhel.pool.ntp.org iburst
# 删除 4、5、6行,并将第 3 行内容修改为如下的内容
3 server 172.25.254.1 iburst
2、重启服务
[root@client ~]# systemctl restart chronyd.service
(3)测试:
在客户端:chronyc sources -v
看到*,表示时间同步成功
七、timedatectl命令——永久修改
1、timedatectl 管理系统时间,显示当前时间信息
2、timedatectl list-timezones 查看支持的所有时区
3、timedatectl set-timezone 时区 设定当前时区
4、cat /etc/adjtime 用于查看UTC时间还是Local时间
5、timedatectl set-local-rtc 0|1 设定是否使用UTC时间
6、timedatectl set-time 时间 设定当前时间
7、timedatectl status 管理系统时间,显示当前时间信息(效果同1)