1 概述


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

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



2 日志介绍


.日志:

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

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

.系统日志服务:

.sysklogd:CentOS 5之前版本

syslogd: system application 记录应用日志

klogd: linuxkernel 记录内核日志

.事件记录格式:

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

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

rsyslog

.rsyslog特性:用于CentOS67

.多线程

.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个消息级别, 级别号从07分别为:

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 6service 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/messagesnone表示mailauthprivcron这三个软件的日志不记录到  /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的日志是,给rootsunny两个人发log

local2.*                      root,sunny

例四 自定义日志

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

local7.*                             /var/log/boot.log

例五 定义软件facility

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

#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这个facilitylog/var/log/sshd.log,这样就可以实现自己定义log文件了,例子

local2.*       /var/log/sshd.log

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

例六 测试

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

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


6  总结


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