• 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
    }
    

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

  • 相关阅读:
    金融大数据行业应用及发展全洞察
    金融大数据行业应用及发展全洞察
    R语言-组间差异的非参数检验
    R语言-组间差异的非参数检验
    互联网,将从内部颠覆企业管理模式
    GitHub使用教程
    sublime text3编辑器经常使用快捷方式
    webpy学习笔记之中的一个
    浏览器的重绘和重排的影响
    《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记
  • 原文地址:https://www.cnblogs.com/liquan2005/p/9085177.html
Copyright © 2020-2023  润新知