1.学会提问
- 1.我在做什么?
- 2.我要实现什么样的效果,而我的结果是什么?提供结果对比。
- 报错信息是什么?
- 日志怎么显示的?
2.如何解决问题
- 1.定位问题:通过查看日志。
- 解决问题
3.rsyslog
Linux的日志是用一个服务来管理的。
rsyslog:RHEL6开始就叫rsyslog。
syslog:RHEL5以前叫syslog。
这个日志管理服务是默认开机启动的。
4.rsyslog的配置文件
/etc/rsyslog.*
rsyslog的配置文件,其中包含rsyslog.conf以及rsyslog.d里的listen.conf。
rsyslog.conf文件解析:
MODULES:MODULES段里的配置决定各个模块的开启与关闭。
GLOBAL DIRECTIVES:rsyslog全局配置,一般保持默认,不用修改。
RULES:定义各种日志。
Linux系统中内置很多种事件(大概八九十种),每种事件都有以下级别。
级别有以下几种:
级别高低:emerg>aler>crit>err>warning>notice>info,debug只是调试使用。
RULES格式:
"事件.级别 file":意思是,事件的级别 >= 级别时,日志保存到file中。
例如:
这个配置的意思:
"*"表示所有事件,*.info:即所有事件中,级别大于等于info的都写入日志/var/log/messages里。
mail.none:表示关于邮件的事件,不写日志。同理authpriv.none和cron.none。
为什么要将mail,authpriv,cron的日志去除掉,因为我们要把他们单独放到日志文件中。如图:
意思是把authpriv、mail、cron相关的所有信息记录到对应的日志文件中。
-/var/log/maillog 中的"-"是异步的意思,即将内存中的内容写到硬盘中是一批一批写入的,效率比同步写入要高。
上图中:
*.emerg:表示所有达到emerg级别的事件发生时,会触发":omusrmsg:*",系统会想所有在线终端发送通告。
例如,我们模拟一个emerg事件:logger -p local5.emerg 'this is a test':模拟事件local5发生,级别是emerg,输出通告是"this is a test",这条通告会实时发送到每个终端。如图:
模拟一个日志输出:
1)我们在rsyslog.conf中,另起一行:
2)重启rsyslog日志管理服务:systemctl restart rsyslog
3)然后我们模拟local5事件发生,级别为debug。
logger -p local5.debug 'This is a log about local5.debug...'
4.看/var/log/xx.log中是否记录日志:
5.日志服务器
同时管理很多服务器的时候,不可能每台机器登录上去查看日志。
那么我们可以配置一台日志服务器,来收集每台被管理服务器的日志。
配置远程日志服务器:
1)在host67(被监控机器)修改/etc/rsyslog.conf中:
如果发生local6事件级别大于或等于debug,就将该日志发送给192.168.1.68服务器的rsyslog处理。
2)重启host67的rsyslog服务。 systemctl restart rsyslog
3)在host68(日志服务器)上修改/etc/rsyslog.conf配置:
打开UDP、TCP远程接收日志的模块。
定义local6事件级别大于等于debug,如何处理。
4)重启host68上的rsyslog服务。 systemctl restart rsyslog
5)在host67上模拟local6.info事件发生。
6)检查host68的/var/log/messages和/var/log/yy.log里是否已写入日志:
日志中的host67表示来自哪个主机(主机名),hanxinda表示日志产生时,登录的用户是哪个(su到其他用户的情况不算)。
根据主机名来设置日志存放地点:
如果节点服务器有很多,每一台都产生时间,并发送给日志服务器,那么服务器存放日志在同一个文件下就会很乱。我们可以根据主机名来分类的存放日志。
1)在日志服务器上配置/etc/host:
2)在日志服务器/etc/rsyslog.conf中配置:
3)这样,只要是来自host67的日志,都会先被写到host67.log日志文件中。同时该日志也会写到先前配置的yy.log中。因为/etc/rsyslog.conf配置文件的RULES是从上到下匹配的,只要匹配上,就会把日志写到指定的地方。
设置远程日志放在一些文件中,不影响本地日志:
在日志服务器/etc/rsyslog.conf配置:
"~"表示匹配到的日志,就此打住,后面的规则就不用匹配的。所以,来自host67的日志,在写入host67.log后,就不会与本地日志混合了。
6.如何查看日志
journalctl:查看所有事件日志。 journalctl -f:查看最近事件日志。 journalctl -p err:查看err级别以上的日志。 journalctl --since "2018-06-13 20:00:00":查看2018-06-13 晚8点以后的所有日志。 journalctl --since "2018-06-13 20:00:00" --until "2018-06-20 20:00:00" :查看2018-6-13 晚8点到2018-6-20晚8点之间的日志。
7.NTP服务
date :查看时间
date 122010002018 :设置时间为2018年12月20日10点00分。
kwclock -s :把时间修改为bios时间。
timedatectl命令:
timedatectl status # 查看时间详细信息。简写为timedatectl。 timedatectl list-timezones # 查看可用时区列表。 timedatectl set-timezone Africa/abidjan # 设置时区为Africa/abidjan。
如果不适用timedatectl,如何修改时区呢:
Linux系统时区文件都放在 /usr/share/zoneinfo 下,按 洲来存放。
例如 /usr/share/zoneinfo/Asia/Shanghai 。
我们要修改时区,只需要把该时区文件覆盖 /etc/localtime 就可以了。
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
但是用这种方法修改后,时间是正常的,但是用timedatectl查看时区,还是显示的错误的。
timedatectl set-time "2018-07-03 12:00:00" # 设置时间。同时会将系统时间和BIOS时间都设置了。 timedatectl set-time 12:00:00 # 设置时间为12点。
配置NTP服务:
1)关闭默认NTP服务
系统默认有一个NTP服务叫chronyd.service。
我们设置不启动它:
systemctl stop chronyd.service
systemctl disable chronyd.service
2)安装NTP服务:
mount /dev/cdrom /mnt rpm -ivh /mnt/Packages/ntp-4.2.6p5-19.el7_0.x86_64.rpm rpm -ivh /mnt/Packages/ntpdate-4.2.6p5-19.el7_0.x86_64.rpm
或者使用 yum install ntp -y 安装。
3)配置/etc/ntp.conf
允许192.168.1.0网段的机器向我进行同步。(不含noquery表示可以询问时间)
127.127.1.0不是一个网段,而是一个IP地址(回环地址,主板芯片上的地址),表示我这个服务器去哪里同步时间,可以写多个。
4)启动ntpd
systemctl start ntpd.service
systemctl enable ntpd.service
5)在另外一台机器上使用ntpdate 192.168.1.67进行同步。
设置向服务器自动同步时间:
1)安装system-config-date软件。
yum install system-config-date -y
2)配置:
在界面中配置NTP服务器地址。
运行 system-config-date &
可能出现界面上从网络同步时间的选项是灰色的(无法勾选)
这时:我们使用timedatectl查看时间详细信息,里面的
我们需要通过 timedatectl set-ntp true 来启用。
再次运行 system-config-date & :
我们修改NTP Servers框里的服务器地址:
3)使用 chronyc sources -v 查看是否同步成功。
看到左下角的"*"表示同步成功。
===