问题描述
在 /etc/rsyslog.d
下,我创建了一个 .conf 文件。
这是文件:
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/secure
$InputFileTag securelogs:
$InputFileStateFile securelogs
$InputFileFacility local0
$InputRunFileMonitor
:syslogtag,isequal,"securelogs:" {
:msg,contains,"sshd" {
local0.* /var/log/forward_securelogs_audit.log
local0.* @@<server-ip>:514
}
stop
}
我在多台服务器上有相同的配置,但对于其中 2 台,它不起作用。
如何调试?
我尝试按照此处的说明进行操作 - https://www.rsyslog.com/how-to-use-debug-on-demand/
但是没有文件 - /etc/rc.d/init.d/rsyslog
也没有文件 - /var/run/rsyslogd.pid
0726.220297821:7f4d57c22780: Note: debug on demand turned on via configuraton file,use USR1 signal to activate.
rsyslogd 8.24.0-57.el7_9,compiled with:
PLATFORM: x86_64-redhat-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build,slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64
任何帮助将不胜感激。
解决方法
您链接的文档很旧,RedHat 和 CentOS 现在使用 systemd 来启动守护程序,因此这些文件不再存在。如果你这样做
systemctl status rsyslog
您应该看到包含类似内容的行
Active: active (running) since ...
Main PID: 738 (rsyslogd)
您可以将 USR1 信号发送到此编号进程以切换调试。在这种情况下,它将是:
sudo kill -USR1 738
默认情况下,我认为调试输出应该在 stdout 上,在我的 Fedora systemd 上,它被定向到 /dev/null
用于 rsyslogd,所以这可能无济于事。
我没有 CentOS,但它可能是类似的。
您可以使用以下命令查看 systemd 单元:
systemctl cat rsyslog
就我而言,这包括以下几行:
EnvironmentFile=-/etc/sysconfig/rsyslog
StandardOutput=null
如果是这种情况,您可以向文件 /etc/sysconfig/rsyslog
添加选项,例如:
RSYSLOG_DEBUGLOG=/tmp/rsyslogdebug
然后重新启动 rsyslogd 并尝试再次向它发出信号以切换调试。