如何在 rsyslog (RainerScript) 中设置和使用常量?

如何在 rsyslog (RainerScript) 中设置和使用常量?

我正在编写一个应用程序,其中包含一个 rsyslog 配置,该配置放置在/etc/rsyslog.d/.

某些日志消息应该重定向到命名管道,如下所示:

template (name="my_fmt" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")
if ( ... ) then {
    action(type="ompipe" Pipe="/tmp/SITENAME/pipe" Template="my_fmt")
    stop
}

这按预期工作。不幸的是,上述管道名称中的 SITENAME 事先是未知的,必须由客户配置。

我可以写这样的指令“在文件中查找任何出现的单词 SITENAME 并将其替换为您特定的 $sitename”甚至发出sed命令,但我不喜欢这种方法。相反,我想在文件的开头设置一个常量,并在需要的地方使用它。就像这样:

set ACTUAL_SITE = "foo";

template (name="my_fmt" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")
if ( ... ) then {
    action(type="ompipe" Pipe="/tmp/$ACTUAL_SITE/pipe" Template="my_fmt")
    stop
}

我怎样才能做到这一点?我(想我)尝试了$,%…%和的所有变体,但没有一个%$…%起作用Pipe="…"ACTUAL_SITE初始安装后,的值不会改变。我只是想为客户简化配置并说“将 ACTUAL_SITE 的值设置为您的实际网站名称”不要让他摆弄文件的其余部分。

答案1

过时的rsyslog版本(8.32 及更低版本)不支持您尝试执行的操作。

在当前的 rsyslog 版本中,您可以通过反引号常量来执行此操作,请参阅这里

为此:

  • 在 rsyslog 启动之前定义一个环境变量(或写入一个文件),通常是在目标计算机上安装时将其添加到启动脚本中。我们将此称为 SITE_PIPE 并执行以下操作:

    export SITEPIPE="/tmp/mysite/pipe"
    
  • 然后,使用反引号:

    action(type="ompipe" Pipe=`echo $SITEPIPE` Template="my_fmt")
    

如果你写一个文件,你可以使用这个结构:

action(type="ompipe" Pipe=`cat pipenamefile` Template="my_fmt")

所有这些对于 bash 的工作原理应该很熟悉。

可以在我们的 docker 容器中找到实际的示例。这里链接到容器的rsyslog.conf

但您也可以查看其余的 Docker 定义以了解全貌。

相关内容