我如何比较 ${HOST} 和 ${HOST_FROM}(或者为什么 ${HOST} != ${HOST})?

我如何比较 ${HOST} 和 ${HOST_FROM}(或者为什么 ${HOST} != ${HOST})?

我有一个设置,可以总结如下:

service --> syslog-ng relay --> syslog-ng server

syslog-ng服务器上,我将按如下方式组织日志:

/var/log/ ----> syslog-ng server local log files...
           \--> ${FROM_HOST}/ 
                 \---> Syslog-ng relay host log files...
                 \---> ${HOST}/
                        \---> Service log files...
  • syslog-ng在位于其默认位置的服务器上本地生成的日志,/var/日志
  • 在中继上生成的日志位于带有中继名称的子目录中,/var/log/${FROM_HOST}
  • 服务在其关联中继的子目录中生成的日志,/var/log/${FROM_HOST}/${HOST}

我在服务器主机上创建了以下配置syslog-ng

@version: 3.7
@include "scl.conf"

options {
    dns-cache-hosts("/etc/hosts");
    keep-hostname(yes);
    use-dns(persist_only);
};

...(removed)...

# syslog-ng server local logs, works fine.
log {
    source(local_src);
    local_file();
};

# syslog-ng relays, never matches.
log {
    source(remote_src);
    filter { host("${HOST_FROM}", type(string)); };
    local_file(subdir("${HOST_FROM}/"));
};

# Services, works fine but also matches syslog-ng relays.
log {
    source(remote_src);
    filter { not host("${HOST_FROM}", type(string)); };
    local_file(subdir("${HOST_FROM}/$(sanitize $HOST)/"));
};

有关信息local_file()是一个自定义日志块,以存储日志条目的子目录作为参数。

host()滤波器被描述为将其参数与${主机}。我的想法是用它来检查${主机}(系统日志消息的作者)和${HOST_FROM}(系统日志消息的最后一跳):

  • 如果相等,则表明该消息已由中继生成syslog-ng
  • 如果它们不同,则表明该消息是由服务生成的。

然而,测试host("${HOST_FROM}", type(string))总是失败,即使生成的路径没有显示出${主机}${HOST_FROM}(例如,给定一个名为中继,中继日志将存储在下面/var/log/therelay/therelay/(扩大/var/log/${HOST_FROM}/$(清理 $HOST)/)。

我尝试删除清理,将模式解释为正则表达式而不是原始字符串,.*在模式的开头和结尾添加正则表达式,用替换重新进行所有这些测试host("${HOST_FROM}")match("${HOST_FROM}", value(HOST))但似乎没有任何效果。

事实上,即使host("${HOST}")(比较${主机}与自身)似乎永远无法匹配。

但是,用正确的方式替换过滤器filter { host(".*"); };会强制该条目匹配。

这是预期的行为吗?我如何比较${主机}${HOST_FROM}

答案1

我不确定这是否是最好的答案所以我暂时不回答我的问题。

似乎宏在过滤函数中没有扩展,很可能是因为速度优化,因为使用“稍微慢一点”在这种情况下似乎需要特定的语法。

host("${HOST_FROM}")仅与名称为${HOST_FROM},这在正常情况下不太可能发生。

正确的测试似乎是下面定义的过滤器:

filter { "${HOST}" == "${HOST_FROM}" };

虽然这种语法可能效率较低,但我认为这是比较两个宏内容的唯一方法。

相关内容