Graylog:来自pipe道规则的字段不会显示在search数据中

我尝试了Graylog的系统日志和Snort警报。 我已经按照这里的例子将我的snort警报放入了Graylog,然后为另一个IDS日志源添加了另一个Stream,Pipeline和Rule。 我基本上复制了Snort示例,并更改了正则expression式以从新的日志源中提取相关的字段。 当我从search选项卡select一条消息,然后select“testingstream”,新的正则expression式testing确定。 当从Graylog顶部的Streams菜单项中select时,消息也会显示在我的新stream下。

在Pipeline规则中,我使用set_field()函数从正则expression式分配匹配组的值。 我在规则中使用set_field()有九个字段,但是没有一个显示在search数据中。 为什么是这样? 首先需要像GELF例子那样使用add_field() ? 我假设set_field()自动做到这一点,因为这是上面的链接snort示例如何工作。 附上我的pipe道规则,下面是我的IDropsstream在Graylog中附加。

 rule "Extract IDropS fields" when has_field("message") then let m = regex("^([az]+)\\s.*(TCP|UDP|ICMP)\\s([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}):(\\d{1,5})\\s([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}):(\\d{1,5}).*SnortSid.*:([0-9]+):([0-9]+)\\s(.*)$", to_string($message.message)); set_field("snort_alert", false); set_field("sd_host", m["0"]); set_field("sd_proto", m["1"]); set_field("sd_src", m["2"]); set_field("sd_sport", m["3"]); set_field("sd_dst", m["4"]); set_field("sd_dport", m["5"]); set_field("sd_sid", (m["6"])); set_field("sd_rev", m["7"]); set_field("sd_desc", m["8"]); end 

问题可能是您需要更改Configurations屏幕下的Message Processors Configuration顺序。

默认情况下,它是GeoIP Processor > Pipeline Processor > Message Filter Chain

如Greylog官方文档中有关 “configuration消息处理器”下的pipe道使用情况的文档所述,您需要将其更改为Message Filter Chain > Pipeline Processor > GeoIP Processor

我忘了在新安装的2.2 Graylog中,在2.1下工作了几个星期后, 症状与你的相同,snortstream规则和pipe道规则匹配,模拟工作,但没有实际设置的字段,没有错误的迹象,但奇怪的是,如果我把pipe道连接到默认的“所有消息”stream,我不想要。 现在我已经改变了这个消息处理器顺序snortpipe道按预期工作。

我不知道这是否是正确的方法,但我将所有的pipe道规则添加到默认stream( 系统/pipe道>pipe道>默认stream>编辑连接 ..然后添加您的自定义pipe道),然后我所有的字段开始显示在search数据中。