rsyslog 队列配置¶
@2014-04-09 新版功能: 创建
rsyslog 的基本配置请参考rsyslog 配置简介,本文仅覆盖队列相关的配置。 官方文档在这里。
下文出现的配置指令中,请将 "<object>" 根据情况替换为 "MainMsg" 或 "Action"。 前者对应主消息队列,后者对应将要创建的动作对应的队列。
每定义一个动作都会相应的创建一个动作队列,缺省情况下动作队列为 direct 模式(下详),等价于无队列。在动作队列创建其的配置参数会被恢复为缺省值, 这样就可以针对不同的动作进行不同的配置。
可用的队列类型为 $<object>QueueType [Direct|Disk|FixedArray|LinkedList],分别解释如下:
- Direct:没有队列
- Disk:仅使用磁盘作为缓冲
- FixedArray:使用内存作为缓冲,使用固定大小的预分配指针数组来记录队列元素
- LinkedList:使用内存作为缓冲,但所有数据都是动态分配的
当队列使用到磁盘或磁盘辅助时,会用到下面这些参数:
- $WorkDirectory 磁盘文件所在的目录
- $<object>QueueFilename 定义磁盘文件前缀
- $<object>QueueMaxFileSize 每个文件的最大大小,缺省为 10MB
- $<object>QueueMaxDiskSpace 最大可用的磁盘空间
- $<object>QueueCheckpointInterval 更新 bookkeeping 信息的间隔,每 n 秒
- $<object>QueueSyncQueueFiles [on/off] 每次写操作后调用 (f)sync, 4.3.2 及之后的版本可用
对 FixedArray 和 LinkedList 两种类型,如果定义了 $<object>QueueFilename, 则队列变为磁盘辅助内存队列。在有必要时(内存队列满,写数据库太慢,进程关闭等), 数据会被写入磁盘(将来再读出)作为缓冲。指令 $<object>QueueHighWatermark 和 $<object>QueueLowWatermark 控制合适使用磁盘。在队列中的元素超过高水位 时开始使用磁盘,低于低水位时才停止。
$<object>QueueSize 配置队列大小,即可以存放的日志条数。
每个队列都有一个工作线程池,相关配置如下:
- $<object>QueueWorkerThreadMinimumMessages 新工作线程启动的条件
- $<object>QueueWorkerThreads 线程个数的上限
- $<object>QueueWorkerTimeoutThreadShutdown 线程关闭超时值, 0 表示立即关闭,-1 表示永不关闭。
如果队列里的元素个数达到丢弃水位,则可以抛弃指定级别的日志信息, 从而保障重要信息有空间存放。
$<object>QueueDiscardMark
$<object>QueueDiscardSeverity 定义可丢弃日志的优先级(>=)
Numerical Severity Code 0 Emergency: system is unusable 1 Alert: action must be taken immediately 2 Critical: critical conditions 3 Error: error conditions 4 Warning: warning conditions 5 Notice: normal but significant condition 6 Informational: informational messages 7 Debug: debug-level messages
如果队列满或磁盘空间满或其他情况,rsyslog 会控制输入输出的吞吐。
- $<object>QueueTimeoutEnqueue 单位 ms,如果超过该时间仍然不能出队列, 日志会被丢弃。0 表示立即丢弃。缺省为 2s。
- $<object>QueueDequeueSlowdown 延迟出队列时间,单位 ms
- $<object>QueueDequeueTimeBegin <hour>
- $<object>QueueDequeueTimeEnd <hour> 出队列的时间窗口
- $<object>DequeueBatchSize <number> 批量处理条件
- $ActionResumeRetryCount 队列被挂起后重试次数
- $ActionResumeInterval <number> 队列被挂起(例如输出不可达)后再次继续的间隔
队列关闭的相关参数如下:
- $<object>QueueTimeoutShutdown 关闭超时时间
- $<object>QueueTimeoutActionCompletion 队列完成超时时间
- $<object>QueueSaveOnShutdown 队列关闭时是否保存数据
在没有配置任何队列相关参数的情况下(即队列类型为 Direct), 日志输出是按顺序进行,如果其中某个动作阻塞则会导致所有日志输出阻塞。 队列缺省参数(例如 $<object>QueueTimeoutEnqueue 的缺省 2s) 的设置也会影响到日志输入端的处理。 其他应用的日志输出相应的会被延迟,导致应用响应变慢。 因此在日志输出动作有使用到非本地文件输出时,最好对该动作队列进行合理的配置。