rsyslogd:有什么办法可以绕过本地设施的数量?

Bel*_*dez 7 linux logging syslog rsyslog

我们有大约 9-10 个设备,我们希望将日志记录定向到我们的 rsyslog 服务器。但是,只有 8 个本地设施(0-7)。我们怎样才能绕过这个限制?

lar*_*sks 12

在您的消息中记录应用程序名称。过滤应用程序名称而不是设施。如果您的应用程序不直接生成 syslog 消息,您可以应用输出过滤器(例如sed)来调整事物以使其看起来像您想要的那样。

查看有关过滤条件的 Rsyslog 文档,了解如何配置此行为。根据该页面中的信息,这里有一个示例,说明如何将以字符串“application1”开头的消息放入/var/log/application1

if $msg startswith 'application1' then /var/log/application1
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序设置正确,您还可以对程序名称进行显式过滤:

if $programname == 'application1' then /var/log/application1
Run Code Online (Sandbox Code Playgroud)

您可以在您的rsyslog.conf; 中执行各种复杂的过滤。通读文档以获取更多信息和示例。

编辑:rsyslog可以使用模板为每个服务器创建单独的文件。类似下面的内容应该将所有日志消息放入每个主机名的单独文件中。(这是从联机帮助页中提取的。)

$template DynFile,"/var/log/system-%HOSTNAME%.log
*.*                             ?DynFile
Run Code Online (Sandbox Code Playgroud)

以下内容类似,但不记录调试消息。它还使用连接主机名而不是消息主机名。(这是基于我开发的记录 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
Run Code Online (Sandbox Code Playgroud)

如果您有更复杂的需求,或者想了解以上内容,请阅读联机帮助页和文档。