1、journald查看日志
在系统中所有的操作都会被记录为日志,方便以后查看,日志是由运行的程序本身产生的记录的文字。systemd-journald是用来分析或查看日志的。默认日志存放路径是 /run/log
。journalctl命令的用法有:
(1)journalctl -n 3
查看日志的最新3条
(2)journalctl --since "2020-05-01 11:00:00"
查看2020年5月1号的11:00后的日志
(3)journalctl --until "2020-05-01 11:05:00"
查看2020年5月1号的11:05前的日志
(4)journalctl -o 查看模式
设定日志的显示方式,一般有四种,分别是short(经典模式),verbose(显示日志的全部字节),export(适合传出和备份的二进制格式),json(js格式显示输出)
(5)journalctl -p 级别
显示特定级别的日志,分为8级:
0表示emerg,系统的严重问题日志;1表示alert,系统中立即要更改的信息; 2表示crit,严重级别会导致系统软件不能正常工作;3表示err,程序报错;4表示warning,程序警告;5表示notice,重要信息的普通日志;6表示info,普通信息;7表示debug,程序排错信息。
(6)journalctl -F PRIORITY
查看可控日志级别有哪些
(7)journalctl -u sshd
查看指定的sshd服务
(8)journalctl --disk-usage
查看日志的大小
(9)journalctl --vacuum-size=1G
设定日志存放大小,最大为1G
(10)journalctl --vacuum-time=1w
日志在系统中最长存放时间为1周
(11)journalctl -f
监控日志
(12)journalctl _PID=10924
专门查看PID为10924的进程的日志
测试如下图,
测试的时候细心的同学会发现重启系统后,就无法查看之前的日志了,这是因为日志是在/run
里面的,/run下的文件关机开机后,文件会被清理。如果想永久保留日志的话,如图进行下面的步骤,首先我们查看原来日志的存放地点,查看属性如图,首先在/var/log
下创建目录journal,把他的权限和拥有组改成和/run/log
的一致,重启journald服务,这时重启系统,会发现日志还保留着,是因为存放在了/var/log/journal
硬盘里。
2、rsyslog日志存放
日志都是存放在一起吗?不是的,是分门别类的存储,管理存放的服务叫rsyslog.service,配置文件在/etc/rsyslog.conf
,日志的类型大致有以下几种:auth(用户认证),authpriv(服务认证),cron(时间任务),kern(内核类型),mail(邮件),news(系统更新信息),user (用户)。日志的级别分为八级,上面讲过。如图,打开配置文件查看,从38行开始就是存放的规则,格式是日志类型.日志级别
,以49行为例,这句话的意思是把服务认证的所有级别的信息存放在/var/log/secure
里。52行这里多了一个-
,它表示信息实时采集。
当然我们也可以自定义日志采集路径,如图把认证信息放在/var/log/westos
目录里。
3、日志的远程同步
想象我们在公司中,我们不可能去每个主机查看日志,所以想要把所有主机的日志都发送到一个接收端,在接收端查看日志,这时就需要日志的远程同步。测试前我们需要先设定虚拟机b为接收端,虚拟机a为发送端。测试如图,在接收端b打开配置文件,打开日志接受插件,开放端口514,配置完成后,重启rsyslog。
如图,在发送端a打开配置文件,设定所有的日志通过udp发送一份给172.25.254.99这个IP的主机,(@表示使用udp传输日志,@@表示使用tcp传输日志),设定完成后,同样重启rsyslog服务
为了效果明显,我们把两边的存放的以前的日志都清空了,左边是发送端a,右边是接收端b。发送端a使用logger hello linux!
命令表示显示hello linux!。可以看到,发送端a可以查看到日志,接收端b也可以查看到日志。
值得注意的是,接收端b这边日志显示的是发送端a的主机名,可是接收端b无法把主机名和ip对应上,所以如何可以更改日志采集的格式呢?通过打开配置文件,如下图看到默认的日志采集格式是RSYSLOG_TraditonalFileFormat。
现在对默认的格式进行修改,如下图,在接收端b写一个我们的模板格式,命名为WESTOS,显示日志生成时间,日志来源主机IP,生成日志的服务名称和日志内容,最后\n
表示换行。
这时再进行日志的远程同步测试,如下图,格式是我们想要的格式了。
4、timedatectl时间控制
可以通过timedatectl
对时间进行一系列的操作:
(1)timedatectl
查看时间
(2)timedatectl set-time "2020-02-13 10:41:55"
设定系统时间为2020年2月13号10点41分55秒
(3)timedatectl list-timezones
显示系统的所有时区
(4)timedatectl set-timezone "Asia/Shanghai"
设定系统时区为亚洲的上海
(5)timedatectl set-local-rtc 0/1
##设定系统时间计算方式,0表示使用UTC时间计算方式,1表示使用CST时间计算方式
实验如下图,timedatectl
查看时间,显示好几个时间,分别是当地时间CST,世界时间UTC,硬件时间RTC,还显示时区为上海,时间是否同步。
5、时间同步服务chronyd
测试完上面的命令,同学们会有疑问,时间改完了,怎么改回去呢?需要用到时间同步服务了。服务名称是chronyd.service,配置文件是/etc/chrony.conf
。假如上面测试名令把虚拟机b的时间更改了,那现在找一个虚拟机a作为对的时间共享给b。如下图,首先虚拟机a要允许其他主机同步自己的时间,这里设置的0.0.0.0/0表示任何主机都可以同步,然后开启时间同步服务器功能并设定级别为10。最后重启chronyd.service服务,为了实验效果,还要关闭火墙。
在虚拟机b端,打开配置文件,设置同步172.25.254.88的时间。
查看结果,时间恢复正常了。
也可以通过
chronyc sources -v
查看效果,如下图,表示同步了172.25.254.88的时间。