【问题标题】:unable to filter badly-formatted messages in syslog-ng无法过滤 syslog-ng 中格式错误的消息
【发布时间】:2017-03-24 01:15:44
【问题描述】:

我正在就我遇到的 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));
};

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

谢谢 问候,

【问题讨论】:

  • 嗨,尝试将有问题的消息发送到 syslog-ng 服务器上的单独端口,并在源中使用 no-parse 标志: source { network(ip(X.X.X.X) port(X)传输(“tcp”)标志(无解析)); };这将导致 syslog-ng 在消息中添加一个标头,并在 $MESSAGE 宏中包含来自消息的所有内容(包括原始标头),并将 HOST 字段设置为发送者的 IP 地址。为避免使用单独的端口,请使用联结:balabit.com/documents/syslog-ng-ose-latest-guides/en/…
  • 嗨罗伯特,感谢您的提示,我会尝试并给您反馈
  • mmh 我不能使用其他端口,HP 交换机不支持它:(
  • 我目前只使用 udp();如果我使用 udp(flags(no-parse)); 作为来源相反,它会起作用吗?它会阻止我所有其他过滤器吗? (或更改消息行为中的某些内容?)
  • 它会起作用,但会杀死您为来自该来源的消息而拥有的所有其他过滤器。如果此类交换机是唯一使用 UDP 的设备,那么这不是问题(您可以在同一端口上有两个源,一个用于 UDP,一个用于 TCP。如果还有其他设备也使用 UDP,那么唯一的选择我能想到的就是在你的syslog-ng配置中使用junctions。

标签: switch-statement syslog syslog-ng san


【解决方案1】:

mmh 谢谢罗伯特,我试过像这样的单一路口,它有效! (即使没有交界处也能工作) 不幸的是,我的其他过滤器不再起作用(我在这里只显示 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 中没有任何内容 :(

【讨论】:

  • 您好,您不能在同一个端口上有两个源(除非一个源使用 udp,另一个使用 tcp)。连接点是为了解决这个问题而开发的,关键是其中有多个通道,就像文档中的示例一样。现在您只有一个通道来处理有问题的日志。添加另一个带有过滤器的通道,用于选择其他日志,并包含系统日志解析器以正确解析这些消息。
  • 好的,我明白了,谢谢。但问题是,如果我添加第二个通道来处理好日志,我将不得不重写我想的所有过滤器?因为消息将由系统日志重新格式化?
  • 不,系统日志解析器首先使过滤器起作用。默认情况下,syslog-ng 使用 syslog-parser 解析每条传入的日志消息。问题是您的交换机发送格式错误的消息,这就是为什么您需要所有这些配置技巧(禁用解析、分离好日志和坏日志以及解析好日志)。
猜你喜欢
  • 2016-02-03
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多