Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3401300
  • 博文数量: 534
  • 博客积分: 11595
  • 博客等级: 上将
  • 技术积分: 5785
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(534)

文章存档

2015年(4)

2014年(27)

2013年(15)

2012年(38)

2011年(36)

2010年(85)

2009年(63)

2008年(142)

2007年(124)

分类: LINUX

2014-08-19 11:00:04

rsyslog作为syslog的代替,功能多,性能好。 文档基于rsyslog v7
工作中正好接触了他,使用的是比较新的版本 7.4.2,由于文档都是e文。
自己英语不是很好,磕磕巴巴读完后,自己留个记录。
有啥不对的,大家留言我改一下。

先写一个rsyslog的特性,队列(queue)
英语好的朋友可以看看:
在说queue之前,说一下rsyslog处理日志的整体流程,看图:



红色圈起的部分就是队列,在rsyslog中在2个地方设有queue。
从数据流来看,在所有数据进来之后,可以做一些标记或调整,然后放入第一个queue。
这个queue称作 Main queue ,所有进入的数据都会在这里做缓存。
然后后面的 filter engine 会从中读取数据,分门别类的将数据放到各个action queue中。
在Action Processor后,output模块会吧数据读出发送出去。
目标可以是文件,tcp/udp端口,mysql/oracle,甚至snmp或发邮件给你。

所以在整体数据流中,有2个地方可以配置queue来缓存数据。
main queue  : 为了解决在进入数据量突然增加时,后端的filter Engine 不能及时处理就造成瓶颈。
action queue: 为了解决后端output无法发送数据时(如:对端挂掉,网络卡发送不及时),将数据缓存起来,以免日志丢失。

队列的种类:
Direct Queues: 这中队列是直接将数据放出,没有buffer。如果接收方无法处理,数据就会被丢掉。
Disk    Queues: 使用磁盘作为缓存,数据如果不能及时处理,就是用磁盘做缓存。
FixedArray Queues: 使用内存作为队列,预先划分一部分内存作为队列的缓冲空间。
                           如果队列的内存没有用完,这些内存也无法给其他程序使用,这种方法比较省cpu。
LinkedList  Queues: 使用内存作为队列,和FixedArray相反,能动态使用内存。
                           定期对队列做清理,清理过期数据清,释放内存。不过需要点CPU,不过对现在的硬件来说不算啥。
上面2中都是内存队列,内存虽然有着各种先天优势,但有致命缺点就是空间不足。
rsyslog就开发了一个磁盘辅助队列的神器,直接吧前面几个磁盘队列秒了。

讲完了理论,开始写一些配置
main queue:
$WorkDirectory /data/rsyslog_queues           # 磁盘辅助队列存放位置
$MainMsgQueueFileName incoming_queue     # 队列的名字,同时也是队列文件的名字。一般是 incoming_queue.0000001 
$MainMsgQueueType LinkedList                   # 队列种类
$MainMsgQueueDiscardMark   5000000         # 超过数值将日志将被标记丢弃,如果0为不丢弃日志。单位是日志条数,不是储存大小,下面同样。
$MainMsgQueueHighWaterMark 3000000      # 队列上水线,队列中超过配置数值的消息会放在磁盘中。
$MainMsgQueueLowWaterMark  1000000     # 队列下水线,队列中低于配置数值的消息会放在内存中。
$MainMsgQueueMaxDiskSpace 10g               # 磁盘存储最大的空间
$MainMsgQueueSize 8000000                     # 队列容纳最多的消息树,超过后队列会拒绝接受消息。0为队列没有限制。
$MainMsgQueueTimeoutEnqueue 0             # 消息在队列的最长等待时间,超过会标记为过期。0为 无时间限制
$MainMsgQueueSaveOnShutdown on          # 进程关机时,将内存队列中的数据保存到磁盘中
具体链接: 

action queue: 很多配置和main queue是一样的,就不解释了。
queue.type="linkedlist"
queue.filename="q_fwd"
queue.timeoutenqueue="0"
queue.highwatermark="500000"
queue.lowwatermark="400000"
queue.discardmark="5000000"
queue.maxdiskspace="5g"
queue.size="2000000"
queue.saveonshutdown="on"
queue.dequeuebatchsize="512"     # 同时出队的数据大小,配置的稍微大点会提高性能。但是要根据实际情况。

具体链接:

action queue配置都是和某个具体的output一起,对于常用的output有时间我也记录一下。

转自:http://blog.chinaunix.net/uid-773723-id-3900229.html
阅读(3588) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~