Linux的日志服务---syslog&logrotate

 

一、概述

    在标准的Linux系统上,守护进程klogd从记录3缓冲区中获取内核的信息,再通过syslogd守护进程将它们保存在系统的日志文件中。klogd程序既可以从/proc/kmsg文件中,也可以通过syslog()系统调用来读取这些消息。默认情况下,它选择读取/proc方式实现。不管哪种方式,klogd都会阻塞,直到有新的内核消息可读。在被唤醒后,它会读取新的内核消息并进行处理。默认情况下,它就是把消息传给syslogd守护进程。syslogd守护进程把它接收到的所有消息添加到一个文件中,该文件默认是/var/log/message。也可以通过/etc/syslog.conf配置文件重新指定。

二、应用

    syslog在系统开发和维护中,为我们追踪问题提供了有效的帮助,对syslog进行分级分类更能帮助我们准确的定位问题。我们可以通过修改/etc/syslog.conf来对log分类。Linux通过定义Facility和Severity来分类。

Facility:有0-23种设备可选

0 kernel messages             系统内核消息
1 user-level messages       用户空间消息
2 mail system                     内部邮件服务器相关的消息
3 system daemons             系统守护进程消息
4 security/authorization messages (auth)            身份验证相关的消息
5 messages generated internally by syslogd     syslogd自己内部消息
6 line printer subsystem                                     
7 network news subsystem                              网络消息
8 UUCP subsystem
9 clock daemon
10 security/authorization messages (authpriv)
11 FTP daemon
12 NTP subsystem
13 log audit                            需要启动auditd服务
14 log alert
15 clock daemon
16-23     local0 - local7         用户自定义的消息通道

Severity:日志等级 

0 Emergency
1 Alert
2 Critical
3 Error
4 Warning
5 Notice
6 Informational
7 Debug

这些都定义在内核中:

#define LOGLEVEL_EMERG  0 /* system is unusable */
#define LOGLEVEL_ALERT  1 /* action must be taken immediately */
#define LOGLEVEL_CRIT  2 /* critical conditions */
#define LOGLEVEL_ERR  3 /* error conditions */
#define LOGLEVEL_WARNING 4 /* warning conditions */
#define LOGLEVEL_NOTICE  5 /* normal but significant condition */
#define LOGLEVEL_INFO  6 /* informational */
#define LOGLEVEL_DEBUG 7 /* debug-level messages */

我们知道了解Facility和Severity, 那么如何修改syslog.conf呢?

syslog.conf文件行的基本语法是这样的:

[消息的类型(Facility)].[日志的等级(Severity)]     [存放目标日志文件]。

如下语句加入syslog.conf,意思是将authpriv类型的所有等级日志消息存入 /var/log/secure中。
authpriv.*                                              /var/log/secure

当然syslog支持action将消息内容重定向到设备文件中。如下语句是将kernal类型info等级的消息重定向到/dev/logs.

kern.info action(type="ompipe" pipe="/dev/logs")

配置好了,记得使用service syslog restart 去重启服务,使配置生效。

三、logrotate--log管家

    syslog的使用就说到这里,但是大家一定发现了问题,对的,如果系统消息无止境的写入到log文件中,系统硬盘空间很快就会被耗尽。这时,我们引入了logrotate这个十分有用的工具,它可以自动对日志进行截断、压缩以及删除旧的日志文件。首先我们对logrotate进行配置,以上文的/var/log/secure为例。修改/etc/logrotate.conf如下:

var/log/secure
{
    maxsize 10240000         #日志文件到达最大限度10M时将截断
    compress                 #已截断的文件将使用gzip进行压缩
    maxage 365               #文件最长保存365天
    rotate 20                #一次性可以存储20个文件,第21个文件,时间最久的文件将被删除。        
    missingok                #在截断期间,任何错误将被忽略
    notifempty               #如果日志文件为空,将不会截断
    create 640 root root     #给创建的日志赋予指定的权限
    postrotate
         systemctl reload syslog.service > /dev/null            #所有的指令完成后,将执行脚本重启syslog服务
    endscript
}

 这样我们就完成了对日志文件的基本管理。

 

posted on 2018-05-24 22:18  Liquan2005  阅读(2076)  评论(0编辑  收藏  举报