无法在syslog-ng中过滤格式错误的消息

时间:2017-03-09 10:15:56

标签: switch-statement syslog syslog-ng san

我正在就syslog-NG的问题与您联系。 我们的一些设备(主要是惠普交换机和SAN)正在发送不符合系统日志RFC 5424的系统日志消息。

给你举几个例子:

如果我嗅探服务器的网络接口,我们可以看到这些“错误”的消息(正如你所看到的,在PRI之后,我们可以看到PROGRAM,然后用逗号分隔时区和字段。简而言之,混合字段,缺少字段等,而不是标准的系统日志消息):

<190>raslogd: 2017/03/08-16:03:20, [SEC-1203], 53642, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4

因此,我目前无法过滤这些消息。 我试图定义一个常规过滤器,并尝试打印MSGHDR,MSG,PRI等字段..但看不到任何东西。

过滤此消息的唯一方法是仅定义外部接口,将文件作为输出,不带任何模板。

例如,如果我做这样的过滤器:

destination d_INCOMING_ALL   { file("/app/syslog-ng/logs/incoming_all.log"); };

log {
  source(s_EXTERNAL);
  destination(d_INCOMING_ALL);
};

我可以在日志文件中看到消息,但是格式化了,不知何故(我想syslog-NG会重新格式化它们):

[root@xxxxxxxxxxxx logs]# grep -i cswc incoming_all.log
Mar  9 09:44:20 cswc-mo8x-hpsan01 raslogd: 2017/03/09-08:34:50, [SEC-1203], 53647, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4
[root@xm1p1034vmo logs]#

问题是我不能像这样过滤这些消息(我们从超过1000个设备接收日志) 在那里,我需要过滤来自这些设备的消息! 我能做到的唯一方法是在主机名(cswc- )或程序名称(raslogd

所以我尝试通过向该文件添加模板来显示字段,例如:

destination d_test { 
    file ("/app/syslog-ng/logs/test_olivier.log" 
    template("pri=${priority} date=${ISODATE} host=${HOST} program=${PROGRAM} message=${MSG}\n") 
    ); 
};

但没有任何作用,没有显示任何内容。 我尝试了所有领域,MSG,MESSAGE,MSGHDR等。无法管理做任何显示。 唯一可行的是没有过滤器或模板的解析。

当然,如果我尝试了所有类型的过滤器,如下所示,它不起作用(因为字段是混合的):

filter f_is_SAN     {
    host("cswc.*" flags(ignore-case));
};

同样的:

filter f_is_SAN     {
    match(".*cswc.*" flags(ignore-case));
};

有关如何为来自这些设备的这些消息创建过滤器的任何提示(在主机名或程序名上)?

感谢 的问候,

1 个答案:

答案 0 :(得分:0)

感谢罗伯特,我尝试过像这样的单一路口,它的确有效! (即使没有连接点也能正常工作) 不幸的是,我的其他过滤器不再工作了(我只是在这里显示1,但我有20多个,原始文件要大得多)

我们不能使用相同的端口侦听两个源,但是使用不同的标志? :(

source s_EXTERNAL {
    udp();
};

source s_EXTERNAL_NOPARSE {
    udp(flags(no-parse) persist-name('noparse'));
};

destination d_INCOMING_ALL { file("/app/syslog-ng/logs/incoming_all.log"); };
destination d_OUTGOING_ISERIES   { file("/app/syslog-ng/logs/outgoing_iseries.log"); };
destination d_olivier2 { file ("/app/syslog-ng/logs/test_olivier2.log" template("host=${HOST} message=${MESSAGE}\n") ); };

filter f_is_iSeries {
  match ("PowerTech.*Interact" value("MESSAGE") flags(ignore-case));
};

filter f_is_Network     {
  host("cswc.*" flags(ignore-case))
  or program("raslogd" flags(ignore-case));
};

# -------- not working anymore
log {
 source(s_EXTERNAL);
 filter(f_is_iSeries);
 destination(d_OUTGOING_ISERIES);
 flags(final);
};

# ------- working now
log {
 source(s_EXTERNAL_NOPARSE);
 junction {
    channel {
            filter(f_is_Network);
    };
 };
 destination(d_olivier2);
};

我现在可以在测试d_olivier2 dest中看到这个日志:

[root@xm3p1034vmo etc]# cat ../logs/test_olivier2.log
host=cswc-mo8x-hpsan01 message=<190>raslogd: 2017/03/23-16:29:44, [SEC-1203], 53656, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4

/app/syslog-ng/logs/outgoing_iseries.log 中没有:(