我正在尝试 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
(默认情况下应更新状态文件)。
要指出:imjournal
和imuxsock
插件正常工作并填充回退日志文件/tmp/rsyslog-testing.log
。也
使用-D
和/或-d
选项在前台手动运行 Rsyslog
没有帮助我澄清为什么imfile
插件不起作用
对于我这个特殊的配置。
那么,你能不能
imfile
插件配置?非常感谢。
-
MJF
答案 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