美文网首页
服务器日志 之 rsyslog和logrotate 概念介

服务器日志 之 rsyslog和logrotate 概念介

作者: ghbsunny | 来源:发表于2017-10-16 20:07 被阅读0次

    1 概述

    系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。

    学会查看并管理日志是运维管理人员必备技能。本文将对日志进行相关概念介绍,并介绍日志的软件logsyslog和日志存储管理软件logrotate进行介绍

    2 日志介绍

    .日志:

    历史事件:时间,地点,人物(程序),事件

    日志级别:事件的关键性程度,Loglevel

    .系统日志服务:

    .sysklogd:CentOS 5之前版本

    syslogd: system application记录应用日志

    klogd: linuxkernel记录内核日志

    .事件记录格式:

    日期时间  主机   进程[pid]:事件内容

    .C/S架构:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

    rsyslog

    .rsyslog特性:用于CentOS6和7

    .多线程

    .UDP, TCP, SSL, TLS, RELP

    .MySQL, PGSQL, Oracle实现日志存储

    .强大的过滤器,可实现过滤记录日志信息中任意部分

    .自定义输出格式

    .ELK介绍

    ELK:elasticsearch, logstash, kibana

    ELK是专业记录和管理日志,适合于大型的环境

    .非关系型分布式数据库

    .基于apache软件基金会jakarta项目组的项目lucene

    .Elasticsearch是个开源分布式搜索引擎

    .Logstash对日志进行收集、分析,并将其存储供以后使用

    .kibana可以提供的日志分析友好的Web界面

    .术语介绍

    术语解释可以查看man  logger,以下对主要的术语进行介绍

    .facility:设施,从功能或程序上对日志进行归类

    每个应用程序有自己的特点,所以不同程序,记录成不一样的格式

    软件都是rsyslog,不同软件接口都是一样的,通过对软件进行分类,已经定义不一样的日志level,记录成不一样的格式

    facility(程序)分类有如下几种

    auth, authpriv, cron,daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, local0-local7,syslog.

    local0-local7表示定制,开发者自定义的软件类别,自己归类。

    其中记录相关的日志需要加载相应的模块:rpm -ql rsyslog | grep .*\.so这个可以查看rsyslog这个软件安装产生的相关模块

    .Priority定义记录日志的优先级别,日志缓冲区的每一行文本开头具有级别标记,级别值越小则优先级越高.有8个级别

    默认是info级别,一般的重要事件,其中,记录日志对时间的要求很高,

    debug, info, notice, warn(warning),err(error), crit(critical), alert, emerg(panic)

    系统定义了8个消息级别,级别号从0到7分别为:

    0: emerg:致命级(KERN_EMESG)

    1: alert:警戒级(KERN_ALERT)

    2: crit:临界级(KERN_CRIT)

    3: err:错误级(KERN_ERR)

    4: warning:告警级(KERN_WARN)

    5: notice:注意级(KERN_NOTICE)

    6: info:通知级(KERN_INFO)

    7: debug:调试级(KERN_DEBUG)

    .参看帮助:man 3 syslog

    .程序包:rsyslog

    .主程序:/usr/sbin/rsyslogd

    .CentOS 6:service rsyslog {start|stop|restart|status}

    .CentOS 7:/usr/lib/systemd/system/rsyslog.service

    .配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf

    .库文件:/lib64/rsyslog/*.so

    .配置文件格式:由三部分组成

    MODULES:相关模块配置

    GLOBAL DIRECTIVES:全局配置

    RULES:日志记录相关的规则配置

    .RULES配置格式:

    facility.priority;facility.priority…target

    target:表示日志记录的文件

    facility.priority表示设备.等级,可以同时定义多个设施的不同等级到同一个文件里,用分号隔开。

    .facility:

    *:所有的facility

    facility1,facility2,facility3,...:指定的facility列表

    .priority:

    *:所有级别

    none:没有级别,即不记录

    PRIORITY:指定级别(含)以上的所有级别

    =PRIORITY:仅记录指定级别的日志信息

    .target:

    文件路径:通常在/var/log/,文件路径前的-表示异步写入

    异步写入表示写写入内存,后续在写入日志

    同步写入表示系统一发生变化就可写

    用户:将日志事件通知给指定的用户,*表示登录的所有用户

    日志服务器:@host,把日志送往至指定的远程服务器记录

    管道:|COMMAND,转发给其它命令处理

    3  主要日志介绍

    ./var/log/secure:系统安全相关的日志,文本格式,应周期性分析。

    包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。当有其他机器通过ssh访问时,会记录成功或者失败的相关日志。

    ./var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,专门用来记录失败登录的日志,二进制格式,

    lastb命令进行查,lastb这个命令是专门用来打开查看btmp这个文件的

    ./var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看

    last命令,专门用来查看成功登录的日志,last是打开wtmp这个文件的,其中,日志的systemboot是指开机时间。

    uptime也可以用来查看距离最近一次开机有多长时间。

    ./var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看,仅记录系统中所有用户的最近一次登录的时间

    ./var/log/dmesg:系统引导过程中的日志信息,存放本次计算机启动的日志,文本格式,文本查看工具查看即可,专用命令dmesg查看/var/log/dmesg的内容

    ./var/log/messages:系统中大部分的信息

    ./var/log/anaconda : anaconda的日志,安装操作系统时记录的日志,centos6上没有独立的目录,只有/var/log/anaconda.*的记录log,在centos7上将这些日志统一放在/var/log/anaconda这个目录下。

    4  Logrotate日志存储

    logrotate系统里的程序,可以实现日志的滚动,防止日志太大,导致系统性能太小。

    .logrotate程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron程序来执行,计划执行的任务写在/etc/cron.daily/logrotate这个文件里

    .配置文件是/etc/logrotate.conf

    .配置文件主要参数如下

    .compress通过gzip压缩转储以后的日志

    .nocompress不需要压缩时,用这个参数

    .copytruncate用于还在打开中的日志文件,把当前日志备份并截断,truncate保留表的结构,把数据清空

    .nocopytruncate备份日志文件但是不截断

    .create mode owner group转储文件,使用指定的文件模式创建新的日志文件

    .nocreate不建立新的日志文件

    .delaycompress和compress一起使用时,转储的日志文件到下一次转储时才压缩

    .nodelaycompress覆盖delaycompress选项,转储并压缩

    .errors address专储时的错误信息发送到指定的Email地址

    .ifempty即使是空文件也转储,是缺省选项。

    .notifempty如果是空文件的话,不转储

    .mail address把转储的日志文件发送到指定的E-mail地址

    .nomail转储时不发送日志文件

    .olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

    .noolddir转储后的日志文件和当前日志文件放在同一个目录下

    .prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

    .postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

    .daily指定转储周期为每天

    .weekly指定转储周期为每周

    .monthly指定转储周期为每月

    .size大小指定日志超过多大时,就执行日志转储

    .rotate count指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份,达到5份日志后,把旧的日志删掉,最多只会保留最近的5个日志

    .Missingok如果日志不存在,提示错误,是一个报警

    .Nomissingok如果日志不存在,继续下一次日志,不提示错误

    5  例子

    在配置文件/etc/rsyslog.conf文件写入如下的配置,相关介绍如下

    例一记录message日志

    以下配置*.info表示info级别以及比info级别高的程序的log都记录到/var/log/messages,none表示mail,authpriv,cron这三个软件的日志不记录到/var/log/messages里

    *.info;mail.none;authpriv.none;cron.none            /var/log/messages

    例二不同facility记录同一等级

    如果是多个设施的同一等级记录到同一日志文件里,那么多个设施间可以用逗号隔开,例子

    uucp,news.crit                        /var/log/spooler

    例三发送消息

    给所有的人都发送emerg日志消息,有两个写法,

    centos 7上

    *.emerg                        :omusrmsg:*

    其中omusrmsg是一个模块,表示emergency级别的日志都会给所有人发消息

    centos 6上

    *.emerg                          *

    这里的星号或者是omusrmsg这两个关键字,也可以用账号代替,只将特定的log发送给特定的人发送消息,如下例子,发送local2的日志是,给root和sunny两个人发log

    local2.*                      root,sunny

    例四 自定义日志

    记录特定软件的日志,可用设置local0--local7来记录,其中,local7默认用来记录计算机启动的日志例子

    local7.*                             /var/log/boot.log

    例五 定义软件facility

    软件要定义那种facility,这个是在软件的配置文件中定义,如ssh的配置文件/etc/ssh/sshd_config中,定义了把ssh归类到AUTHPRIV的facility里,如下

    #SyslogFacility AUTH

    SyslogFacility AUTHPRIV

    而在日志的配置文件/etc/rsyslog.conf中,把AUTHPRIV这中类型的facility定义记录的log是/var/log/secure,如下

    # The authpriv file has restricted access.

    authpriv.*                      /var/log/secure

    因此,有关ssh这个软件的log就会被记录到文件/var/log/secure里

    这里如果要修改ssh软件日志的记录的文件,可以自己定义,如在ssh的配置文件/etc/ssh/sshd_config中将该软件的facility定义为local2

    SyslogFacility  local2

    #LogLevel  INFO  #表示记录info级别以及以上的log

    然后在日志的配置文件/etc/rsyslog.conf,把定义local2这个facility的log为/var/log/sshd.log,这样就可以实现自己定义log文件了,例子

    local2.*       /var/log/sshd.log

    这里如果不在配置文件里定义软件的facility,可以在软件的配置文件里,自己调用log模块,并且自己定义long的格式和存放的路径,当然,这个是要相对成熟或者大型的软件,如http,在配置文件里调用了log_config_module这个模块,自己定义了log的记录格式。http的log滚动也是调用了lograte来实现,滚动的配置文件放在了/etc/logrotate.d/httpd里。

    例六测试

    测试log是否正常记录,可以用logger这个工具,man logger查看帮助,例子

    logger  -p local2.info  "This is a test  log"

    6  总结

    本文仅对日志的概念和管理软件rsyslog,日志存储软件logrorate进行介绍。日志也可以通过网络几种存储在一台log服务器上.关于如何部署,请查看作者的博客 服务器日志  之  一键部署log服务器。

    相关文章

      网友评论

          本文标题:服务器日志 之 rsyslog和logrotate 概念介

          本文链接:https://www.haomeiwen.com/subject/byuluxtx.html