从监狱向主机发送系统日志失败

从监狱向主机发送系统日志失败

我正在尝试将日志从监狱发送到 FreeBSD 10 上的主机系统。

我认为所有设置都正确,但我无法让它工作。

直接从 Nginx 1.7 发送日志可以,但不能通过 syslog(例如 PHP-FPM)发送日志。


这是我的主人的/etc/rc.conf

syslogd_flags="-a 10.0.0.1/24:* -v -v -C"

我的主人etc/syslog.conf

+ABCD
*.=info                                         /var/log/jails/ABCD/nginx-access.log
*.=error                                        /var/log/jails/ABCD/nginx-error.log
*.*                                             /var/log/jails/ABCD/all.log

这是监狱的etc/rc.conf

syslogd_flags="-ss -v -v"

还有监狱的etc/syslog.conf

!php-fpm
*.*                                             @127.0.0.1

etc/hosts在两个系统中均已设置。


使用工具手动将日志直接发送至主机logger

使用调试功能,我可以看到监狱正在转发我手动创建的日志logger -t php-fpm

Logging to FORW 127.0.0.1

但日志从未到达主机。那里的调试器没有收到任何消息。对 Nginx 内置的 syslog 功能执行相同操作即可。

我已经尝试设置了syslogd_flags="-s -v -v"。然后我就无法再手动发送任何日志,而且情况也没有改变。

答案1

正如@citrin 提到的,这个-ss标志不是你想要的。

以下内容对我有用,在 FreeBSD 12.1 上,没有vnet配置虚拟化。

192.168.1.1 是主机的 IP。192.168.1.68
是 jail 的 IP。
确保主机和 jail 可以互相 ping 通。
确保没有防火墙规则阻止主机和 jail 之间的 UDP 端口 514。

在监狱里:

# sysrc syslogd_enable=yes
# sysrc syslogd_flags="-s -vv"
# cat /etc/syslog.conf
*.*                                             @192.168.1.1
# grep 192.168 /etc/hosts
#       192.168.0.0     -   192.168.255.255
192.168.1.68            jail
192.168.1.1             host
# service syslogd stop
# service syslogd start

在主机上:

# sysrc syslogd_enable="yes"
# sysrc syslogd_flags="-a 192.168.1.68 -vv"
# tail -4 /etc/syslog.conf

+jail
*.*                                /var/log/test-jail.log

# touch /var/log/test-jail.log
# grep 192.168 /etc/hosts
#       192.168.0.0     -   192.168.255.255
192.168.1.1             vlan3
192.168.1.68            jail
# service syslogd stop
# service syslogd start

如果这仍然不起作用,这里有一些很好的故障排除建议FreeBSD 手册页面最值得注意的是主机端开关syslogd的使用:-d

# sysrc syslogd_flags="-d -a 192.168.1.68 -vv"

这会产生大量的输出,因此请仔细阅读。

最后,远程系统日志记录有时有点麻烦,也许更高级的管理员可以在评论中添加原因。我最成功的时候是不要引用字符串中的 /etc/hosts 条目syslogd_flags。使用文字 IP 数字对我来说效果更好。这可能是由于未使用合法的完全合格域名和/或真实 DNS 名称。如果时间允许,我将探索这些可能性并更新此答案。

更新:

在设置了一些测试 DNS 条目并尝试了各种配置后,我认为之前遇到的所有困难都是由于工作仓促和/或对细节的关注不一致造成的。一旦我/etc/syslog.conf在 jail 和主机上都有了可靠的框架,以及系统日志友好的防火墙条目,我的 jail-to-host 远程日志记录似乎可以使用正确的 DNS 名称、/etc/hosts条目或原始 IP 号码进行工作。

答案2

使用-ss标志 syslogd 不打开任何套接字,即使将日志发送到其他主机也是如此。在 jail 中使用syslogd_flags="-s -b localhost"

在 jail 中配置 php-fpm 通过 unix 套接字记录到本地 syslogd,并验证来自 php-fpm 的消息是否可以由本地 syslogd 写入文件。

php-fpm.conf:

error_log = syslog;
syslog.facility = local7

/etc/syslog.conf

!*
local7.* /var/log/for-test-php.log

如果消息被写入 jail 内的日志,则用 @10.xxx 替换文件路径,其中 10.xxx 是主机的 IP 地址,可从 jail 访问。

在主机上,您可以在前台运行 syslogd 来检查是否收到消息:

service syslogd stop
syslogd -a 10.0.0.1/24:* -v -v -d
....
Ctrl+C
service syslogd start

相关内容