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) 编辑 收藏 举报