rsyslogd v3.xx 意外关闭到命名管道目标的写入连接

rsyslogd v3.xx 意外关闭到命名管道目标的写入连接

我已配置 rsyslog 将某些日志消息转发到命名管道/tmp/logger.pipe。然后我有一个单独的进程从命名管道读取数据。相关部分来自/etc/rsyslog.conf

# Remote Logging (silly conditional rule needed for specific logging scenario)
$template RFC5424Format,"<%PRI%>1 %timegenerated:1:10:date-rfc3339%T%timegenerated:12:19:date-rfc3339%.%timegenerated:21:26:date-rfc3339%Z %HOSTNAME% - - -%msg%\n"
if ($msg contains 'remote="true"') then /tmp/logger.pipe;RFC5424Format

/tmp/logger.pipe 的权限

prwxrwxrwx 1 ftp root 

我正在将此应用程序部署到两台不同的机器上。一台机器配备 rsyslog v3.xx,另一台机器配备 v5.xx

在此输入图像描述

在此输入图像描述

该应用程序在使用 rsyslog v5.xx 的计算机上运行良好,但是,我在使用 rsyslog v3.xx 的计算机上遇到奇怪的行为具体来说:

  1. rsyslogd 有时需要很长时间才能在初始启动时启动(在我添加新规则之前非常快)。
  2. 当进程读取logger.pipe重新启动时,rsyslogd 似乎在侦听进程恢复后停止将数据写入命名管道。解决此问题的唯一方法是手动重新启动 rsyslogd

在使用命名管道时,我缺少 rsyslog 配置的一些技巧吗?我可能忽略的其他权限问题吗?我对该应用程序充满信心,因为它在 v5.xx rsyslog 版本中运行得非常稳定。不幸的是,我无法在遇到问题的机器上更新 v3.xx 版本。

有什么想法吗?

更新:我可能已经诊断出这个问题 - 这似乎是一个问题,如果没有读者,rsyslogd 会关闭到管道的写入连接。但是,读取器应用程序使用 fopen(),它会阻塞,直到出现相应的写入器为止。

由于某种原因,这在 rsyslog v5.xx 上不是问题:

  1. rsyslogd 和 logger.out 成功打开管道的初始状态

在此输入图像描述

  1. 在 _logger.out 上重新启动问题,rsyslogd 仍然有对管道的写入打开

在此输入图像描述

  1. _logger.out 恢复并且一切再次正常运行

但这种行为在 rsyslog v3.xx 上有所不同:

  1. rsyslogd 和 logger.out 成功打开管道的初始状态

在此输入图像描述

  1. 在 _logger.out 上重新启动问题,rsyslogd 由于某种原因关闭了与管道的连接

在此输入图像描述

答案1

从 rsyslog 文档来看,目标应该包含一个管道符号。此修改解决了我的问题,即使读取器关闭,rsyslog 也会保持与命名管道的打开连接。

我无法解释为什么这只是 rsyslog v3.xx 上的问题。

在此输入图像描述

相关内容