将一些系统日志消息路由到另一台服务器(通过 UDP)
route some syslog messages to another server (via UDP)
更新:我用词太多,不清楚我真正想要达到的目标。我现在编辑文本以使我的意图更清楚 - 和 提供我自己的答案(见下文)因为我成功地为我解决了这个问题。
TL;DR:
归根结底,问题是:
我如何配置系统日志,以便一些消息被路由到另一个处理它们的服务?
字数较多的问题(如果你有时间的话;)):
我有一个集成测试场景,其中 Raspi 将编排和执行测试。 Raspi“从外部”刺激被测设备 (DUT) 并监听 DUT 的任何预期反应。因此,一个典型的集成测试场景(黑盒测试)。
+-----+ +-----+
| RPi |---| DUT |
+-----+ +-----+
要测试的功能之一是 DUT 是否会正确地向远程 rsyslog 服务器发出 syslog 消息。
所以我决定 Raspi 应该是“远程 rsyslog 服务器”(a.k.a。syslog 接收器),因此可以测试 DUT 是否会发送它预期的所有 syslog 消息。
现在如何在 Raspi 上断言接收到的系统日志消息?我可以简单地浏览 Raspi 上的系统日志消息,并期望找到来自 DUT 的消息——以及来自 Raspi 本身的许多其他“标准”系统日志消息。
- 在设置测试时 运行,添加(动态地?)另一个 rsyslog“规则”到 rsyslog 服务器,这样消息也被中继到另一个“东西”(另一个消费 rsyslog 服务器仅用于测试断言目的)
- “其他东西”(rsyslog 消费者)随后将在测试期间接收所有 rsyslog 消息,并可以检查日志断言(执行测试并检查结果)
这样测试 运行ner 就不必解析由“普通”rsyslog 服务器写入的日志文件。
测试后运行,我希望“其他东西”停止监听,“正常”rsyslog 配置恢复正常。
大致思路是这样的。您认为这是可行的(而且不太复杂)的方法吗?
“另一件事”将是一个 Python 脚本,因为整个测试编排都是用 Python 编写的。因此,也许 Python rsyslog 服务器侦听特殊端口,并另外配置“正常”服务器 rsyslog,以便消息也转发给此 Python 消费者。
如果可以将“普通”rsyslog 服务器配置为仅将这些消息中继到满足特定条件的“其他东西”,那就更好了。
你认为我应该坚持解析日志文件还是这看起来是个好主意?
使用系统日志,您可以使用带有 @
符号和 IP 地址的目标 - 然后这些消息将通过 UDP 转发。所以你所要做的就是决定系统日志设施、优先级和其他标准(例如源 IP)并添加你的 rsyslog.conf 例如:
local7.info @127.0.0.1:10514
因此,所有匹配的系统日志消息都将通过 UDP 发送。如果没有进程在该端口上侦听,则不会发生任何事情,因此 rsyslog 系统没有问题。
就是这样,我写的所有其他东西都试图描述这个的用例。基本上,我永久地配置了这个 rsyslog 设置(因为当没有 UDP 服务器使用消息时它没有害处)。当集成测试启动时,UDP 服务器启动并在测试期间收集所有系统日志消息 – 仅那些感兴趣的(这是系统日志规则必须确保的 - 在上面例如一个简单的 local7.info
,但它可能更复杂)。这就是我努力实现的目标,也是我做到的。
更新:我用词太多,不清楚我真正想要达到的目标。我现在编辑文本以使我的意图更清楚 - 和 提供我自己的答案(见下文)因为我成功地为我解决了这个问题。
TL;DR:
归根结底,问题是:
我如何配置系统日志,以便一些消息被路由到另一个处理它们的服务?
字数较多的问题(如果你有时间的话;)):
我有一个集成测试场景,其中 Raspi 将编排和执行测试。 Raspi“从外部”刺激被测设备 (DUT) 并监听 DUT 的任何预期反应。因此,一个典型的集成测试场景(黑盒测试)。
+-----+ +-----+
| RPi |---| DUT |
+-----+ +-----+
要测试的功能之一是 DUT 是否会正确地向远程 rsyslog 服务器发出 syslog 消息。 所以我决定 Raspi 应该是“远程 rsyslog 服务器”(a.k.a。syslog 接收器),因此可以测试 DUT 是否会发送它预期的所有 syslog 消息。 现在如何在 Raspi 上断言接收到的系统日志消息?我可以简单地浏览 Raspi 上的系统日志消息,并期望找到来自 DUT 的消息——以及来自 Raspi 本身的许多其他“标准”系统日志消息。
- 在设置测试时 运行,添加(动态地?)另一个 rsyslog“规则”到 rsyslog 服务器,这样消息也被中继到另一个“东西”(另一个消费 rsyslog 服务器仅用于测试断言目的)
- “其他东西”(rsyslog 消费者)随后将在测试期间接收所有 rsyslog 消息,并可以检查日志断言(执行测试并检查结果)
这样测试 运行ner 就不必解析由“普通”rsyslog 服务器写入的日志文件。
测试后运行,我希望“其他东西”停止监听,“正常”rsyslog 配置恢复正常。
大致思路是这样的。您认为这是可行的(而且不太复杂)的方法吗?
“另一件事”将是一个 Python 脚本,因为整个测试编排都是用 Python 编写的。因此,也许 Python rsyslog 服务器侦听特殊端口,并另外配置“正常”服务器 rsyslog,以便消息也转发给此 Python 消费者。
如果可以将“普通”rsyslog 服务器配置为仅将这些消息中继到满足特定条件的“其他东西”,那就更好了。
你认为我应该坚持解析日志文件还是这看起来是个好主意?
使用系统日志,您可以使用带有 @
符号和 IP 地址的目标 - 然后这些消息将通过 UDP 转发。所以你所要做的就是决定系统日志设施、优先级和其他标准(例如源 IP)并添加你的 rsyslog.conf 例如:
local7.info @127.0.0.1:10514
因此,所有匹配的系统日志消息都将通过 UDP 发送。如果没有进程在该端口上侦听,则不会发生任何事情,因此 rsyslog 系统没有问题。
就是这样,我写的所有其他东西都试图描述这个的用例。基本上,我永久地配置了这个 rsyslog 设置(因为当没有 UDP 服务器使用消息时它没有害处)。当集成测试启动时,UDP 服务器启动并在测试期间收集所有系统日志消息 – 仅那些感兴趣的(这是系统日志规则必须确保的 - 在上面例如一个简单的 local7.info
,但它可能更复杂)。这就是我努力实现的目标,也是我做到的。