######系统日志管理######
1.什么是日志呢?
- 电脑的日志相当于我们流水帐一样的日常,日志里面记录的是电脑服务器的状态。
- 日志的存在可以使管理员提前知道服务器的各种状态,如果服务器出现什么问题可以提前处理。
- 公司的服务器很多,管理员无法一个一个查看服务器的状态,为了提高工作效率,我们可以把所有服务器的日志集中在一起管理, 放在一台主机上管理,将其他服务器的日志都传到这台管理日志的主机上,使得日志管理变得轻松。
注意:系统启动自动打开的shell会一直产生日志
2.实验环境实现
第一步:先在真机里面重置并开启两台虚拟机,并且用nm-connection-editor命令配置好网络
一台为Desktop主机,另外一台为server主机,将Desktop主机当作日志发送方,设置ip为172.25.254.170,将server主机当作日志接收方(管理日志),设置ip为172.25.254.90
######系统日志管理######
1.rsyslog ##此服务是用来采集系统日志的,它不生产日志,只是起到采集作用
2.rsyslog的管理
- /var/log/messages ##服务信息日志
- /var/log/secure ##系统登陆日志
- /var/log/cron ##定时任务日志
- /var/maillog ##邮件日志
- /var/log/boot.log ##系统启动日志
注意:以上这些路径是用来指定日志的采集路径
3.指定日志采集路径
要分清什么类型的日志。什么级别的日志
/var/log/file ##日志采集规则,可以进行设置
##日志类型分为:
- auth pam ##产生的日志
- authpriv ##ssh,ftp等登陆信息的验证信息
- cron ##时间任务相关
- kern ##内核
- lpr ##打印
- mail ##邮件
- mark ##(syslog)-rsyslog 服务内部的信息,时间标识
- news ##新闻组
- user ##用户程序产生的相关信息
- uucp ##unix to unix copy,unix主机之间相关的通讯
- local 1~7 ##自定义的日志设备
##日志级别分为:
- debug ##有调试信息的,日志信息最多
- info ##一般信息的日志,最常用的
- notice ##最具有重要性的普通条件的信息
- warning ##警告级别
- err ##错误级别,阻止某个功能或者模块不能正常工作的信息
- crit ##严重级别,阻止整个系统或者整个软件不能正常工作的信息
- alert ##需要立刻修改的信息
- emerg ##内核崩溃等严重信息
- none ##什么都不记录
注意: 1.从上到下,级别从低到高,记录的信息越来越少,详细的可以查看手册:man 3 syslog
4.日志的定向采集
- 将什么类型、什么级别的日志放在哪个路径下,这就叫日志的定向采集
- 这样做也有利于日志的管理和查看,因此应该设计采集规则
第一步:打开Desktop主机,打开设定日志采集规则的文件 vim /etc/rsyslog.conf
第二步:在日志采集文件里面设置将任意类型、任何级别的日志都存放在/var/log/westos下
如果westos文件不存在,会自动生成该文件 命令格式为*.* /var/log/westos
第三步:重启系统
(3)进行测试:
第一步:生成日志 systemctl restart sshd
第二步:查看日志 cat /var/log/westos
由此可见,将任意类型、任何级别的日志定向采集到了/var/log/westos之中
需要注意的是:实际在企业当中,我们要将日志分类管理,可以参考第三项系统日志管理里面的类型和级别,将 *.*改为日志类型.日志级别,然后存放在指定的文件当中即可。
5.日志的远程同步
一台服务器管理多台服务器日志的实验如下:
第一步:
在日志发送方设置:
(1)在发送方Desktop主机中先进入 vim /etc/rsyslog.conf
(2)在/etc/rsyslog.conf这个文件中55行写入*.* @172.25.254.90(接受方的ip),表示udp协议发送,如果是@@172.25.254.90,表示tcp协议发送
(3)退出以上文件后,在shell里面输入 systemctl restart rsyslog ,重启服务,如下:
第二步:
在日志接收方设置:
(1)在接收方server主机中先 进入vim /etc/rsyslog.conf
(2)将/etc/rsyslog.conf 这个文件中的15行和16行的注释去掉
15 $ModLoad imudp 表示日志接受模块
16 $UDPServerRun 514 表示开启接收模块
(3)重启系统:systemctl restart rsyslog
关闭防火墙:systemctl stop firewalld
设定火墙开机关闭:systemctl disable firewalld
第三步:测试
(1)在发送方和接收方清空日志文件
命令格式: > /var/log/messages
(2)在日志发送方 的shell当中输入 :
- logger test ###产生日志
- cat /var/log/messages ###查看日志已经生成
(3)在日志接受方查看远程主机发送过来的同步日志:
在server主机的shell当中输入: cat /var/log/messages
可见两台主机实现远程同步了,但是server主机接收的日志不止是刚刚新建的日志,而是还有很多 /etc/rc.d/rc.local文件产生的日志
(4) 因此应该在发送方主机中清空这个文件 ,命令格式为: > /etc/rc.d/rc.local
清空后记得再重启这台主机:
(5)在日志接收方:
重启系统:systemctl restart rsyslog
关闭防火墙:systemctl stop firewalld
设定火墙开机关闭systemctl disable firewalld
(6)在日志发送方和接收方都清空历史日志文件
> /var/log/messages ,重新建立日志,并且查看:
由此可见此时只有刚建的那个日志
(7)在日志接收方查看远程同步的日志
可见此时实现准确的远程同步了
注意:
- 这里只是一台发送方,一台接收方,实际企业中有很多服务器,管理的原理和方法和这个类似
- 也可以监控远程同步(日志的传送过程)的过程,命令为: watch -n 1 tail -f /var/log/messages
- 用该命令在接收方可以查看接口配置是否正确 netstat -antlupe | grep rsyslog
- 切忌更改一次之后,一定要重启服务,否则不生效
(8)用该命令netstat -antlupe | grep rsyslog在接收方可以查看接口配置是否正确
可见,服务端接口配置正确,为514.
######日志采集格式的设定#######
注意:此实验是在实现远程同步的基础上进行的
一般情况下我们采集到的日志格式如下
cat /var/log/messages 日志是默认的格式
如果我们知道了日志的生成时间、日志发送方的ip地址、日志的服务目标、日志的内容的话
这样在管理服务器的时候就方便多了
具体的格式设定操作步骤如下:
第一步:在接受日志方(server服务端)进行日志采集格式的设置
- 先 进入vim /etc/rsyslog.conf文件
- 然后在找到rules(规则下)设置日志采集规则
- 这里设置规则为$template WESTOS(此处名称随意写),“%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n”
解释一下,这里的各个部分表示:
- 显示日志的生成时间 %timegenerated%
- 显示发送方主机的ip %FROMHOST-IP%
- 日志记录目标 %syslogtag%
- 日志内容 %msg%
- 换行 \n
然后在下面写 入*.* /var/log/westos;WESTOS ####在指定的日志中采用WESTOS格式
- 设置好切记之后重启服务
第二步:在日志接收方查看日志格式
第三步:在日志发送方查看日志格式
可以看到日志发送方的日志格式依然是默认格式
第四步:在服务端接着设置发送方的日志格式
- 注意:以上就是将发送方和接收方的日志格式均设置成我们想要的格式的方法
- 29行:$ActionFileDefaultTempLate WESTOS#修改系统默认日志采集格式为WESTOS(注释掉原来的)
- 为了防止出错,我们直接复制一份即可(修改文件常用方法)
第五步:重启服务
第六步:在发送方查看日志格式
- 直接在服务端和客户端均 用cat /var/log/westos 查看日志
- 注意:所有的设置均在服务端进行,客户端用于查看
- 还有日志的远程同步先要做出来,才能设置这个
- 排错方法:先看格式有没有写对,然后检查拼写错误,然后检查是否重启服务,接着查看网络是否连接。
######时间同步服务######
- 如果日志发送方和接收方的时间不一致很麻烦,回影响解决问题的效率。
- 让时间保持一致,也就是服务端同步客户端,可以让客户端共享系统时间
- 服务端和客户端都是自己的时间 ,设置自身时间用timedatectl命令
(1)怎样在一个环境里面让所有主机的时间保持一致?
服务名称:chronyd
(2)具体步骤如下:
第一步:在服务端: 进入vim /etc/chrony.conf文件
- 22行: allow 172.25.254.90/24 允许那些客户端来同步本机时间
- 29行: local stratum 10 本机不同步任何主机的时间,本机作为时间源
- systemctl restart chronyd
第二步:在客户端:进入vim /etc/chrony.conf文件
找到server命令,先删除多余的,
添加server 172.25.254.90(服务端的ip) iburst(删除其他的) ##本机立即同步211主机的时间
systemctl restart chronyd ##重启服务
第三步:测试
在客户端输入:chronyc sources -v
出现* ip 就说明好了
可见同步成功
第四步:在客户端和服务端均输入 date看是否时间同步
说明:之所以相差几秒钟是因为输入date命令延迟了几秒
######设置系统时间######
采用 timedatectl 命令
说明:装了双系统以后,linux把bios时间改了,所以当退出linux系统之后,windows时间不对,可以进行设置
- timedatectl ##管理系统时间
- timedatectl status(可加可不加) ##显示当前时间信息
- timedatectl set-time ##设定当前时间
- timedatectl set-timezone ##设定当前时区
- timedatectl set-local-rtc 0或1 ##设定是否使用utc时间 vim /etc/adjtime
- timedatectl list-timezones ##查看支持的所有时区
(1)timedatectl 管理系统时间
- Local time ##本地时间
- Universal time ##国际时间
- RTC time ##硬件时间
- Timezone ##时区
(2)timedatectl status(可加可不加) 显示当前时间信息
(3)timedatectl set-time 设定当前时间
(4)timedatectl set-timezone “Asia/Shanghai" 更改当前时区为东8区
(5)timedatectl set-local-rtc 0|1 设定是否使用utc时间 vim /etc/adjtime
(6)timedatectl list-timezones 查看支持的所有时区
######新的日志采集方式journal#######
rsyslog采集日志,从磁盘读取,速度慢,reboot 重启系统之后系统之前的日志会被清除,
因此只要关机,再次开机就无法查看系统上一次关机之前的日志了。
journal 不采集日志,直接从内核存看日志 ,速度更快,reboot 重启系统之后系统之前的日志不会被清除
(1)journalctl 日志查看工具
- journalctl -n 3 ##查看最近3条日志
- journalctl -p err ##查看错误日志
- journalctl -o verbose ##查看日志的详细参数
- journalctl --since ##查看从什么时间开始的日志
- journalctl --until ##查看到什么时间为止的日志
journalctl -n 3 查看最近3条日志
journalctl -p err 查看错误日志
journalctl -o verbose 查看日志的详细参数
journalctl --since “2019-10-22 17:15:30” 查看从这个时间开始的日志
journalctl --until “2019-10-22 17:20:30” 查看到这个时间为止的日志
journalctl --since --until 查看一个时间段的日志
(2)在硬盘创建一个区域,专门存放journal采集的日志
只有这样才会让journalctl采集日志(之前只能查看日志)
- 如何使用systemd-journal保存系统日志
- 默认systemd-journal是不会保存系统日志到硬盘的
- 那么关机之后再次开机时只能看到本次开机之后的日志
- 关机之前的日志是无法看到的
- 此实验在一台虚拟机里面完成即可,随意选择,这里选择server
操作步骤如下:
(1)mkdir /var/log/journal
- 在硬盘下创建一个可以存储 journalctl命令采集的日志的文件
(2)chgrp systemd-journal /var/log/journal/
- 系统初始化程序控制这个日志,改这个文件的所有组为systemd-journal
- 这样系统就能识别这个文件了,把这个文件放入这个组,让组控制这个文件
(3)chmod g+s /var/log/journal/
- 改这个文件的权限,使这个文件的systemd-journal组都能查看这个日志
(4)ls -ld /var/log/journal/ 查看文件属性
(5)ps aux | grep journal 查看进程
(6)killall -1 /usr/lib/systemd/systemd-journald(进程重新加载配置,不会关闭进程)
(7)date 查看系统当前时间
(8)ls /var/log/journal/ ##查看机器码
(9)bootctl 重启
(10)journalctl(可以看到之前的日志了 就是可以采集上次关机之前的日志)
可以看到采用journalctl查看日志能看到当前系统时间之前的日志了
小结:
- date(查看系统当前时间)
- reboot(重启系统 相当于关机)
- journalctl(再次查看仍然能看到系统当前时间之前的日志)
- 因为采集的日志放到了硬盘里面
- 只有这样使用journalctl查看日志的时候,才会看到系统上一次关机之前的日志
- 只有硬盘的东西才可以永久保存,内存里面的东西都是开机之后才有的