日志缓冲是指将日志消息写入目标位置(如文件、数据库或远程服务器)之前,先将它们暂时存储在内存中。这样做的目的是提高性能和效率,减少对磁盘I/O的频繁访问
缓冲的主要类型包括:
- 环形缓冲区:一种固定大小的缓冲区,当缓冲区满时,新消息会覆盖最旧的消息
- 消息队列:将日志消息放入队列中,按顺序处理和发送
- 写缓冲区:在将日志消息写入目标文件或数据库之前,先将它们存储在内存中
action关键词定义动作
日志缓冲使用action()配置动作,action()配置在rsyslog中用于定义更复杂和灵活的日志处理动作。
action类型主要有:
- omfile:将日志消息写入文件
action(type="omfile" file="/path/to/logfile" template="MyFormat")
- omfwd:将日志消息转发到远程服务器
action(type="omfwd" target="remote.server.com" port="514" protocol="tcp")
- omusrmsg:将日志消息发送给指定用户
action(type="omusrmsg" users="username")
- ommail:通过电子邮件发送日志消息
action(type="ommail" server="smtp.server.com" port="25" mailfrom="sender@example.com" mailto="recipient@example.com" subject="Log Alert")
- omprog:将日志消息传递给外部程序
action(type="omprog" binary="/path/to/program" template="MyFormat")
- omstdout:将日志消息输出到标准输出(通常用于调试)
action(type="omstdout")
环形缓冲区
module(load="imuxsock" SysSock.Use="off")
module(load="imklog")
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
action(type="omfile" file="/var/log/messages" bufferSize="10000" bufferType="ring")
- module(load="imuxsock" SysSock.Use="off"):加载imuxsock模块,用于接收本地Unix套接字日志消息
- module(load="imklog"):加载imklog模块,用于接收内核日志消息
- module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat"):加载omfile模块,用于将日志消息写入文件,并使用传统的日志格式
- action(type="omfile" file="/var/log/messages" bufferSize="10000" bufferType="ring"):配置一个动作,将日志消息写入/var/log/messages文件,使用大小为10000的环形缓冲区
- bufferSize:这是缓冲区的大小,以字节为单位,根据日志的流量和系统的内存情况进行调整。默认值通常是 10000 字节
- bufferType:环形缓冲区的类型,常见的类型有 ring 和 fixed
- ring类型的缓冲区在满了之后会覆盖最旧的日
- fixed类型的缓冲区在满了之后会停止接收新的日志
消息队列
module(load="imuxsock" SysSock.Use="off")
module(load="imklog")
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
action(type="omfile" file="/var/log/messages" queue.type="LinkedList" queue.size="10000")
- module(load="imuxsock" SysSock.Use="off"):加载imuxsock模块,用于接收本地Unix套接字日志消息
- module(load="imklog"):加载imklog模块,用于接收内核日志消息
- module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat"):加载omfile模块,用于将日志消息写入文件,并使用传统的日志格式
- action(type="omfile" file="/var/log/messages" queue.type="LinkedList" queue.size="10000"):配置一个动作,将日志消息写入/var/log/messages文件,使用大小为10000的链表队列
写缓冲区
module(load="imuxsock" SysSock.Use="off")
module(load="imklog")
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
action(type="omfile" file="/var/log/messages" action.resumeRetryCount="-1" queue.type="FixedArray" queue.size="10000")
- module(load="imuxsock" SysSock.Use="off"):加载imuxsock模块,用于接收本地Unix套接字日志消息。
- module(load="imklog"):加载imklog模块,用于接收内核日志消息。
- module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat"):加载omfile模块,用于将日志消息写入文件,并使用传统的日志格式。
- action(type="omfile" file="/var/log/messages" action.resumeRetryCount="-1" queue.type="FixedArray" queue.size="10000"):配置一个动作,将日志消息写入/var/log/messages文件,使用大小为10000的固定数组队列,并设置action.resumeRetryCount为-1,表示无限重试。