Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

    要选择除 infodebug 优先级以外的所有 cron syslog 信息,请使用以下格式设置配置:

    cron.!info,!debug
基于属性的过滤器

通过基于属性的过滤器,您可以按任何属性(如 时间生成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 startwith_i compare-operations,例如:

    如果 $hostname start with_i "<HOST_NAME>",则 ACTION.

  • ACTION 属性表示在表达式返回值 true 时要执行的操作。这可以是单个操作,也可以是用大括号括起的任意复杂脚本。
  • 如果是在新行开头,则关键字表示基于表达式的过滤器then 关键字将 EXPRESSIONACTION 分隔开。(可选)您可以使用 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]
输出频道

输出频道主要用于指定日志文件可扩展至的最大大小。这对于日志文件轮转非常有用(更多信息,请参阅 第 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 仅支持 MySQLPostgreSQL 数据库。要使用 MySQLPostgreSQL 数据库写入功能,请分别安装 rsyslog-mysqlrsyslog-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)。

丢弃 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 属性指定修改模板功能的任何选项。当前支持的模板选项为 sqlstdsql (用于将文本格式化为 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_CHARTO_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