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服务器。
网友评论