一、日志管理简介
Linux 常见的日志文件档名
/var/log/lastlog:可以记录系统上面所有的帐号最近一次登陆系统时的相关信息。
/var/log/maillog或/var/log/mail/*:记录邮件的往来信息,其实主要是记录sendmail(SMTP 协议提供者) 与dovecot (POP3 协议提供者) 所产生的信息。SMTP 是发信所使用的通讯协议,POP3 则是收信使用的通讯协议。sendmail与dovecot 则分别是两套达成通讯协议的软件。
/var/log/messages:这个文件相当的重要,几乎系统发生的错误信息(或者是重要的信息) 都会记录在这个文件中;如果系统发生莫名的错误时,这个文件是一定要查阅的登录文件之一。
/var/log/secure:只要牵涉到『需要输入帐号口令』的软件,那么当登陆时(不管登陆正确或错误) 都会被记录在此文件中。包括系统的login 程序、图形介面登陆所使用的gdm程序、su, sudo等程序、还有网络连线的ssh, telnet 等程序,登陆信息都会被记载在这里
/var/log/wtmp, /var/log/faillog:这两个文件可以记录正确登陆系统者的帐号信息(wtmp) 与错误登陆时所使用的帐号信息(faillog)
/var/log/httpd/*, /var/log/news/*, /var/log/samba/*:不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项信息!上述的目录内则是个别服务所制订的登录文件。
日志服务
分类
rsyslogd:系统日志,非内核系统产生的日志
例:/var/log/messages:系统标准错误日志存放位置
/var/log/maillog:邮件系统产生的日志
/var/log/secure:系统安全日志
klogd:专门负责记录内核产生的日志
/var/log/dmesg:内核日志记录位置
注:在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。
确定服务启动
[root@localhost ~]# ps aux | grep rsyslogd
#查看服务是否启动
chkconfig --list | grep rsyslogd
#查看服务是否自启动
日志文件内容的一般格式
一般来说,系统产生的信息经过rsyslog而记录下来的数据中,每条信息均会记录底下的几个重要数据:
1.事件发生的日期与时间;
2.发生此事件的主机名称;
3.启动此事件的服务名称(如samba, xinetd等) 或函式名称(如libpam..);
4.该信息的实际数据内容。
参见:/var/log/cron文档查看记录的计划任务
二、rsyslogd日志服务
/etc/rsyslog.conf配置文件
格式:
服务名称[连接符号]日志等级日志记录位置
例:
authpriv.* /var/log/secure
#认证相关服务.所有日志等级记录在/var/log/secure中
服务名称
连接符号
连接符号可以识别为:
•“*”代表所有日志等级,比如:“authpriv.*”代表authpriv认证信息服务产生的日志,所有的日志等级都记录
•“.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录
•“.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*.=emerg”代表人和日志服务产生的日志,只要等级是emerg等级就记录。这种用法及少见,了解就好
•“.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。
三、Linux日志管理
日志等级
日志记录位置
日志文件的绝对路径,如“/var/log/secure”
系统设备文件,如“/dev/lp0”
转发给远程主机,如“@@192.168.198.136:514”
其中一个@是用udp协议,两个@@是用tcp协议
例:
记录到普通文件或设备文件*.* /var/log/file.log # 绝对路径,写入配置文件后,重启服务*.* /dev/pts/0测试: logger ‘KadeForis testing the rsyslogand logger ‘
输出为在/var/log/file.log中和在pts/0的登录终端上转发到远程*.* @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口*.* @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514(默认)端口
注意:远程配置文件/ect/rsyslog.conf中的这两行的注释打开,重启服务
$ModLoadimtcp.so
$InputTCPServerRun514
例:
本地服务器配置
Crontab–e
*/1 * * * * echo “nihao”>>/tmp/file.log
在本地和远端查看/var/log/cron日志文件tail -f cron
如果要配置模板,则在对端使用
使用文本编辑器来打开/etc/rsyslog.conf,然后在GLOBAL DIRECTIVE块前追加以下的模板。$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" **.* ?RemoteLogs& ~
例:
发送给用户(需要在线才能收到)*.* root*.* root,kadefor,up01 # 使用,号分隔多个用户*.* * # *号表示所有在线用户执行脚本local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径
例:如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样在服务器端操作:
#方式一
:FROMHOST-IP, isequal, “192.168.0.160″ /var/log/newcron.log
#方式二
#根据ip区分日志目录
$template Remote,"/var/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
#屏蔽本机日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
例
我要将新闻群组数据(news) 及例行性计划任务(cron) 的信息都写入到一个称为/var/log/cronnews的文件中,但是这两个程序的警告信息则额外的记录在/var/log/cronnews.warn中,那该如何配置我的syslog.conf呢?
既然是两个程序,那么只好以分号来隔开了,此外,由于第二个指定文件中,我只要记录警告信息,因此配置上需要指定『.=』这个符号,所以语法成为了:
news.*;cron.*/var/log/cronnews
news.=warn;cron.=warn/var/log/cronnews.warn
上面那个『.=』就是在指定等级的意思,由于指定了等级,因此,只有这个等级的信息才会被记录在这个文件里面,此外必须要注意,news 与cron的警告信息也会写入/var/log/cronnews内。
例
我的messages 这个文件需要记录所有的信息,但是就是不想要记录cron, mail 及news 的信息,那么应该怎么写才好?
可以有两种写法,分别是:
*.*;news,cron,mail.none/var/log/messages
*.*;news.none;cron.none;mail.none/var/log/messages
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话,那么就需要将服务与等级都写上去。
四、日志轮替
logrotate的配置文件
logrotate主要是针对登录文件来进行轮替的动作,所以,他当然必须要记载『在什么状态下才将登录文件进行轮替』的配置,那么logrotate这个程序的参数配置文件在哪里呢?
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf才是主要的参数文件,logrotate.d是一个目录,该目录里面的所有文件都会被主动的读入/etc/logrotate.conf当中来进行!另外,在/etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部配置,则以/etc/logrotate.conf这个文件的规定来指定为默认值!
logrotate的主要功能就是将旧的日志文件移动成旧档,并且重新创建
日志文件的命名规则
如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20130605”。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
正确的logrotate的写法为:
文件名: 被处理的日志文件绝对路径文件名写在前面,可以使用空格符分隔多个日志文件;
参数: 上述文件名进行轮替的参数使用{ } 包括起来;
环境: 可调用外部命令来进行额外的命令执行,这个设置需与sharedscripts...endscripts设置起使用才行.可用的环境为:
prerotate: 再启动logrotate之前进行的命令,例如修改日志文件的属性等操作;
postrotate: 在做完logrotate之后启动的命令,例如重新启动(kill -HUP)某个服务;
prerotate与postrotate在对于已加上特殊属性的文件处理上面,是相当重要的执行程序.
说明:
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd进程将立即再次读取其配置并继续运行。
logrotate命令
[root@localhost ~]# logrotate [选项] 配置文件名
选项:
如果此命令没有选项,则会按照配置文件中的条件进行
日志轮替
-v:显示日志轮替过程。加了-v选项,会显示日志的轮
替的过程
-f:强制进行日志轮替。不管日志轮替的条件是否已经
符合,强制配置文件中所有的日志进行轮替
-d:选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。
日志轮替状态的查看
var/lib/logrotate.status
rotate state --version 2
"/var/log/yum.log" 2017-12-1
"/var/log/sssd/*.log" 2017-12-1
"/var/log/dracut.log" 2017-12-1
cron、rsyslog、logrotate之间的关系
rsyslog:负责将产生的日志分类,打到各个日志文件中
logrotate:负责切割日志
crontab:定时任务在/etc/下面有cron.hourlycron.dailycron.weeklycron.monthly等目录,在对应目录下的程序,会按其给定的时间执行一次,比如cron.daily下的程序会每天都执行一次。