1.Rsyslog介绍
Rsyslog is Rocket-fast System for Log processing.Rsyslog是CentOS6系列默认的日志处理软件。Rsyslog基于模块化设计,提供高性能,安全的日志处理系统。Rsyslog是多线程的,支持TCP,UDP,TLS,RELP.Rsyslog实际上syslog的一个增强版本。
2.安装Rsyslog
CentOS下默认已经安装了rsyslog
查看rsyslog运行状态
$service rsyslog status
rsyslogd (pid 7542) is running...
$ ps -ef|grep rsyslog|grep -v grep
root 1014 1 0 2014 ? 00:15:09 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
这里-c 5 是在/etc/sysconfig/rsyslog中定义的
$ cat /etc/sysconfig/rsyslog # Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2" # See rsyslogd(8) for more details SYSLOGD_OPTIONS="-c 5"
3.配置rsyslog
rsyslog的配置文件/etc/rsyslog.conf
# rsyslog v5 configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) #$ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 #### GLOBAL DIRECTIVES #### # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf #### RULES #### # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log # ### begin forwarding rule ### # The statement between the begin ... end define a SINGLE forwarding # rule. They belong together, do NOT split them. If you create multiple # forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #$WorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*.* @@remote-host:514 # ### end of the forwarding rule ###
$ cat /etc/rsyslog.conf|grep -v -E "^#|^$" $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg * uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
配置格式如下:
日志类型.日志级别 日志处理方式
日志类型 | 说明 |
auth | pam模块产生的日志 |
authpriv | ssh,sftp等的登录验证信息 |
cron |
定时任务相关日志 |
kernel |
内核相关日志 |
lpr |
打印日志 |
mail |
邮件相关日志 |
news |
新闻组 |
user |
用户程序产生的日志 |
local 1-7 |
自定义的日志设备 |
日志级别 | 说明 |
级别值 |
debug |
调试信息 | 7 |
info | 一般信息 | |
notice | 普通信息 |
|
warning | 警告信息 | 4 |
err | 错误信息 | |
crit |
严重信息 |
|
alert | 告警信息 | |
emerg |
紧急信息 | |
none |
连接符合 | 说明 |
.xxx |
表示大于或等于xxx级别的信息 |
.=xxx |
表示等于xxx级别的信息 |
.!xxx |
除了xxx级别的信息 |
日志处理方式
# 记录到普通文件或设备文件 *.* /var/log/file.log # 绝对路径 *.* /dev/pts/0 # 测试: # logger 命令用于产生日志 logger -p local3.info 'KadeFor is testing the rsyslog and logger' # 转发到远程 *.* @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口 *.* @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514(默认)端口 # 发送给用户(需要在线才能收到) *.* root *.* root,kadefor,up01 # 使用,号分隔多个用户 *.* * # *号表示所有在线用户 # 忽略,丢弃 local3.* ~ # 忽略所有local3类型的所有级别的日志 # 执行脚本 local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径 # 日志内容可以作为脚本的第一个参数. # 可用来触发报警
日志的记录有先后顺序
# Save boot messages also to boot.log local7.* /var/log/boot.log local3.* /var/log/local3.log
添加一行,然后执行service rsyslogd restart
然后执行
$ logger -p local3.info 'KadeFor is testing the rsyslog and logger'
在查看日志
$ sudo tail -f /var/log/local3.log
Feb 25 16:28:06 xxxx xxx: KadeFor is testing the rsyslog and logger
# 过滤日志, 由:号开头 :msg, contains, "error" /var/log/error.log :msg, contains, "error" ~ # 忽略包含error的日志 :msg, contains, "user nagios" ~ :msg, contains, "user kadefor" ~ :msg, contains, "module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write" ~ local3.* ~ # PS. & ~ # 忽略所有的日志
$template myFormat,"%rawmsg%n" $ActionFileDefaultTemplate myFormat #如果不要$ActionFileDefaultTemplate myFormat这一行, 就需要像这样来使用模板: #在日志文件后添加模板名, 并用;号分隔 $template myFormat,"%rawmsg%n" # The authpriv file has restricted access. authpriv.* /var/log/secure;myFormat # Log all the mail messages in one place. mail.* /var/log/maillog;myFormat # Log cron stuff cron.* /var/log/cron;myFormat # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler;myFormat # Save boot messages also to boot.log local7.* /var/log/boot.log;myFormat
# 只要在rsyslog.conf中加入 *.* @192.168.0.10 *.* @192.168.0.10:10514 # 带端口号 *.* @@192.168.0.10 # TCP 使用一个@表示UDP,两个@@表示TCP
配置远程发送接收syslog日志
案例1:
客户端:
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional *.* @@10.10.41.17:514 # ### end of the forwarding rule ###
这里设置将所有的日志都通过TCP方式发送到远程的rsyslog服务器
然后执行
service rsyslog restart
服务端:
# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514
然后执行
service rsyslog restart
现在客户端的rsyslog日志就可以直接发送一份到服务端
案例2:
客户端:
:rawmsg,contains,"sdns_log" @@10.10.41.17 :rawmsg,contains,"sdns_log" ~
前面讲过rsyslog的日志记录是有先后顺序的,这里将包含sdns_log的日志先发送到服务端,然后本地丢弃
重新启动rsyslog
服务端:
# Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 $template logformat,"%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%n" $template DynFile,"/var/log/tlog%$year%%$month%%$day%.log" :rawmsg,contains,"sdns_log" ?DynFile;logformat :rawmsg,contians,"sdns_log" ~
然后执行
service rsyslog restart
客户端测试:
$ logger -p user.info "sdns_log 34334"
查看服务端日志
$ sudo tail -f /var/log/tlog20150227.log
20150227113413 10.10.41.20 sdns_log 34334n
把不同服务器发送过来的日志存放到不同的文件
:fromhost-ip, isequal, "192.168.0.160" /var/log/host160.log :FROMHOST-IP, isequal, "192.168.0.161" /var/log/host161.log :FROMHOST-IP, startswith, "192.168.1." /var/log/network1.log :FROMHOST-IP, startswith, "192.168.2." /var/log/network2.log
案例3
自定义修改ssh的日志记录
修改ssh的配置文件/etc/ssh/sshd_config
SyslogFacility local5
这里将ssh的日志类型设置为local5,默认是AUTHPRIV
然后重新加载sshd
修改/etc/rsyslog.conf
添加
local5.* /var/log/sshd.log
将local5类型的日志记录到/var/log/sshd.log这个文件
然后重新启动rsyslog
查看日志
案例4
将mail日志保存到远程服务器的/var/log/newmail.log文件
参考文档:
http://www.rsyslog.com/
http://www.rsyslog.com/doc/v5-stable/
http://w.gdu.me/wiki/Linux/rsyslog_logrotate.html