0

我正在就 syslog-NG 的问题与您联系。我们的一些设备(主要是 HP 交换机和 SAN)正在发送似乎不遵守 syslog RFC 5424 的 syslog 消息。

举几个例子:

如果我嗅探服务器的网络接口,我们可以看到这些“错误”消息(如您​​所见,在 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));
};

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

感谢和问候,

4

1 回答 1

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中没有任何内容:(

于 2017-03-23T16:52:37.153 回答