Rsyslog 的 imfile 插件不能在 CentOS 7 上运行?

Rsyslog's imfile plugin not working on CentOS 7?

我正在尝试让 Rsyslogimfile 插件在 没有 的情况下工作 任何真正的成功。

这里有用OS版本信息:

# cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)

这里是 Rsyslog 版本信息:

# rsyslogd -v
rsyslogd 7.4.7, compiled with:
        FEATURE_REGEXP:                         Yes
        FEATURE_LARGEFILE:                      No
        GSSAPI Kerberos 5 support:              Yes
        FEATURE_DEBUG (debug build, slow code): No
        32bit Atomic operations supported:      Yes
        64bit Atomic operations supported:      Yes
        Runtime Instrumentation (slow code):    No
        uuid support:                           Yes

See http://www.rsyslog.com for more information.

我尝试了 both legacyRainerScript 格式的配置。 可悲的是,None 对我有用。我一定是做错了什么 但我根本无法决定它可能是什么。

这是我实际的 testing 配置(在 RainerScript 中, 我测试的前 legacy 版本在含义上完全相同):

# cat /etc/rsyslog.conf
global(
    workDirectory = "/tmp"
) 

module(
    load = "imuxsock"
)

module(
    load = "imjournal"
    stateFile = "journal.state"
)

module(
    load = "imfile"
    pollingInterval = "10"
)

ruleset(name = "test-ruleset") {
    if $syslogtag contains "test-syslogtag" then {
        action(
            type = "omfile"
            file = "/tmp/test-file.log"
        )
        stop
    }
}

input(
    type = "imfile"
    tag = "test-syslogtag"
    stateFile = "test-input.state"
    facility = "daemon"
    severity = "debug"
    file = "/tmp/test-input.in"
    ruleset = "test-ruleset"
)

if prifilt("*.*") then {
    action(
        type = "omfile"
        file = "/tmp/rsyslog-testing.log"
    )
}

No 警告和错误都不会由 Rsyslog 产生 配置,但 /tmp/test-input.in 文件中也没有任何内容 复制到 /tmp/test-file.log.

(我也仔细检查了 /var/log/audit/audit.log,当然,还有...... 没有什么可疑之处。对正在发生的事情感到绝望,我也 尝试 setenforce 0 完全关闭 SELinux 并重新启动 Rsyslog 之后。它没有帮助所以问题的根本原因 可能不是 SELinux 相关的问题。)

此外,test-input.state 文件已在 全局 中正确创建 workDirectory 路径(/tmp 在这个 testing 案例中)。我也试过 标准路径(登录 /var/log,状态文件 /var/lib/rsyslog) 尽管所有相关文件都已正确创建,但它也不起作用。

奇怪的是:如果我填充 即使在 Rsyslog 重新启动后,输入带有一些测试数据的日志文件 # systemctl restart rsyslog(它应该默认更新状态文件)。

只是指出:imjournalimuxsock 插件可以正常工作并正确填充后备日志文件 /tmp/rsyslog-testing.log。还 使用 -D and/or -d 选项在前台手动 运行 Rsyslog 没有帮助我澄清为什么 imfile 插件不起作用 在这个特定配置中对我来说。

那么,请问可以吗

  1. 检查我的RainerScript语法是否有明显错误(我猜没有),
  2. 给我一些 working imfile 插件配置 EL7?

非常感谢。

--
mjf

经过一些 小的 更改,它终于开始正常工作了。我觉得 问题的主要原因 在我的案例中 一定是我在 /tmp 目录,其中 Rsyslog 对某些人来说似乎无法正常工作 CentOS 7.

上的原因

(可能 /tmp 文件系统命名空间 填充,甚至 尽管 Systemd 选项 PrivateTmp 未设置为 true Rsyslog 单元文件和此选项 应该 设置为 false 根据 Systemd 手册页的默认设置?这是极不可能的,但 我还没有设法深入研究它。如果我发现了, 我会更新这个答案。)

另一个 次要的 原因可能是不正确的过滤器写入 RainerScript(我的真实测试实例包含一个 可怕的错字 我 简直被忽视了)。所以这是结果 testing 配置 对我来说就像魅力。

# cat /etc/rsyslog.conf
global(
    workDirectory = "/var/lib/rsyslog"
)

module(
    load = "imuxsock"
)

module(
    load = "imjournal"
    stateFile = "journal.state"
)

module(
    load = "imfile"
    pollingInterval = "10"
)

ruleset(name = "test-ruleset") {
    if $programname == "test-syslogtag" then {
        action(
            type = "omfile"
            file = "/var/log/test-file.log"
        )
        stop
    }
}

input(
    type = "imfile"
    tag = "test-syslogtag:"
    stateFile = "test-input.state"
    facility = "daemon"
    severity = "debug"
    file = "/var/log/test-input.in"
    ruleset = "test-ruleset"
)

if prifilt("*.*") then {
    action(
        type = "omfile"
        file = "/var/log/rsyslog-testing.log"
    )
}

给不知道的人一点提示 - $syslogtag$programname 好像是近亲:$syslogtag := $programname ":"。 您可以轻松找出可以匹配的所有 $ 前缀变量 通过使用已编译的 RSYSLOG_DebugFormat 输出模板。

希望对您有所帮助。

--
mjf