Linux日志管理
1.日志是什么?
电脑的日志相当于我们平常写的日记,日志里面记录的是服务器的状态。
日志的存在可以使管理员提前知道服务器的各种状态,如果服务器出现什么问题可以提前处理。
那么问题来了,公司的服务器很多,难道管理员一个一个查看服务器的状态吗?实际上并不是这样的,为了提高工作效率,我们可以把所有服务器的日志集中在一起管理,放在一台主机上管理,将其他服务器的日志都传到这台管理日志的主机上,这样就方便多了。
注意:系统启动自动打开的shell会一直产生日志
2.搭建实验环境
一台为Desktop主机,另外一台为server主机
将Desktop主机当作日志发送方,将server主机当作日志接收方(管理日志)
Desktop主机的ip地址为172.25.254.111
server主机的ip地址为172.25.254.211
3.系统日志管理基本概念
(1)rsyslog:此服务是用来采集系统日志的,它自己不产生日志,只是起到采集日志的作用
(2)rsyslog的管理:
/var/log/messages | 服务信息日志 |
---|---|
/var/log/secure | 系统登陆日志 |
/var/log/cron | 定时任务日志 |
/var/log/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 自定义的日志设备
日志级别
info 一般信息的日志,最常用的
notice 最具有重要性的普通条件的信息
warning 警告级别
err 错误级别,阻止某个功能或者模块不能正常工作的信息
crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert 需要立刻修改的信息
emerg 内核崩溃等严重信息
none 什么都不记录
4.日志的定向采集
将什么类型、什么级别的日志放在哪个路径下,这就叫日志的定向采集
这样做也有利于日志的管理和查看,因此应该设计采集规则
(1)搭建实验环境:此实验在一台虚拟机上面做
步骤一:在真机里面开启虚拟机Desktop
步骤二:配置虚拟机的网络,这里就不再演示过程,ip为172.25.254.111
(2)操作:
步骤一:打开设定日志采集规则的文件 vim /etc/rsyslog.conf
步骤二:在日志采集文件里面设置将任意类型、任何级别的日志都存放在/var/log/westos下
如果westos文件不存在,会自动生成该文件 命令格式为*.* /var/log/westos
步骤三:重启系统
(3)测试:
步骤一:生成日志 systemctl restart sshd
步骤二:查看日志 cat /var/log/westos
由此可见,将任意类型、任何级别的日志定向采集到了/var/log/westos之中
(4)总结:实际在企业当中,我们要将日志分类管理,可以参考第三项系统日志管理里面的类型和级别,将 *.*改为日志类型.日志级别,然后存放在指定的文件当中即可。
5.日志的远程同步
一台服务器管理多台服务器日志的实验如下:
步骤一:
在日志发送方设置:
(1)在发送方Desktop主机中先 vim /etc/rsyslog.conf
(2)在/etc/rsyslog.conf这个文件中写入 . @172.25.254.211(接受方的ip)
(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
可见,服务端接口配置正确
6.日志采集格式的设定
注意:此实验是在实现远程同步的基础上进行的
一般情况下我们采集到的日志格式如下
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 查看日志
注意:所有的设置均在服务端进行,客户端用于查看
还有日志的远程同步先要做出来,才能设置这个