忽略 syslog-ng 中的转发器 IP

忽略 syslog-ng 中的转发器 IP

我们从无法控制的转发器获取 syslog-ng 反馈。

问题是他们使用的是旧版本 (RHEL 6),尽管他们将 keep_hostnames 设置为“yes”(将 chain_hostnames 设置为“no”),但还是不起作用。他们的 feed 仍然将中继的 IP 和时间戳附加到消息中。

除了为这个单一输入创建一个全局过滤器来撕掉那个领先的 IP 和时间戳之外,我不知道还有其他方法可以做到这一点。

有人有什么建议吗?我很惊讶我无法告诉我的 syslog-ng 忽略所有附加的中继链。

答案1

我的解决方案并不吸引人,但确实有效。如果有人知道更好的方法,我很乐意听取。

这是我所做的。因此,在这种情况下,我试图过滤掉 IIS 日志(s_net 只是监听端口 514 的 tcp/udp)。因此,以下是我的 iis.conf 文件中的内容,位于 conf.d 内

parser p_iis_pattern_db {
    db_parser(file("/etc/syslog-ng/patterndb.d/strip_header.xml"));
};

filter f_iis {
    match("iis", value(".classifier.class"));
};

rewrite r_iis {
    set("${real_sender}", value("HOST"));
    set("iis", value("PROGRAM"));
};

destination d_iis {
    file("/nfs/syslog/iis/$YEAR/$MONTH/$DAY/${real_sender}/$YEAR-$MONTH-$DAY-$HOUR-${real_sender}-$PROGRAM.log"
        template("${orig_sender}${msg}\n"));
};

log {
    source(s_net);
    parser(p_iis_pattern_db);
    filter(f_iis);
    rewrite(r_iis);
    destination(d_iis);
    flags(final);
};

然后,我在 patterndb.d(strip_header.xml)中有一个模式文件,它看起来像这样:

<patterndb version='3' pub_date='2017-02-07'>
  <ruleset name='strip_sender' id='strip_leading_sender'>
    <rules>
      <rule id='iis' class='iis'>
        <patterns>
          <pattern>@ESTRING:datestamp: @@IPv4:real_sender@ iis - - - @ANYSTRING:msg@</pattern>
        </patterns>
      </rule>
    </rules>
  </ruleset>
</patterndb>

我更愿意根据 MA​​CRO 值而不是消息进行过滤,因为我认为这可能相当昂贵;它必须检查每个包的消息。由于数据来自运行旧版本 syslog-ng 的中继,我在该中继上执行了数据的出站标记,并且 keep-hostname/chain-hostname 选项不起作用。

我的另一个担心是,当我开始添加非中继源时,这会很快变得混乱。我可能必须做整件事,以某种方式命名 conf 文件,以确保它们以正确的顺序执行,以节省 CPU 周期(是按字母顺序吗?)。

相关内容