mjf*_*mjf 5 logging plugins file rsyslog centos7
我试图让Rsyslog的imfile插件正常工作,但没有取得
任何真正的成功。
以下是有用的操作系统版本信息:
# 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(默认情况下它应该更新状态文件)。
只是指出:imjournal和imuxsock插件可以正常工作并正确填充后备日志文件/tmp/rsyslog-testing.log。另外,使用和/或选项在前台手动运行Rsyslog并没有帮助我弄清楚为什么该插件在这个特定配置中对我不起作用。-D-dimfile
那么,请你
imfile插件配置?非常感谢。
--
米杰夫
经过一些小的改变,它终于开始正常工作了。我认为在我的情况下问题的主要原因一定是我在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已编译的输出模板轻松找到可匹配的所有前缀变量。
我希望它有帮助。
--
米杰夫
| 归档时间: |
|
| 查看次数: |
4642 次 |
| 最近记录: |