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

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 概念介绍)