Rsyslog的imfile插件无法在CentOS 7上运行?

时间:2015-12-18 16:00:34

标签: file logging plugins centos7 rsyslog

我正在尝试 Rsyslog imfile插件 任何真正的成功。

这是有用的 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.

我尝试了 传统 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"
    )
}
上面的 Rsyslog

没有警告或错误 配置,但/tmp/test-input.in文件中没有任何内容 被复制到/tmp/test-file.log

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

此外,在{em>全局中正确创建了test-input.state文件 此{em>测试案例中的workDirectory路径(/tmp)。我也试过了 标准路径(登录/var/log/var/lib/rsyslog中的状态文件) 虽然所有相关文件都是正确创建的,但它也不起作用。

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

要指出:imjournalimuxsock插件正常工作并填充回退日志文件/tmp/rsyslog-testing.log。也 使用-D和/或-d选项在前台手动运行 Rsyslog 没有帮助我澄清为什么imfile插件不起作用 对于我这个特殊的配置。

那么,你能不能

  1. 检查我的 RainerScript 语法是否没有明显的错误(我猜没有这样的错误),
  2. EL7 上展示一些工作 imfile插件配置?
  3. 非常感谢。

    -
    MJF

1 个答案:

答案 0 :(得分:2)

通过一些次要更改,它最终开始正常工作。我觉得 问题的主要根本原因在我的情况下一定是我在测试它 其中 Rsyslog 似乎无法正常工作的/tmp目录 CentOS 7上的原因

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

其他次要原因可能是写入的错误过滤器 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"
    )
}

对那些不了解它的人有点暗示 - $syslogtag和。{ $programname似乎是近亲:$syslogtag := $programname ":"。 您可以轻松找到可以匹配的所有$前缀变量 使用已编译的RSYSLOG_DebugFormat输出模板。

我希望它有所帮助。

-
MJF