Rsyslog 的 imfile 插件在 CentOS 7 上不起作用?

mjf*_*mjf 5 logging plugins file rsyslog centos7

我试图让Rsyslogimfile插件正常工作,但没有取得 任何真正的成功。

以下是有用的操作系统版本信息:

# cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
Run Code Online (Sandbox Code Playgroud)

这是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.
Run Code Online (Sandbox Code Playgroud)

我尝试了传统 格式RainerScript格式的配置。可悲的是,它们都不适合我。我肯定做了一些完全错误的事情,但我根本无法决定它可能是什么。

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

# 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"
    )
}
Run Code Online (Sandbox Code Playgroud)

使用上述配置的Rsyslog不会产生警告或错误,但/tmp/test-input.in文件中的任何内容也不会复制到/tmp/test-file.log.

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

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

奇怪的是:如果我用一些测试数据填充输入日志文件,即使在Rsyslog重新启动 后,我也看不到状态文件中的任何更改# systemctl restart rsyslog(默认情况下它应该更新状态文件)。

只是指出:imjournalimuxsock插件可以正常工作并正确填充后备日志文件/tmp/rsyslog-testing.log。另外,使用和/或选项在前台手动运行Rsyslog并没有帮助我弄清楚为什么该插件在这个特定配置中对我不起作用。-D-dimfile

那么,请你

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

非常感谢。

--
米杰夫

mjf*_*mjf 4

经过一些小的改变,它终于开始正常工作了。我认为在我的情况下问题的主要原因一定是我在Rsyslog由于某种原因在CentOS 7上似乎无法正常工作的/tmp目录中进行测试。

(即使Rsyslog单元文件中未设置Systemd选项,也可能由文件系统命名空间/tmp填充,并且根据Systemd默认情况下设置此选项PrivateTmptruefalse?这是极不可能的,但是我还没有设法进一步深入研究它。如果我找到了,我会更新这个答案。)

另一个次要原因可能是用 RainerScript编写的过滤器不正确(我的真实测试实例包含一个我只是忽略的可怕的拼写错误)。所以这是最终的测试配置,对我来说很有吸引力。

# 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"
    )
}
Run Code Online (Sandbox Code Playgroud)

给那些不知道的人一个小提示 - the$syslogtag和 the $programname似乎是近亲:$syslogtag := $programname ":"$您可以使用RSYSLOG_DebugFormat已编译的输出模板轻松找到可匹配的所有前缀变量。

我希望它有帮助。

--
米杰夫