23.2. Rsyslog 的基本配置
rsyslog 的主要配置文件是 /etc/rsyslog.conf
。您可以在此处指定由 过滤 和操作部分组成的 全局指令、模块和 规则 。另外,您可以在哈希符号(#
)后面以文本形式添加注释。
23.2.1. 过滤器
规则由过滤器部分指定,该过滤器选择 syslog 消息的子集和操作部分,后者指定如何处理选定的消息。要在 /etc/rsyslog.conf
配置文件中定义规则,请在一行上同时定义过滤器和操作,并使用一个或多个空格或标签页将它们分隔。
rsyslog 提供了根据所选属性过滤 syslog 消息的各种方式。可用的过滤方法可以划分为 基于 facility/Priority、基于 属性 和 表达式的过滤器。
- 基于工具/基于优先级的过滤器
过滤 syslog 消息的最常用方式是使用基于设备/优先级的过滤器,该过滤器根据两个条件过滤 syslog 消息:由点隔开的设备和 优先级。要创建选择器,请使用以下语法:
FACILITY.PRIORITY
其中:
-
FACILITY 指定生成特定 syslog 消息的子系统。例如,mail
子系统
处理与邮件相关的所有 syslog 消息。FACILITY 可以通过以下关键字之一(或数字代码)表示:Kern(
0)、用户
(1)、邮件
(2)、后台程序
(3)、auth
(4)、syslog
(5)、lpr
(6)、新闻
(7)、cron
(8)、authpriv
(9)、ftp(10)
和local0
通过local7
(16 - 23)。 PRIORITY 指定 syslog 消息的优先级。PRIORITY 可通过以下关键字之一表示(或按编号表示):
调试
(7)、info(6)、
notice
(5)、warning(4)、
err
(3)、crit
(2)、警报
(1)和emerg(
0)。上述语法选择优先级为已定义或更高的 syslog 消息。通过前面的任何优先级关键字及等号(
=
),您仅会选择具有指定优先级的 syslog 消息。所有其他优先级将被忽略。相反,在优先级关键字前面带有感叹号(!
)可选择除定义优先级的消息之外的所有 syslog 消息。除了上面指定的关键字外,您还可以使用星号(
*
)定义所有设施或优先级(具体取决于您将星号放置在逗号之前或之后)。指定 priority 关键字none
适用于没有指定优先级的设备。设备和优先级条件都区分大小写。要定义多个设备和优先级,请使用逗号分隔(
,
)。要在一行中定义多个选择器,请使用分号(;
)分隔它们。请注意,选择器字段中的每个选择器都可以覆盖前面的选择器,这可从模式中排除一些优先级。例 23.1. 工具/基于优先级的过滤器
以下是可在
/etc/rsyslog.conf 中指定的简单工具/
基于优先级的过滤器的几个示例。要选择所有具有任何优先级的内核 syslog 信息,请在配置文件中添加以下文本:kern.*
要选择优先级为
crit
或更高版本的所有邮件 syslog 信息,请使用以下格式:mail.crit
要选择除
info
或debug
优先级以外的所有 cron syslog 信息,请使用以下格式设置配置:cron.!info,!debug
-
FACILITY 指定生成特定 syslog 消息的子系统。例如,mail
- 基于属性的过滤器
通过基于属性的过滤器,您可以按任何属性(如
时间生成
或syslogtag)过滤 syslog
消息。有关属性的详情请参考 “属性”一节。您可以使用 表 23.1 “基于属性的 compare-operations” 中列出的 compare-operations 之一将每个指定属性与特定值进行比较。属性名称和比较操作都区分大小写。基于属性的过滤器必须以冒号(
:
)开头。要定义过滤器,请使用以下语法::PROPERTY, [!]COMPARE_OPERATION, "STRING"
其中:
- PROPERTY 属性指定所需的属性。
-
可选感叹号(
!
)否定 compare-operation 的输出。基于属性的过滤器目前不支持其他布尔值操作器。 - COMPARE_OPERATION 属性指定 表 23.1 “基于属性的 compare-operations” 中列出的其中一个 compare-operations。
STRING 属性指定属性提供的文本与以下值相比的值:这个值必须用引号括起。要转义字符串内的特定字符(如引号(
"
)),请使用反斜杠字符(\
)。表 23.1. 基于属性的 compare-operations compare-operation 描述 包含
检查提供的字符串是否与 属性提供的文本的任何部分匹配。
isequal
将提供的字符串与 属性提供的所有文本进行比较。这两个值必须完全等于匹配。
开头
检查提供的字符串是否完全在 属性提供的文本开头找到。
regex
将提供的 POSIX BRE(基本正则表达式)与 属性提供的文本进行比较。
ereregex
将提供的 POSIX ERE(扩展正则表达式)正则表达式与 属性提供的文本进行比较。
isempty
检查 属性是否为空。该值将被丢弃。这在使用规范化数据时尤其有用,因为这些数据可能会根据规范化结果进行填充。
例 23.2. 基于属性的过滤器
以下是可以在
/etc/rsyslog.conf
中指定的基于属性的过滤器的几个示例。要选择在消息文本中包含字符串error
的 syslog 信息,请使用::msg, contains, "error"
以下过滤器选择从主机名
host1
接收的 syslog 信息::hostname, isequal, "host1"
要选择不包含任何字词严重和错误信息
(
例如,
致命 lib 错误
),请输入::msg, !regex, "fatal .* error"
- 基于表达式的过滤器
基于表达式的过滤器根据定义的算术、布尔值或字符串操作选择 syslog 消息。基于表达式的过滤器使用 rsyslog自身的脚本语言(称为 RainerScript )来构建复杂的过滤器。
基于表达式的过滤器的基本语法如下:
if EXPRESSION then ACTION else ACTION
其中:
EXPRESSION 属性表示要评估的表达式,例如:
$msg start with 'DEVNAME' 或
$syslogfacility-text == 'local0'
。您可以使用 和 和 或运算符
在单个过滤器中指定多个表达式。
请注意,r syslog 支持在基于表达式的过滤器中进行不区分大小写的比较。您可以在 EXPRESSION 属性中使用
include_i
compare-operations,例如:或
startwith_i如果 $hostname start with_i "<HOST_NAME>",则 ACTION.
-
ACTION 属性表示在表达式返回值
true
时要执行的操作。这可以是单个操作,也可以是用大括号括起的任意复杂脚本。 如果是在新行开头,则关键字表示基于表达式的过滤器。then 关键字将 EXPRESSION 与 ACTION 分隔开。(可选)您可以使用 else 关键字指定在未满足条件时要执行的操作。
使用基于表达式的过滤器,您可以使用大括号中括起的脚本来嵌套条件,如 例 23.3 “基于表达式的过滤器” 中所示。脚本允许您在表达式内使用基于 facility/priority 的过滤器。另一方面,此处不建议基于属性的过滤器。RainerScript 支持带有特殊函数
re_match()
和re_extract()的
正则表达式。例 23.3. 基于表达式的过滤器
以下表达式包含两个嵌套条件:由名为prog1 的程序创建的日志文件根据消息中是否存在"test"字符串分成两个文件。
if $programname == 'prog1' then { action(type="omfile" file="/var/log/prog1.log") if $msg contains 'test' then action(type="omfile" file="/var/log/prog1test.log") else action(type="omfile" file="/var/log/prog1notest.log") }
有关各种基于表达式的过滤器的更多示例,请参阅 “在线文档”一节。RainerScript 是 rsyslog新配置格式的基础,请参考 第 23.3 节 “使用新配置格式”
23.2.2. 操作
操作指定将使用由已定义的选择器过滤的消息执行的操作。以下是您可以在规则中定义的一些操作:
- 将 syslog 消息保存到日志文件中
大多数操作都指定将 syslog 消息保存到的日志文件中。这可以通过在您已定义的选择器后指定文件路径来实现:
FILTER PATH
其中 FILTER 代表用户指定的选择器,PATH 是目标文件的路径。
例如,以下规则由一个选择器组成,该选择器选择所有 cron syslog 信息,以及将其保存到
/var/log/cron.log
日志文件中的操作:cron.* /var/log/cron.log
默认情况下,每次生成 syslog 消息时都会同步日志文件。使用短划线标记(
-
)作为您指定的文件路径前缀,以忽略同步:FILTER -PATH
请注意,如果在写入尝试后系统终止了正确的信息,则可能会丢失信息。但是,这个设置可以提高性能,特别是您运行生成非常详细的日志消息的程序。
您指定的文件路径可以是静态的 ,也可以是动态的。静态文件由固定文件路径表示,如上例中所示。动态文件路径可能会根据收到的消息而有所不同。动态文件路径由模板和一个问号(
?
)前缀表示:FILTER ?DynamicFile
其中 DynamicFile 是预定义模板的名称,用于修改输出路径。您可以使用短划线前缀(
-
)禁用同步,也可以使用用冒号(;
)分隔的多个模板。有关模板的更多信息,请参阅 “生成动态文件名”一节。如果您指定的文件是现有 终端 或
/dev/console
设备,则 syslog 消息会在使用 X Window 系统时分别发送到标准输出(使用特殊 终端-handling)或控制台(使用特殊的/dev/console
-handling)。- 通过网络发送 syslog 信息
rsyslog 允许您通过网络发送和接收 syslog 消息。此功能允许您管理一台计算机上多个主机的 syslog 消息。要将 syslog 信息转发到远程机器,请使用以下语法:
@(
zNUMBER
)HOST:PORT其中:
-
at 符号(
@)
表示 syslog 消息使用UDP
协议转发到主机。若要使用TCP
协议,请使用带符号的两个在它们之间没有空格(@@
)。 -
可选的
zNUMBER
设置为 syslog 信息启用 zlib 压缩。NUMBER 属性指定压缩级别(从 1 降至最低到 9 倍)。rsyslogd
自动检查压缩增益,只有在存在压缩增益并且不会压缩 60 字节下面的消息时,才会压缩消息。 - HOST 属性指定接收所选 syslog 消息的主机。
PORT 属性指定主机计算机的端口。
当将
IPv6 地址
指定为主机时,请将地址括在方括号([, ]
)内
。例 23.4. 通过网络发送 syslog 消息
以下是通过网络转发 syslog 消息的一些操作示例(请注意,所有操作都以选择器开头,该选择器可选择具有任何优先级的所有消息)。要通过
UDP
协议转发消息到192.168.0.1
,请输入:. @192.168.0.1
要使用端口 6514 和
TCP
协议将信息转发到"example.com",请使用:. @@example.com:6514
以下使用 zlib (级别 9 压缩)压缩消息,并使用
UDP
协议将它们转发到2001:db8::1
. @(z9)[2001:db8::1]
-
at 符号(
- 输出频道
输出频道主要用于指定日志文件可扩展至的最大大小。这对于日志文件轮转非常有用(更多信息,请参阅 第 23.2.5 节 “Log Rotation”)。输出通道基本上是关于输出操作的信息的集合。输出频道由
$outchannel
指令定义。要在/etc/rsyslog.conf
中定义输出频道,请使用以下语法:$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION
其中:
- NAME 属性指定输出频道的名称。
- FILE_NAME 属性指定输出文件的名称。输出通道只能写入文件,不能写入管道、终端或其他类型的输出。
- MAX_SIZE 属性表示指定文件的最大大小(在 FILE_NAME中)可增大到:这个值以字节为单位指定。
ACTION 属性指定在MAX_SIZE 中定义的最大大小被敲击时执行的操作。
要使用定义的输出频道作为规则内的操作,请输入:
FILTER :omfile:$NAME
例 23.5. 输出频道日志轮转
以下输出显示了使用输出频道进行简单的日志轮转。首先,输出频道通过
$outchannel
指令定义:$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script
然后,用于选择每个具有任何优先级的 syslog 消息并在获取的 syslog 消息上执行之前定义的输出频道的规则:
. :omfile:$log_rotation
达到限制(示例中为 100 MB)后,将执行
/home/joe/log_rotation_script
。此脚本可以包含任何内容,包括将文件移动到其他文件夹、编辑特定内容或将其删除。
- 向特定用户发送 syslog 信息
-
rsyslog 可通过指定您要将信息发送到的用户的用户名(如 例 23.7 “指定多个操作”)向特定用户发送 syslog 信息。要指定多个用户,请使用逗号(
,
)来分隔每个用户名。要向当前登录的每个用户发送消息,请使用星号(*
)。 - 执行程序
rsyslog 允许您对选定的 syslog 消息执行程序,并使用
system()
调用在 shell 中执行程序。要指定要执行的程序,请为它加上脱字符号(^
)前缀。因此,指定一个模板,它格式化收到的消息并将其作为一行参数传递给指定的可执行文件(有关模板的更多信息,请参阅 第 23.2.3 节 “模板”)。FILTER ^EXECUTABLE; TEMPLATE
此处 FILTER 条件的输出由 EXECUTABLE 表示的程序处理。该程序可以是任何有效的可执行文件。将 TEMPLATE 替换为格式化模板的名称。
例 23.6. 执行程序
在以下示例中,所有带有任何优先级的 syslog 消息都会被选择,使用
模板
模板格式化并作为参数传递给 test-program 程序,然后使用提供的参数执行:. ^test-program;template
警告在接受来自任何主机的消息和使用 shell 执行操作时,您可能容易受到命令注入的影响。攻击者可能会尝试在您指定的程序中注入和执行命令。为避免出现任何可能的安全威胁,请仔细考虑使用 shell 执行操作。
- 在数据库中存储 syslog 消息
可使用数据库写入操作将选定的 syslog 消息直接写入到数据库表中。数据库写入器使用以下语法:
:PLUGIN:DB_HOST,DB_NAME,DB_USER,DB_PASSWORD;TEMPLATE
其中:
-
PLUGIN 调用处理数据库写入的指定插件(例如,
ommysql
插件)。 - DB_HOST 属性指定数据库主机名。
- DB_NAME 属性指定数据库的名称。
- DB_USER 属性指定数据库用户。
- DB_PASSWORD 属性指定与上述数据库用户使用的密码。
TEMPLATE 属性指定对用于修改 syslog 消息的模板的可选用途。有关模板的更多信息,请参阅 第 23.2.3 节 “模板”。
重要目前,r syslog 仅支持
MySQL
和PostgreSQL
数据库。要使用MySQL
和PostgreSQL
数据库写入功能,请分别安装 rsyslog-mysql 和 rsyslog-pgsql 软件包。另外,请确保在/etc/rsyslog.conf
配置文件中载入适当的模块:module(load=”ommysql”) # Output module for MySQL support module(load=”ompgsql”) # Output module for PostgreSQL support
有关 rsyslog 模块的详情请参考 第 23.6 节 “使用 Rsyslog 模块”。
或者,您可以使用
omlibdb
模块提供的通用数据库接口(支持:Firebird/Interbase、MS SQL、Sybase、SQLLite、Ingres、Oracle、mSQL)。
-
PLUGIN 调用处理数据库写入的指定插件(例如,
- 丢弃 syslog 信息
要丢弃您选择的消息,请使用
stop
。discard 操作主要用于在执行任何进一步处理前过滤出消息。如果要省略一些填写日志文件的重复消息,它可以有效。丢弃操作的结果取决于在其配置文件中指定的位置,最佳结果会将这些操作放在操作列表的顶部。请注意,一旦丢弃了一条消息,就无法在以后的配置文件行中检索该消息。
例如,以下规则丢弃所有与
local5.*
过滤器相关的信息:local5.* stop
在以下示例中,会丢弃任何 cron syslog 信息:
cron.* stop
注意对于 rsyslog 7 之前的版本,使用了波形符字符(
~
),而不是停止
丢弃 syslog 消息。
指定多个操作
对于每个选择器,您可以指定多个操作。要为一个选择器指定多个操作,请在单独的行中写每个操作,并在它前面添加一个 符号(&)字符:
FILTER ACTION & ACTION & ACTION
指定多个操作可提高所需结果的整体性能,因为指定的选择器只需要评估一次。
例 23.7. 指定多个操作
在以下示例中,所有具有关键优先级(crit
)的内核 syslog 消息都发送到用户 user1
,由模板 临时
处理并传递 至 test-program
可执行文件,并通过 UDP
协议转发到 192.168.0.1
。
kern.=crit user1 & ^test-program;temp & @192.168.0.1
任何操作都可以跟随格式化消息的模板。要指定模板,请为带有分号(;)
的操作后缀并指定模板的名称。有关模板的更多信息,请参阅 第 23.2.3 节 “模板”。
模板必须在操作中使用之前定义,否则将被忽略。换句话说,模板定义应始终在 /etc/rsyslog.conf
中的规则定义之前。
23.2.3. 模板
rsyslog 生成的任何输出都可以通过使用 模板 来根据您的需要修改和格式化。要在 /etc/rsyslog.conf
中创建模板,请使用以下语法:
template(name=”TEMPLATE_NAME” type=”string” string="text %PROPERTY% more text" [option.OPTION="on"])
其中:
-
template()
是引入定义模板的块的指令。 -
TEMPLATE_NAME
强制参数用于引用模板。请注意,TEMPLATE_NAME
应该是唯一的。 -
type required
参数可以获取以下值之一: "list"、"subtree"、"string" 或 "plugin"。 -
string
参数是实际的模板文本。在此文本中,可以使用特殊字符,如 \n 表示换行符,或使用 \r 表示回车。如果要按字面意义使用这些字符,则必须转义其他字符,如%或 "。在此文本中,可以使用特殊字符,如\n
表示新行,或者使用\r
表示回车。如果要按字面意义使用这些字符,则必须转义其他字符,如%
或"
。 -
在两个百分比符号之间指定的文本(
%
)指定 允许您 访问 syslog 消息的特定内容的属性。有关属性的详情请参考 “属性”一节。 OPTION
属性指定修改模板功能的任何选项。当前支持的模板选项为sql
和stdsql
(用于将文本格式化为 SQL 查询),或 json 格式化适合 JSON 处理的文本,以及设置属性名称区分大小写
的区分大小写。注意请注意,数据库作者将检查模板中是否指定了
sql
或 stdsql
选项。如果没有,数据库作者不会执行任何操作。这是为了避免可能的任何安全威胁,如 SQL 注入。如需更多信息 ,请参阅 第 23.2.2 节 “操作” 中的存储数据库中 syslog 信息 部分。
生成动态文件名
模板可用于生成动态文件名。通过将属性指定为文件路径的一部分,将为每个唯一属性创建一个新文件,这是对 syslog 消息进行分类的一种便捷方式。
例如,使用 timegenerated 属性(
从消息中提取时间戳)来为每个 syslog 消息生成唯一的文件名:
template(name=”DynamicFile” type=”list”) { constant(value=”/var/log/test_logs/”) property(name=”timegenerated”) constant(value”-test.log”) }
请记住,$template
指令仅指定模板。您必须在规则内使用它才能生效。在 /etc/rsyslog.conf
中,在操作定义中使用问号(?
)来标记动态文件名模板:
. ?DynamicFile
属性
模板中定义的属性(在 20% 符号之间)
通过使用 属性替换器 访问 syslog 消息的不同内容。要在模板中定义属性(最好使用两个引号("…"
)),请使用以下语法:
%PROPERTY_NAME:FROM_CHAR:TO_CHAR:OPTION%
其中:
-
PROPERTY_NAME 属性指定属性的名称。可以在
rsyslog.conf(5)
手册页的 Available Properties 部分下找到所有可用属性及其详细描述的列表。 -
FROM_CHAR 和 TO_CHAR 属性表示指定属性将对其操作的一系列字符。或者,可以使用正则表达式来指定一系列字符。为此,请将字母
R
设置为 FROM_CHAR 属性,并将您所需的正则表达式指定为 TO_CHAR 属性。 -
OPTION 属性指定任何属性选项,例如
小写
选项,可将输入转换为小写选项。有关所有可用属性选项及其详细描述的列表,请参阅Coreject Options 部分下的rsyslog.conf(5)
手册页。
以下是简单属性的一些示例:
以下属性获取 syslog 消息的整个消息文本:
%msg%
以下属性获取系统日志消息消息文本的前两个字符:
%msg:1:2%
以下属性获取 syslog 消息的完整消息文本,并丢弃其最后一行回馈字符:
%msg:::drop-last-lf%
以下属性获取收到 syslog 消息时生成的时间戳的前 10 个字符,并根据 RFC 3999 日期标准对其进行格式化。
%timegenerated:1:10:date-rfc3339%
模板示例
本节介绍 rsyslog 模板的几个示例。
例 23.8 “详细 syslog 消息模板” 显示一个模板,用于格式化 syslog 消息,以便其输出消息的严重性、设备、消息收件时间的时间戳、主机名、消息标记、消息文本,并且以新行结尾。
例 23.8. 详细 syslog 消息模板
template(name=”verbose” type=”list”) { property(name="syslogseverity”) property(name="syslogfacility”) property(name="timegenerated”) property(name="HOSTNAME”) property(name="syslogtag”) property(name="msg”) constant(value=”\n") }
例 23.9 “墙壁消息模板” 显示类似传统墙壁消息的模板(将发送给登录的每个用户并将其 mesg(1)
权限设置为 yes
)。此模板在新行(使用 \r 和 \n)上输出消息文本,以及主机名、消息标记和时间戳(使用 \r
和 \n
)并环环 bell(使用 \7
)。
例 23.9. 墙壁消息模板
template(name=”wallmsg” type=”list”) { constant(value="\r\n\7Message from syslogd@”) property(name="HOSTNAME”) constant(value=” at ") property(name="timegenerated”) constant(value=" ...\r\n ”) property(name="syslogtag”) constant(value=” “) property(name="msg”) constant(value=”\r\n”) }
例 23.10 “数据库格式化的消息模板” 显示格式化 syslog 消息的模板,以便它可以用作数据库查询。注意在作为 template 选项指定的模板末尾使用sql
选项。它告知数据库作者将消息格式化为 MySQL SQL
查询。
例 23.10. 数据库格式化的消息模板
template(name="dbFormat" type="list" option.sql="on") { constant(value="insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag)") constant(value=" values ('") property(name="msg") constant(value="', ") property(name="syslogfacility") constant(value=", '") property(name="hostname") constant(value="', ") property(name="syslogpriority") constant(value=", '") property(name="timereported" dateFormat="mysql") constant(value="', '") property(name="timegenerated" dateFormat="mysql") constant(value="', ") property(name="iut") constant(value=", '") property(name="syslogtag") constant(value="')") }
rsyslog 还包含由 RSYSLOG_
前缀标识的一组预定义模板。它们为 syslog 的使用保留,建议不要使用此前缀创建模板以避免冲突。下表显示了这些预定义模板及其定义:
RSYSLOG_DebugFormat
用于对属性问题进行故障排除的特殊格式。
template(name=”RSYSLOG_DebugFormat” type=”string” string="Debug line with all properties:\nFROMHOST: '%FROMHOST%', fromhost-ip: '%fromhost-ip%', HOSTNAME: '%HOSTNAME%', PRI: %PRI%,\nsyslogtag '%syslogtag%', programname: '%programname%', APP-NAME: '%APP-NAME%', PROCID: '%PROCID%', MSGID: '%MSGID%',\nTIMESTAMP: '%TIMESTAMP%', STRUCTURED-DATA: '%STRUCTURED-DATA%',\nmsg: '%msg%'\nescaped msg: '%msg:::drop-cc%'\nrawmsg: '%rawmsg%'\n\n")
RSYSLOG_SyslogProtocol23Format
IETF 的 internet-draft ietf-syslog-protocol-23 中指定的格式,被假定为成为新的 syslog 标准 RFC。
template(name=”RSYSLOG_SyslogProtocol23Format” type=”string” string="%PRI%1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n ")
RSYSLOG_FileFormat
现代日志文件格式类似于 TraditionalFileFormat,但具有高精确度时间戳和时区信息。
template(name="RSYSLOG_FileFormat" type="list") { property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") property(name="msg" spifno1stsp="on" ) property(name="msg" droplastlf="on" ) constant(value="\n") }
RSYSLOG_TraditionalFileFormat
较旧的默认日志文件格式,具有低精确度时间戳。
template(name="RSYSLOG_TraditionalFileFormat" type="list") { property(name="timestamp") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") property(name="msg" spifno1stsp="on" ) property(name="msg" droplastlf="on" ) constant(value="\n") }
RSYSLOG_ForwardFormat
具有高精确度时间戳和时区信息的转发格式。
template(name="ForwardFormat" type="list") { constant(value="<") property(name="pri") constant(value=">") property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag" position.from="1" position.to="32") property(name="msg" spifno1stsp="on" ) property(name="msg") }
RSYSLOG_TraditionalForwardFormat
具有低精确度时间戳的传统转发格式。
template(name="TraditionalForwardFormat" type="list") { constant(value="<") property(name="pri") constant(value=">") property(name="timestamp") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag" position.from="1" position.to="32") property(name="msg" spifno1stsp="on" ) property(name="msg") }
23.2.4. 全局指令
全局指令是应用到 rsyslogd 守护进程的
配置选项。它们通常为影响 rsyslogd
守护进程行为或下列规则的特定预定义变量指定一个值。所有全局指令都包含在 全局
配置块中。以下是指定日志消息覆盖本地主机名的 global 指令示例:
global(localHostname=”machineXY”)
您可以在 /etc/rsyslog.conf
配置文件中定义多个指令。指令会影响所有配置选项的行为,直到检测到同一指令的另一次出现。全局指令可用于配置操作、队列和调试。您可以在 “在线文档”一节 中找到所有可用配置指令的完整列表。目前,开发了新的配置格式来取代基于 $ 的语法(请参阅 第 23.3 节 “使用新配置格式”)。但是,典型的全局指令仍作为传统格式提供支持。
23.2.5. Log Rotation
以下是 /etc/logrotate.conf
配置文件示例:
# rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # uncomment this if you want your log files compressed compress
示例配置文件中的所有行都定义了应用到每个日志文件的全局选项。在我们的示例中,日志文件每周轮转,轮转日志文件保留四周,并且所有轮转的日志文件都会压缩 到 .gz
格式。任何以井号(#)开头的行都是注释,不会处理。
您可以为特定的日志文件定义配置选项,并将它放到全局选项下。不过,建议为 /etc/logrotate.d/
目录中的任何特定日志文件创建单独的配置文件,并在其中定义任何配置选项。
以下是 /etc/logrotate.d/
目录中的配置文件示例:
/var/log/messages { rotate 5 weekly postrotate /usr/bin/killall -HUP syslogd endscript }
此文件中的配置选项仅特定于 /var/log/messages
日志文件。此处指定的设置会尽可能覆盖全局设置。因此,轮转的 /var/log/messages
日志文件将保留五周,而不是全局选项中定义的四周。
以下是您可以在 logrotate 配置文件中指定的一些指令列表:
weekly
- 指定每周要执行的日志文件轮转。类似的指令包括:-
daily
-
monthly
-
每年
-
压缩 - 启用轮转日志文件的
压缩
。类似的指令包括:-
nocompress
-
presscmd
- 指定用于压缩的命令。 -
uncompresscmd
-
pressext
- 指定用于压缩的扩展名。 -
pressoptions
- 指定要传递给使用的压缩程序的任何选项。 -
delaycompress
- 将日志文件的压缩加载到下一次日志文件轮转。
-
-
轮转 INTEGER
- 指定日志文件在删除或邮寄到特定地址之前进行的轮转数量。如果指定了 0,则删除旧的日志文件,而不是轮转。 邮件 ADDRESS
- 此选项允许将rotate
指令所定义多次的日志文件发送至指定地址。类似的指令包括:-
nomail
-
邮件优先
- 指定将发送刚才轮转的日志文件,而不是即将推出的日志文件。 -
maillast
- 指定将要对扩展的日志文件进行邮件传递,而不是刚刚轮转的日志文件。这是启用邮件
时的默认选项。
-
有关指令和各种配置选项的完整列表,请查看 logrotate(5)
手册页。
23.2.6. 增加 Open 文件的限制
在某些情况下,r
syslog 超过打开文件的最大数量的限制。因此,r syslog
无法打开新文件。
在 rsyslog
中增加打开文件的限制:
使用以下内容创建 /etc/systemd/system/rsylog.service.d/increase_nofile_limit.conf
文件:
[Service] LimitNOFILE=16384