1.日志简介
1.1日志相关服务
在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。Redhat认为syslogd已经不能满足在工作中的需求,rsyslogd相比syslogd具有一些新的特点:
基于TCP网络协议传输日志信息;
更安全的网络传输方式;
有日志消息的及时分析框架;
后台数据库;
配置文件中可以写简单的逻辑判断;
与syslog配置文件相兼容。
1.2系统中常见的日志文件
日志文件 | 说 明 |
/var/log/cron | 记录了系统定时任务相关的日志。 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息。也可以使用dmesg命令直接查看内核自检信息。 |
/var/log/btmp | 记录错误登录的日志。这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看,命令如下: [root@localhost log]# lastb root tty1 Tue Jun 4 22:38 - 22:38 (00:00) #有人在6月4日22:38使用root用户,在本地终端1登录错误 |
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能直接vi,而要使用lastlog命令查看。 |
/var/log/mailog | 记录邮件信息。 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件。 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。比如说系统的登录,ssh的登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看。 |
除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志。
2.日志服务rsyslogd
2.1 日志文件格式
只要是由日志服务rsyslogd记录的日志文件,他们的格式是一样的。基本日志格式包含以下四列:
事件产生的时间;
发生事件的服务器的主机名;
产生事件的服务名或程序名;
事件的具体信息。
2.2 rsyslogd服务的配置文件
/etc/rsyslog.conf配置文件格式
authpriv.* /var/log/secure
#服务名称[连接符号]日志等级 日志记录位置
#认证相关服务.所有日志等级 记录在/var/log/secure日志中
日志记录位置:日志记录位置就是当前日志输出到哪个日志文件中保存,当然也可以把日志输出到打印机打印,或者输出到远程日志服务器上(当然日志服务器要允许接收才行)。日志的记录位置也是固定的,我们来学习下:
✨日志文件的绝对路径。这是最常见的日志保存方法,如“/var/log/secure”就是保存系统验证和授权信息日志的。
✨系统设备文件。如“/dev/lp0”代表第一台打印机,如果日志保存位置是打印机设备的话,当有日志时就会在打印机打印(不太符合可持续发展战略哦-_-!)。
✨转发给远程主机。因为可以选择使用TCP协议和UDP协议传输日志信息,所以有两种发 送格式。如使用“@192.168.0.210:514”,就会把日志内容使用UDP协议发送到192.168.0.210的UDP 514端口上;如果使用“@@192.168.0.210:514”就会把日志内容使用TCP协议发送到192.168.0.210的TCP 514端口上,其中514是日志服务默认端口。当然只要192.168.0.210同意接收此日志,就可以把日志内容保存在日志服务器上。
✨用户名。如“root”,就会把日志发送给root用户,当然root要在在线,否则就收不到日志信息了。发送日志给用户时,可以使用“*”代表发送给所有在线用户,如“mail.* *”就会把mail服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户,用户名之间用“,”分隔。
3.日志轮替
3.1日志文件的命名规则
日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。那么旧的日志文件改名之后,如何命名呢?主要依靠/etc/logrotate.conf配置文件中“dateext”参数:
如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20180605”。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
3.2logrotate配置文件
参 数 | 参 数 说 明 |
daily | 日志的轮替周期是每天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期是每月 |
rotate 数字 | 保留的日志文件的个数。0指没有备份 |
compress | 日志轮替时,旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组。如create 0600 root utmp |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。如mail shenc@lamp.net |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如size 100k |
dateext | 使用日期作为日志轮替文件的后缀。如secure-20180605 |
sharedscripts | 在此关键字之后的脚本只执行一次 |
prerotate/endscript | 在日志轮替之前执行脚本命令。endscript标示prerotate脚本结束。 |
postrotate/endscript | 在日志轮替之后执行脚本命令。endscript标示postrotate脚本结束 |
3.3 把自己的日志加入日志轮替
这里有两个方法:第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略,从而把日志加入轮替;第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。我们这里推荐第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
说起来很复杂,我们举个例子吧,还记得我们自己生产的/var/log/alert.log日志吗?这个日志不是系统默认日志,而是我们通过/etc/rsyslog.conf配置文件自己生成的日志,所以默认这个日志是不会轮替的。那么我们需要把这个日志加入日志轮替的策略,该怎么实现呢?我们采用第二种方法,也就是在/etc/logrotate.d/目录中建立此日志的轮替文
例如:我们如果需要把Nginx服务的日志加入日志轮替,则也需要重启Nginx服务
/date/logs/nginx/access/access.log /date/logs/nginx/access/default.log {
#假设Nginx的日志放在/date目录下
daily
rotate 15
sharedscripts
postrotate
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid) &>/dev/null
#重启rsyslog服务
/bin/kill -HUP $(/bin/cat /usr/local/nginx/logs/nginx.pid) &>/dev/null
#重启Nginx服务
endscript
3.4logrotate命令
我们日志轮替之所以可以在指定的时间备份日志,其实也要依赖系统定时任务。如果大家还记得/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件,logrotate通过这个文件依赖定时任务执行的。
不过logrotate命令的格式是什么样的呢?我们来学习下:
[root@localhost ~]# logrotate [选项] 配置文件名
选项:
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
-v: 显示日志轮替过程。加了-v选项,会显示日志的轮替的过程
-f: 强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有
的日志进行轮替