日志采集——rsyslog
rsyslog是linux下日志采集和传输系统。可以直接将日志写到数据库中,通过LogAnalyzer和Cacti显示,可以作为其他日志分析系统的输入源。架构消息流:输入模块->预处理模块->主队列->过滤模块(解析)->执行队列->输出模块可以通过指定不同module的方式对输入、过滤、输出进行定制,也可以使用你自己的Module来扩展。输入模块 支持文
·
rsyslog是linux下日志采集和传输系统。
可以直接将日志写到数据库中,通过LogAnalyzer和Cacti显示,可以作为其他日志分析系统的输入源。
架构
消息流:输入模块->预处理模块->主队列->过滤模块(解析)->执行队列->输出模块
高级扩展:可以通过指定不同module的方式对输入、过滤、输出进行定制,也可以使用你自己的Module来扩展。
- 输入模块
支持文件,Sock,UnixSock(logger),KernerLog等等 - 过滤模块
模块处理消息的分析和过滤,rsyslog可以根据消息的任何部分进行过滤、格式化 - 输出模块
数据库,sock,文件,进程(通过管道)等等
使用
通过配置,rsyslog根据日志的类型和级别不同来执行不同的策略,比如输出模板、输出目标(一个或多个)、超时时间、队列属性、过滤规则
在配置中,我们可以对规则打包成ruleset来多处复用
下面是一些配置片段,用来了解
#日志的组成,有预定义的机器名,时间,消息类型和级别,消息体,还可以通过配置,对消息进行抽取得到想要的数据
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
#real tran log
$ModLoad imfile #装载imfile模块
$InputFileName /data2/logs/ssologs.log #读取日志文件
$InputFileTag login.sina.com.cn: #日志写入日志附加标签字符串 不要添加特赦符号
$InputFileFacility local5 #日志类型
$InputFileSeverity info #日志等级
$InputFileStateFile ssologs.log_state #定义记录偏移量数据文件名 不要添加特赦符号
$InputFilePollInterval 1 #检查日志文件间隔(秒)
$InputFilePersistStateInterval 1 #回写偏移量数据到文件间隔时间(秒)
$InputRunFileMonitor #激活读取,可以设置多组日志读取,每组结束时设置本参数。以示生效。
#接收队列
$WorkDirectory /data2/logs/ #定义工作目录。例如队列文件存储存储文件夹。
$MainMsgQueueType LinkedList #选择使用内存队列模式。
$MainMsgQueueFileName local5.main #如果队列模式使用内存模式,同时在配置这个参数,意味激活磁盘附加队列。
$MainMsgQueueHighWatermark 10000 #当内存队列达到这些元素时,开始回写磁盘。
$MainMsgQueueLowWatermark 1000 #当内存队列小于这些元素时,停止回写磁盘。
$MainMsgQueueMaxDiskSpace 20g #限制磁盘队列大小,参数疑似20GByte。
$MainMsgQueueMaxFileSize 200m #队列单文件尺寸大小。
$MainMsgQueueSaveOnShutdown on #在rsyslogd关闭时,要保存队列中数据。
$MainMsgQueueDiscardSeverity 8 #丢弃消息等级设定,数字越低丟的越多,设置8代表禁止丢弃消息。
$MainMsgQueueDiscardMark 1000000000 #超出10亿后,会禁止新消息入队,丢弃消息。如果前一个被禁止, #那么丢弃数据将无针对性,如果
$MainMsgQueueTimeoutEnqueue 3000 #超时3秒,TCP或local_socket方式下,预防资源夯住,引起崩溃。
$MainMsgQueueDequeueBatchSize 500 #优化带宽,设置每批次传输元素量,尽可能每次传输更多的数据。
#发送队列(可以部署多个)
$ActionForwardDefaultTemplate RSYSLOG_ForwardFormat #定义转发消息格式模板,使用系统默认转发格式。
$WorkDirectory /data2/logs/ #定义工作目录。例如队列文件存储存储文件夹。
$ActionQueueType LinkedList #选择使用内存队列模式。
$ActionQueueFileName local5.forward #如果队列模式使用内存模式,同时在配置这个参数,意味激活磁盘附加队列。
$ActionQueueHighWatermark 10000 #当内存队列达到这些元素时,开始回写磁盘。
$ActionQueueLowWatermark 1000 #当内存队列小于这些元素时,停止回写磁盘。
$ActionQueueMaxDiskSpace 20g #限制磁盘队列大小,参数疑似20GByte。
$ActionQueueMaxFileSize 200m #队列单文件尺寸大小。
$ActionResumeRetryCount -1 #失败后重试次数,-1 代表无限。
$ActionQueueSaveOnShutdown on #在rsyslogd关闭时,要保存队列中数据。
$ActionQueueDiscardSeverity 8 #丢弃消息等级设定,数字越低丟的越多,设置8代表禁止丢弃消息。
$ActionQueueDiscardMark 1000000000 #超出10亿后,会禁止新消息入队,丢弃消息。如果前一个被禁止,
#那么丢弃数据将无针对性,如果
$ActionQueueTimeoutEnqueue 3000 #超时3秒,TCP或local_socket方式下,预防资源夯住,引起崩溃。
$ActionQueueDequeueBatchSize 500 #优化带宽,设置每批次传输元素量,尽可能每次传输更多的数据。
local5.* @@10.69.56.39;RSYSLOG_ForwardFormat #发送local5类型数据,以系统默认格式转发到目标服务器。
<pre name="code" class="plain">$mmnormalizeRuleBase /path/to/rulebase.rb $template t_weiyouxi_rewrite, "%$!xxxdomain% %$!xxx-ip% %$!xxx-resptime%us - [%$!xxx-timestamp%] \"%$!xxx-method% %$!xxx-url% %$!xxx-protocol%\" %$!xxx-retcode% %$!xxx-retsize% \"%$!xxx-referer%\" - \"UTRS1=%$!xxx-cookie%;U_TRS2=-;SUP=-\" \"%$!xxx-ua%\" %hostname%\n"
#####rulebase.rb
##rule=: %xxxdomain:word% %xxx-ip:ipv4% %xxx-resptime:number% %xxx-cputime:number% [%xxx-timestamp:char-to:]%] malibumytime 819 %xxx-##version:number% "%xxx-method:word% %xxx-url:word% %xxx-protocol:char-to:"%" %xxx-retcode:number% %xxx-retsize:number% "%xxx-##referer:char-to:"%" "%xxx-ua:char-to:"%" %xxx-cookie:word%
################
$ModLoad omprog
$template ssolog,"%fromhost-ip% %syslogtag% %msg%\n"
$ActionOMProgBinary /etc/dAppCluster/rsyslog.receiver.php
if $syslogfacility-text == 'local5' and $syslogtag startswith 'login.sina.com.cn' then :omprog:;ssolog
local5.* /data1/logs/rsyslog/ssologs.log;ssolog
If $pri-txt == local3.* and $msg contains “abc” then{ #pri为local3,且在消息中包含子串‘abc’
*.* -/data0/logs/local3.log;t_msg
}
module(load="imfile")
ruleset(name="remote") {
action(type="omfwd"
Protocol="tcp"
Target="<HOST>"
Port="<PORT>")
stop
}
input(type="imfile"
File="/path/to/web/access.log"
Facility="user"
Severity="info"
Tag="web_access"
PersistStateInterval="1"
Ruleset="remote")
module(load="imtcp")
template(name="msg" type="string" string="%msg:2:$%\n")
ruleset(name="analysis") {
action(type="omfile"
File="/path/to/access.log"
Template="msg") stop }
input(type="imtcp" Port="<PORT>" Ruleset="analysis")
-
日志设备(可以理解为日志类型)
日志设备/类型 | 说明 |
auth | –pam产生的日志 |
authpriv | –ssh,ftp等登录信息的验证信息 |
cron | –时间任务相关 |
kern | –内核 |
lpr | –打印 |
–邮件 | |
mark(syslog) | –rsyslog服务内部的信息,时间标识 |
news | –新闻组 |
user | –用户程序产生的相关信息 |
uucp | –unix to unix copy, unix主机之间相关的通讯 |
local 1~7 | –自定义的日志设备 |
-
日志级别
从上到下,级别从低到高,记录的信息越来越少 详细的可以查看手册: man 3 syslog
级别 | 说明 | 级别值 |
debug | –有调式信息的,日志信息最多 | 7 |
info | –一般信息的日志,最常用 | |
notice | –最具有重要性的普通条件的信息 | |
warning | –警告级别 | 4 |
err | –错误级别,阻止某个功能或者模块不能正常工作的信息 | |
crit | –严重级别,阻止整个系统或者整个软件不能正常工作的信息 | |
alert | –需要立刻修改的信息 | |
emerg | –内核崩溃等严重信息 | |
none | –什么都不记录 |
-
连接符号
连接符号 | 说明 |
.xxx | 表示大于等于xxx级别的信息 |
.=xxx | 表示等于xxx级别的信息 |
.!xxx | 表示在xxx之外的等级的信息 |
更多推荐
已为社区贡献1条内容
所有评论(0)