rsyslog中有两种类型的队列
- main队列,主要是将input进rsyslog的数据放于其中,等待处理;
- action队列,当message进入到main队列之后,filter engine会对从main队列中读取数据,并将message发送到action队列,等待action将数据通过各种不同的output发到其他日志中转介质。
介绍http://www.rsyslog.com/doc/queues.html 队列相关概念,具体如图下
rsyslog有四种队列设置:
1. direct queues:其实就是不进行处理,当接受方不能处理时便丢弃
2. disk queues:使用磁盘作为缓冲处理,这种队列有一个特点就是不会使用任何内存空间进行队列缓冲,所以这种队列处理是可靠处理。同时由于进行磁盘读写所以这种队列也是最慢的一种队列模式。这种队列处理比较适合那种对数据安全性要求较高的日志处理。
3. in-memory queues:使用内存作为缓冲,这种模式的速度最快,当然它不能逃脱系统故障。它甚至可以在目标系统down掉的情况下缓存日志文件。另外它不会在内存以外的地方缓存日志,但是当发送端出现问题的时候内存中的日志就over了。
它有两种模式:LinkedList:动态分配; FixedArray:预分配。
4. disk-assisted memory queues:当一个disk queue 的QueueFileName被定义在in-memory queues队列设置中时,这个in-memory queue 会自动变成disk-assisted memory queue。这种队列模式集成了disk-queue和in-memory queue 的优点,当primary queue满了或者需要关闭rsyslog的时候就会激活disk-queue的磁盘读写。
这种队列官方推荐为通过 tcp action 发数据到database场景下的队列。
原理:首先其内部设定了两个变量:high watermark和low watermark,当queue达到high watermark 时,会将message写进disk queue,直到达到 low watermark。