我们有大约 9-10 台设备想要将日志直接发送到我们的 rsyslog 服务器。但是,只有 8 台本地设备 (0-7)。我们如何才能绕过这个限制?
答案1
在消息中记录应用程序名称。根据应用程序名称而不是设施进行过滤。如果您的应用程序不直接生成系统日志消息,您可以应用输出过滤器(例如sed
)来调整内容,使其看起来符合您的要求。
查看 Rsyslog 文档过滤条件了解如何配置此行为。根据该页面中的信息,下面是一个示例,说明如何将以字符串“application1”开头的消息放入/var/log/application1
:
if $msg startswith 'application1' then /var/log/application1
您还可以明确过滤程序名称,如果您的应用程序正确设置了此项:
if $programname == 'application1' then /var/log/application1
您可以在您的中执行各种复杂的过滤rsyslog.conf
;请阅读文档以获取更多信息和示例。
编辑:rsyslog
可以使用模板为每个服务器创建单独的文件。类似下面的操作应该将所有日志消息放入每个主机名的单独文件中。(这是从手册页中提取的。)
$template DynFile,"/var/log/system-%HOSTNAME%.log
*.* ?DynFile
以下类似,但不记录调试消息。它还使用连接主机名而不是消息主机名。(这是基于我开发的用于记录 Obi100 输出的内容。)
$template HostFormat,"%timegenerated% %fromhost% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$template HostFile,"/var/log/system-%fromhost%.log
if $syslogseverity < 7 then -HostFile;HostFormat
如果您有更复杂的需求,或者想了解上述内容的作用,请阅读手册页和文档。
答案2
按主机名过滤。(每个设备应有自己的主机名)。如果您愿意,可以监听多个端口并分别处理每个端口。
设施旨在处理授权、邮件、打印机、ftp 等消息类别。由于 UUCP 不再被广泛使用,因此您可能将其用于自己的用途。您的配置中可能还有其他未使用的设施。但是,您最好使用标准设施值,并按其他数据进行过滤。
有 24 个设施,因为它们是位掩码中位的名称。这使得可以在同一日志中聚合任意设施集。协议在RFC 5424。
另一个字段是严重性。通常,日志包含所有等于或高于给定严重性的日志。(更严重的优先级具有较低的值,因此正常比较小于或等于所选优先级。)但是,可以选择给定设施的消息,就像通常为收集所有设施的调试消息的调试日志所做的那样。
您可能希望将某些设施的数据汇总到同一个日志中,而不管原始设备是什么。将同一条消息记录到多个日志文件中是很常见的。