准备工作:
(1)打开两个虚拟机(desktop和server)并更改他们的ip(可用nm-connection-eidtor #图形设定ip)
(2)更改两个虚拟机的名称(hostnamectl set-hostname node1.example.com #将虚拟机的名字改为node1
(3)在真机中打开两个shell,用ssh命令分别连接两个虚拟机(注:ctrl+shift+t #再打开一个shell)
实验环境:
node1(desktop): 172.25.254.130
node2(sesrver): 172.25.254.230
1.日志的采集规则:
(1)日志类型
auth #用户登陆日志(pam生日志)
authpriv #服务认证日志(sshd认证)
kern #内核日志
cron #定时任务日志
lpr #打印机日志
mail #邮件日志
news #新闻
user #用户相关程序日志
local 1-7 #用户自定义日志
(2)日志级别
debug #系统调试信息
info #常规信息
warning #警告信息
err #报错(级别低,阻止了某个工作不能正常工作)
crit #报错(级别高,阻止了整个软件或整个系统不能正常工作)
alert #需要立即修改的信息
emerg #内核崩溃
none #不采集任何日志信息
(3)系统常用日志
/var/log/messages #所有日志级别的常规信息(不包含邮件,服务认证,定时任务)
/var/log/maillog #邮件认证
/var/log/secure #服务认证日志
/var/log/cron #定时任务日志
管理日志的配置文件:
vim /etc/rsyslog.conf #查看并修改采集日志文件配置,使我们能够采集日志到指定位置
#####################
*.* 文件名称(绝对路径) #日志类型.日志级别 日志存放的文件
systemctl start rsyslog.service #开始收集日志的服务
systemctl stop rsyslog.service #停止收集日志的服务
例如:
*.* /var/log/log.all #将所有级别所有类型的日志采集到/var/log/log.all里
auth.debug /var/log/westos #用户登陆的系统调试信息放到/var/log/westos里
auth.* /var/log/file #将用户登陆的所有级别的日志放到/var/log/file里
注意:日志可以直接看出系统中的错误,日志存在于内存中,修改rsyslog(配置文件)的意义在于将内存中的日志采集放到硬盘里
实验1.1(日志的基本操作)
##清空日志
[root@node2 ~]# > /var/log/messages
##查看日志; /etc/rc.d/rc.local日志可以忽略
[root@node2 ~]# cat /var/log/messages
Sep 18 09:28:25 localhost rc.local: /etc/rc.d/rc.local: connect: No route to host
Sep 18 09:28:25 localhost rc.local: /etc/rc.d/rc.local: line 18: /dev/tcp/content.example.com/80: No route to host
Sep 18 09:28:28 localhost rc.local: /etc/rc.d/rc.local: connect: No route to host
Sep 18 09:28:28 localhost rc.local: /etc/rc.d/rc.local: line 18: /dev/tcp/content.example.com/80: No route to host
##重启sshd服务
[root@node2 ~]# systemctl restart sshd.service
##再次查看日志;可查看到日志中记录了有关重启服务的一系列信息
[root@node2 ~]# cat /var/log/messages
Sep 18 09:29:10 localhost systemd: Stopping OpenSSH server daemon...
Sep 18 09:29:10 localhost systemd: Starting OpenSSH server daemon...
Sep 18 09:29:10 localhost systemd: Started OpenSSH server daemon.
##停止收集日志;发现此时即便重启的服务,日志也不会记录任何信息
[root@node2 ~]# systemctl stop rsyslog.service
[root@node2 ~]# > /var/log/messages
[root@node2 ~]# systemctl restart sshd.service
[root@node2 ~]# cat /var/log/messages #无日志
##开始收集日志的服务
[root@node2 ~]# systemctl start rsyslog.service
[root@node2 ~]# cat /var/log/messages #有日志
Sep 18 09:35:39 node2 systemd: Stopping OpenSSH server daemon...
Sep 18 09:35:39 node2 systemd: Starting OpenSSH server daemon...
Sep 18 09:35:40 node2 systemd: Started OpenSSH server daemon.
实验1.2(将日志采集到指定位置)
[root@node2 ~]# > /etc/rc.d/rc.local #清空虚拟机一直产生的日志和脚本(本地日志)
[root@node2 ~]# > /var/log/messages #清空日志
[root@node2 ~]# cat /var/log/messages #查看日志是否被清空(/etc/rc.d/rc.local日志可被忽略)
[root@node2 ~]# vim /etc/rsyslog.conf #更改rsyslog.conf配置文件
#################################
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
55 *.* /var/log/file
#将所有级别所有类型的日志采集到/var/log/file里
##更改配置文件后必须重启服务,否则不生效
[root@node2 ~]# systemctl restart rsyslog.service
[root@node2 ~]# cat /var/log/file
Sep 18 09:45:51 node2 rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="3111" x-info="http://www.rsyslog.com"] start
Sep 18 09:45:51 node2 rsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
Sep 18 09:45:51 node2 systemd: Starting System Logging Service...
Sep 18 09:45:51 node2 systemd: Started System Logging Service.
Sep 18 09:45:54 node2 rc.local: /etc/rc.d/rc.local: connect: No route to host
Sep 18 09:45:54 node2 rc.local: /etc/rc.d/rc.local: line 18: /dev/tcp/content.example.com/80: No route to host
测试:
[root@node1 ~]# ssh [email protected] #连接服务端
[email protected]'s password:
Last login: Tue Sep 18 09:51:22 2018 from 172.25.254.130
[root@node2 ~]# cat /var/log/file #查看日志内容(有node1(130)登陆的记录)
Sep 18 10:13:19 node2 sshd[4021]: Accepted password for root from 172.25.254.130 port 55361 ssh2
Sep 18 10:13:19 node2 systemd: Starting Session 13 of user root.
Sep 18 10:13:19 node2 systemd: Started Session 13 of user root.
Sep 18 10:13:19 node2 systemd-logind: New session 13 of user root.
Sep 18 10:13:19 node2 sshd[4021]: pam_unix(sshd:session): session opened for user root by (uid=0)
2.日志的远程同步
它的意义在于实现多台主机向一台主机传输日志,便于管理者高效的查看多台主机的日志。
在服务端(发送方):
root@node2 ~]# > /etc/rc.d/rc.local #清空虚拟机一直产生的日志和脚本(本地日志)
[root@node2 ~]# > /var/log/messages #清空日志
[root@node2 ~]# cat /var/log/messages
[root@node2 ~]# vim /etc/rsyslog.conf
###############
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
55 *.* @172.25.254.130 #日志接收方地址
[root@node2 ~]# systemctl restart rsyslog.service #重启服务
在客户端(接收方):
[root@node1 ~]# > /etc/rc.d/rc.local #清空虚拟机一直产生的日志和脚本(本地日志)
[root@node1 ~]# > /var/log/messages #清空日志
[root@node1 ~]# cat /var/log/messages
[root@node1 ~]# vim /etc/rsyslog.conf #设置接受方端口
###############
15 $ModLoad imudp #打开插件
16 $UDPServerRun 514 #打开插件接口(取消注释#即可)
[root@node1 ~]# systemctl restart rsyslog.service
[root@node1 ~]# systemctl stop firewalld #关闭接收方防火墙
[root@node1 ~]# systemctl disable fiewalld #开机时关闭防火墙
测试:
##重启服务端的sshd服务
[root@node2 ~]# systemctl restart sshd.service
##在客户端可查看到相关日志信息
[root@node1 ~]# cat /var/log/messages
Sep 19 05:34:47 node2 systemd: Stopping OpenSSH server daemon...
Sep 19 05:34:47 node2 systemd: Starting OpenSSH server daemon...
Sep 19 05:34:47 node2 systemd: Started OpenSSH server daemon.
3.定义日志采集格式
一般格式: $template 格式名称, "日志采集格式"
具体的日志采集格式参数含义:
%timegenerated% #日志生成时间
%FROMHOST-IP% #日志来源主机的IP
%systag% #日志生成程序
%msg% #日志内容
\n #换行
实验:
[root@node1 ~]# > /etc/rc.d/rc.local
[root@node1 ~]# > /var/log/messages
[root@node1 ~]# cat /var/log/messages
[root@node1 ~]# vim /etc/rsyslog.conf #编辑配置文件,定义采格式
###########################
47 $template westos, "%timegenerated% %FROMHOST-IP% %syslogtag% %msg% \n "
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages;westos #定义为westos格式
[root@node1 ~]# systemctl restart rsyslog.service
[root@node1 ~]# cat /var/log/messages
4. journalctl命令
格式: journalctl + 参数 #日志的查看
具体参数的含义:
-p err #查看报错日志
-f #监控 (用户ctrl+c结束监控)
-n 3 #最新(new)的三条日志
-o verbose #查看日志详细参数
journalctl _PID=84 #直接查看PID为84的程序产生的日志
--since 时间点 --until 时间点 #查看从何时到何时的日志
例如:journalctl --since 01:30 --until 01:40 #查看从1:30到1:40产生的日
(1)对systemd-journald管理
默认此程序只负责对日志进行查看而不能对日志进行保存和采集,那么关机后再开机,
只能查看到开机后的日志,因为系统之前的日志是保存在内存中的,所以关机后就被清空了,
那么在开机时用journalctl看不到的
[root@node2 ~]# journalctl -n 3
-- Logs begin at Wed 2018-09-19 08:41:07 EDT, end at Wed 2018-09-19 08:42:00 EDT. -
Sep 19 08:41:50 node2.example.com systemd-logind[500]: New session 1 of user root.
Sep 19 08:41:50 node2.example.com sshd[1581]: pam_unix(sshd:session): session opene
Sep 19 08:42:00 node2.example.com fprintd[1579]: ** Message: No devices in use, exi
[root@node2 ~]# date
Wed Sep 19 08:42:30 EDT 2018
[root@node2 ~]# reboot
Connection to 172.25.254.230 closed by remote host.
Connection to 172.25.254.230 closed.
[kiosk@foundation66 Desktop]$ ssh [email protected]
[email protected]'s password:
Last login: Wed Sep 19 08:41:50 2018 from 172.25.254.66
[root@node2 ~]# journalctl
-- Logs begin at Wed 2018-09-19 08:42:42 EDT, end at Wed 2018-09-19 08:42:59 EDT. -
Sep 19 08:42:42 localhost systemd-journal[83]: Runtime journal is using 5.9M (max 4
Sep 19 08:42:42 localhost systemd-journal[83]: Runtime journal is using 5.9M (max 4
Sep 19 08:42:42 localhost kernel: Initializing cgroup subsys cpuset
Sep 19 08:42:42 localhost kernel: Initializing cgroup subsys cpu
Sep 19 08:42:42 localhost kernel: Initializing cgroup subsys cpuacct
(2)如何让systemd-journald将日志保存到硬盘中
[root@node1 ~]# mkdir /var/log/journal #建立目录
[root@node1 ~]# groupadd systemd-journald #建立组
[root@node1 ~]# chgrp systemd-journald /var/log/journal #在该目录下的创建所有文件均属于systemd-journald组 ; chgrp表示更改文件的所有组
[root@node1 ~]# chmod g+s /var/log/journal #g+s针对目录,在目录中创建的文件都自动归属到目录所在组
[root@node1 ~]# killall -1 systemd-journald #-1表示重新加载配置
[root@node1 ~]# journalctl -n 3
-- Logs begin at Wed 2018-09-19 06:15:48 EDT, end at Wed 2018-09-19 06:20:15 EDT. -
Sep 19 06:20:15 node1.example.com systemd-journal[1639]: Journal started
Sep 19 06:20:14 node1.example.com systemd[1]: Starting Trigger Flushing of Journal
Sep 19 06:20:14 node1.example.com systemd[1]: Started Trigger Flushing of Journal t
[root@node1 ~]# date #查看时间
Wed Sep 19 06:20:24 EDT 2018
[root@node1 ~]# reboot #重启
Connection to 172.25.254.130 closed by remote host.
Connection to 172.25.254.130 closed.
[kiosk@foundation66 Desktop]$ ssh [email protected]
[email protected]'s password:
Last login: Wed Sep 19 06:16:12 2018 from 172.25.254.66
[root@node1 ~]# journalctl #查看日志(此时可查看到关机之前的所有日志)
5.时间同步
在服务端:
[root@node2 ~]# vim /etc/chrony.conf
###############
22 allow 172.25.254.0/24 #允许网络位相同的所有客户端来访问本机共享的时间
29 local stratum 10 #共享时间共享功能并设定共享级别,这个参数开启后本机不去同步别人的时间到本机
[root@node2 ~]# systemctl restart chronyd
[root@node2 ~]# systemctl stop firewalld #关闭防火墙
在客户端:
[root@node1 ~]# vim /etc/chrony.conf
#######################
3 server 172.25.254.230 iburst #服务端的ip
[root@node1 ~]# systemctl restart chronyd
[root@node1 ~]# systemctl stop firewalld #关闭防火墙
[root@node1 ~]# chronyc sources -v #检测是否同步成功
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| / xxxx = adjusted offset,
|| Log2(Polling interval) -. | yyyy = measured offset,
|| \ | zzzz = estimated error.
|| | |
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 172.25.254.230 10 6 17 5 +8599ns[ +26us] +/- 165us
##注意: ^* 代表成功 (如果是^?代表未同步成功,此时检查火墙的状态以及配置文件是否编写正确,确保无误后多刷新几次即可)
6.与timedatectl有关的命令
timedatectl #查看时间信息
timedatectl list-timezones #查看所有时区
timedatectl set-timezone Asia/Shanghai #设置为上海的时区
timedatectl set-local-rtc 0 #使用UTC时间
cat /etc/adjtime #在此文件中显示UTC
timedatectl set-local-rtc 1 #使用local(本地)时间
cat /etc/adjtime #在此文件中显示local
date #查看时间
timedatectl set-time "年-月-日 时:分:妙" #修改时间
例如 timedatectl set-time "2018-11-11 11:11:11"