Linux Rsyslog系统日志管理


Rsyslog 系统日志管理
了解日志的级别及作用
掌握rsyslog服务的本地日志和远程日志的管理
能够使用logrotate程序依据需求对日志进行轮转 (避免 占用空间 和造成混乱)

一、常见的系统日志

日志格式:文本日志/二进制日志/数据库日志
默认的相关日志文件:
//tail -f 循环读取    #tail -f /var/log/boot.log  可以查看改变
/var/log/boot.log   系统引导日志,记录开机启动信息
/var/log/dmesg      核心的启动日志
/var/log/message    系统的日志文件
/var/log/maillog    邮件服务的日志                  
/var/log/xferlog    ftp服务的日志
/var/log/secure     网络连接及系统登录的安全信息
/var/log/cron       定时任务的日志
 last -f 查看. 这两个不能用cat 
/var/log/wtmp       记录所有的登入和登出   #last -f /var/log/wtmp
/var/log/btmp       记录失败的登入尝试     #last -f /var/log/btmp 

二、日志管理程序

在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。

rsyslog程序管理本地和远程日志
  安装软件
  根据需求修改配置文件
  启动服务
  测试验证
 

三、日志级别

# man syslog
日志信息分为以下级别,从上到下级别依次降低
none none不是一个等级,它表示不记录服务的所有信息

0   emerg   系统不可用
1   alert   特别留意的报警信息
2   crit    非常严重的状况
3   err     错误信息    
4   warning 警告信息
5   notice  稍微需要注意的信息
6   info    正常信息
7   debug   调试信息,开发人员使用

四、日志配置

[root@server ~]# rpm -q rsyslog
rsyslog-5.8.10-8.el6.x86_64
[root@server ~]# rpm -ql rsyslog
/etc/logrotate.d/syslog
/etc/rc.d/init.d/rsyslog        //启动脚本
/etc/rsyslog.conf       //主配置文件
/etc/rsyslog.d          //子配置文件

       
[root@server ~]# grep -v ^# /etc/rsyslog.conf   //排除#开头的,即不看注释的
........  ❤记录日志要有设备载体去承载
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
表示所有服务>=info级别产生的日志,除了mail,authpriv,cron等日志都记录在存储在/var/log/message中 

其实它是设备载体 mail,authprriv,none,cron。   除了xx的日志 在文档下面自己补充指定记录了
authpriv.*                                              /var/log/secure
记录所有跟验证有关日志
mail.*                                                  -/var/log/maillog
记录所有跟邮件有关的日志信息
cron.*                                                  /var/log/cron
记录跟任务计划相关的日志
*.emerg                                                 *
把所有级别为emerrg的信息发送给所有登录到系统上的用户
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
记录所有跟启动相关的日志信息
........

1.日志定义相关符号
配置文件中常见的表示符合

.   用来分隔服务和级别
*   任何服务,或者任何级别
=   有等号表示等于某一级别,没有等号表示大于或者等于某一级别
!   排除操作,前面有相同服务的表达式,这个操作才有意义
        代表从前面表达式所包含的内容中排除某些内容
;   用于分隔不同的 服务,级别,组合
,   用于分隔不同服务
-   用于指定目标文件时,代表异步写入  //不着急实时,等待一下再一起加

举例说明

mail.=info
mail.info       mail服务大于等于info级别的日志  0123456
mail.info;cron.=info    /var/log/test.log       邮件服务大于等于info级别,计划任务等于info级别,存储在test.log
mail,cron.err  表示邮件服务和计划任务的大于等于err级别
cron.=warning
mail,cron.info


cron.info;cron.!=err    
0123456     0124567  两个取交集,012456
cron.info;cron.!err     456
0123456     4567

❤特别说明:
man rsyslog.conf
The facility is one of the following keywords: auth,
authpriv, cron, daemon, kern, lpr, mail, mark, news,
security (same as auth), syslog, user, uucp and
local0 through local7.(设备载体)
log facility 设备 设施:用来记录一种类型日志的日志设备

载体设备有:
daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local0-7

五、本地日志管理SSH

需求1:将本地邮件服务的日志记录到/var/log/test_mail.log里

思路:
软件安装
修改配置文件
启动服务测试验证

环境:
log-server:10.1.1.2   mail服务

步骤:
1.修改配置文件
#cp /etc/rsyslog.conf  /etc/rsyslog.conf.bak
#vim /etc/rsyslog.conf 
....
注释掉 mail.*   是因为会浪费资源,只要记录自己想要的就OK。  如果不注释,再写一条。那么两个都会记录的。
写一条:mail.info       表示mail服务大于等于info级别的日志
mail.info	/var/log/test_mail.log

在这里插入图片描述
重启服务后,会自动创建

2.启动服务
#service rsyslog restart

3.测试验证
同时开两个窗口
1)发送一封邮件 
第一个窗口:#tail -f /var/log/test_mail.log

第二个窗口:
#echo hahah | mail -s "test mail log"  linux123        //邮给linux123 这个人,-s是指定主题
#cat /var/spool/mail/linux123 


❤需求2:把ssh的日志指定记录到/var/log/ssh下

思路:
1.更改ssh服务的默认日志记录载体(在ssh服务完成,修改ssh服务的配置文件)
2.通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)
3.测试验证

步骤:
 man sshd_config 查看支持的载体
1.修改ssh服务的默认的日志载体  (ssh服务是默认记录在 AUTHPRI载体上,这个载体还有记录其他服务)
(根据需求是要 把ssh的日志记录单独取出来,因此要单独一个载体来记录ssh服务)
#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
#vim /etc/ssh/sshd_config
SyslogFacility LOCAL6   //选择LOCAL6 作为ssh服务的设备载体 去 记录日志。 

2.重启sshd服务
#service sshd restart

3.将来自LOCAL6设备载体的日志记录到指定位置 (由rsyslog完成)
#cp /etc/rsyslog.conf  /etc/rsyslog.conf.bak
#vim /etc/rsyslog.conf
...
local6.*       /var/log/ssh          表示记录到这去
...
~~~~~~~~~
//如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志
*.info;mail.none;authpriv.none;cron.none;local6.none              /var/log/messages
~~~~~~~~~

4.重启rsyslog服务
#service rsyslog restart    重启服务

5.测试验证
服务端两个窗口
#tail -f /var/log/messages#tail -f /var/log/ssh 

客户端
#ssh 10.1.1.2

在这里插入图片描述 

六、远程日志管理 (清空了五的环境)

目的:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理
环境:
log-server:10.1.1.2
web应用服务器:10.1.1.3

ssh服务 ——》其他人远程访问该web应用服务器 ——》产生ssh服务日志 ——》远程记录到log-server上
client:10.1.1.4 —— 我用XSHELL
ssh 10.1.1.3 ——》日志记录10.1.1.2

需求:把web服务器上的ssh的服务日志,远程记录到log-server上
思路:
以下2步在web应用服务器上操作:
ssh默认是没有单独记录的
(ssh服务是默认记录在 AUTHPRI载体上,这个载体还有记录其他服务)
(根据需求是要 把ssh的日志记录单独取出来,因此要单独一个载体来记录ssh服务)

1.将web服务器上的ssh服务的日志单独记录,
 指定ssh服务的设备载体
 重启服务sshd
2.将来自于ssh服务的日志设备载体上的日志远程发送到log-server

以下操作在log-server上完成
1.修改配置文件打开日志传输的接收端口
 加载模块 tcp | udp
 打开接收端口 默认514端口
2.启动服务后日志默认会保存到/var/log/messages

步骤:
❤以下操作在log-server(10.1.1.2)服务完成:
1.加载相应的模块打开接收端口
#vim /etc/rsyslog.conf
# Provides UDP syslog reception     //加载UDP协议的模块,端口514
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception     //加载TCP协议的模块,端口514
$ModLoad imtcp
$InputTCPServerRun 514

2.重启rsyslog服务
#service rsyslog restart
#netstat -nltup|grep 514  //验证
_________________

以下操作在应用服务器(10.1.1.3)服务完成:
1.指定ssh服务的日志文件的设备载体
#vim /etc/ssh/sshd_config
...
SyslogFacility LOCAL0

2.重启ssh服务
#service sshd restart

3.修改/etc/rsyslog.conf文件来指定ssh服务的日志发送到远端去
#vim /etc/rsyslog.conf
...
local0.*     @10.1.1.2:514    //一个@代表UDP协议传输;两个@代表TCP协议传输

4.重启rsyslog服务
#service rsyslog restart

测试验证:
log服务器:#tail -f /var/log/messages
web服务器:#tail -f /var/log/messages
❤(不想让应用服务器记录就在应用服务器修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)
客户端:ssh 10.1.1.3

________________________

在上面配置的基础之上,再增加
❤远程日志单独保存   ( 不同服务器,各自保存不同,根据主机名 )
学完全部来补充,转到log服务器上 也能进行 转存的 
log 服务器:
#man 5 rsyslog.conf      查看模板怎么使用
/temp   找到$template DynFile,"/var/log/system-%HOSTNAME%.log"

#vim /etc/rsyslog.conf    增加模板,然后调用模板
$template DynFile,"/var/log/system-%HOSTNAME%.log"
local0.*      ?DynFile
解释:来自于local0设备上的日志 会调用DynFile模板,模板会放到/var/log/system-主机名.log  
这样就实现了单独保存,

验证:
log 服务器
#cd /var/log     先确保没有主机名的日志
#service rsyslog restart    //client ssh连接
#ll
#tail -f system-ssh-server.log

复习:修改配置文件,指定保存到哪,得放在一个地方,这个地方称为 日志的设备载体,设备载体 有定义的那么几个载体, 一般情况,有一些比较常见的服务。 邮件服务 对应设备载体是 mail,计划任务 对应的设备载体cron
用rsyslog管理日志,就得有设备载体,无非就两个步骤
1.更改ssh服务的默认日志记录载体(在ssh服务完成,修改ssh服务的配置文件)
2.通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)

载体设备有以下等等:
daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local0-7

 
 

七、日志轮转

日志轮训(轮转):日志轮转,切割,备份,归档
  为什么要日志轮转?
  避免日志过大占满/var/log的文件系统
  方便日志查看
  将丢弃系统中最旧的日志文件,以节省空间
  日志轮转的程序是logrotate
  logrotate本身不是系统守护进程,它是通过计划cron每天执行
在这里插入图片描述
如何进行日志轮转?
  了解相关配置文件

#rpm -q logrotate
#rpm -ql logrotate
/etc/cron.daily/logrotate       周期性计划任务
/etc/logrotate.conf             配置文件
/etc/logrotate.d                子配置文件存放路径



★/etc/logrotate.conf             配置文件
#cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs    保留4周备份日志
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file      日期作为后缀给旧文件重命名
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d    加载外部目录

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp       
    minsize 1M
    rotate 1    保留1份日志文件,每一个月备份一次日志文件
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

常见的一些参数:
daily       指定转储周期为每天
monthly     指定转储周期为每月
weekly      每周轮转一次
rotate 4    同一个文件最多轮转4次,4次之后就删除该文件
create 0664 root uttmp  轮转之后创建新文件,权限是0664,属于root用户和utmp组
dateext     用日期来做轮转之后的文件的后缀名
compress    用gzip对轮转后的日志进行压缩
minsize 30K 文件必须大于30k,且周期到了,才会轮转
size 30K    文件大于30k才会轮转,不论周期是否已到
missingok   如果日志文件不存在,不报错
notifempty  如果日志文件是空的,不轮转
delaycompress   下一次轮转的时候才压缩
sharedscripts   不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
prerotate       如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码
postrotate      轮转完成后执行postrotate和e


★/etc/logrotate.d
[root@server~]# cat /etc/logrotate.d/syslog 
这个子配置文件,没有指定的参数都会以默认方式轮转
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts   不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
    postrotate      转换完后执行postrotate和endscirpt之间的shell代码
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    轮转后对rsyslog的pid进行刷新(但pid其实不变)      || 或关系
    endscript
}

需求1:ssh服务的日志单独保存到了/var/log/ssh里,如任何进行轮转?

要求:
1.每天进行轮转,保留5天的日志文件
2.日志文件大小大于5M进行轮转

思路:
1.修改logrotate程序的主配置文件 增加/var/log/ssh文件的轮转
或者
2.在/etc/logrotate.d/目录创建一个文件

步骤:
方法1:修改主配置文件  (上部分配置日志,下部分配置轮转)
#vim /etc/ssh/sshd_config        
...
SyslogFacility LOCAL6
...

#vim /etc/rsyslog.conf
...
local6.*		/var/log/ssh


下部分:
#vim /etc/logrotate.conf
...
/var/log/ssh {
    missingok  //报错也不警告
    daily
    rotate 5
    size 5M
    create
}

#cd /var/log
#find ./ -type f -delete  
#service rsyslog restart    //重启服务是想生成日志文件,轮转日志是没服务的
#logrotate -f /etc/logrotate.conf     //强制轮转
方法2:创建子配置文件   (上部分跟方法1一样,下部分)
要清空之前的配置过的文件
vim /etc/logrotate.conf 清空配置过的

#cd /etc/logrotate.d
#vim ssh
...
/var/log/ssh {
    missingok  //报错也不警告
    daily
    rotate 5
    size 5M
    create
    nodateext  //不以日期作为后缀,因为全局是以日期作为后缀
}

#cd /var/log
#find ./ -type f -delete  
#service rsyslog restart    //重启服务是想生成日志文件,轮转日志是没服务的
#logrotate -f /etc/logrotate.conf     //强制轮转
只有ssh设置了不以日期作为后缀, 可以看到 ssh.1

·  作业

作业1:将authpriv设备日志记录到/var/log/auth.log

#vim /etc/rsyslog.conf
...
authpriv.*		/var/log/auth.log
...

作业2:改变应用程序sshd的日志设备为local5,并定义local5设备日志记录到/var/log/local5.local

#vim /etc/ssh/sshd_config
SyslogFacility LOCAL5
#vim /etc/rsyslog.conf
local5.*		/var/log/local5.local
#service rsyslog restart

作业3:
要求如下:

1.记录所有日志类型的info级别以及大于info级别的信息,保存到/var/log/test,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外
#vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/test

2./var/log/test日志轮询方式为: ·指定新日志记录,默认是不会轮转的,设置轮转(1.2方法)
1>每天轮询一次
2>保留4个文件
3>以时间命名(默认)
4>创建与原日志同名的新文件
/var/log/test {
daily
rotate 4
create   //新建的没有加时间后缀
}
方法1:vim /etc/logrotate.conf
或
方法2:vim /etc/logrotate.d/test

补充: /etc/logrotate.conf 对应的 /var/log/message 要删掉 或者 补 missingok 。 因为轮转时 已经不存在,不然会报错

在这里插入图片描述
-HUP 是平滑重启的意思
为什么要这么去做?
在Linux系统中,系统并不是按照文件名寻找,而是按照 inode号寻找文件的
重启服务创建新文件,inode会变

·  小实验:(结论)

准备环境:
不以时间作为后缀去轮转
#vim /etc/logrotate.conf
在这里插入图片描述
#cd /var/log/
#find ./ -type f -exec rm -f {} ;
#rm -f /etc/logrotate.d/ssh
#serrvice rsyslog restart
#tail -f /var/log/messages

#logger -t “哈哈” “你好”
#vim /etc/logrotate.d/syslog 刷新之前再写一个,ta 就会写到旧文件里
在这里插入图片描述
#logrotate -f /etc/logrotate.conf //指定文件轮转 ,PID会改变
在这里插入图片描述
轮转之后会发现,会增加messages新文件。 message.1就是刚刚的message
呵呵,再见会在 老文件 message.1
 

结论1: 先写日志再刷新PID;刷新之前写的日志文件是老的日志文件。

结论2:先刷新PID再写日志;日志就会写到新的日志文件里。
在这里插入图片描述
之前的message.1就会变成message.2

发布了24 篇原创文章 · 获赞 5 · 访问量 672

猜你喜欢

转载自blog.csdn.net/qq_39578545/article/details/105030690