【发布时间】: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