,所以我一直在使用logstash来解析apache访问日志。目前,我正在使用一些kv
过滤器使用Logstash 6.7.x(和更早(处理此操作,但想升级到Logstash7.x。
似乎我在Logstash 6.7.x中看到的警告现在导致了完全失败,并且"例外"使kv
我的过滤器无用。
我在logstash 6.7.0中得到的警告是:
2019-05-13T10:57:09,541][WARN ][org.logstash.FieldReference] Detected ambiguous Field Reference `fee[]`, which we expanded to the path `[fee]`; in a future release of Logstash, ambiguous Field References will not be expanded.
kv
过滤器看起来像这样:
kv {
source => "request"
field_split => "&?"
allow_duplicate_values => false
include_keys => [ "fee", "fie", "foe", "fum" ]
include_keys => [ "fee[]", "fie[]", "foe[]", "fum[]" ]
prefix => "abc_"
}
是的,看起来include_keys
略有冗余,但是如果您知道URL中获得参数,包括fee
和fee[]
之类的内容,允许我捕获的值作为数组和字符串传递。而且它一直很棒!到目前为止。
在logstash 7.x中,我没有得到警告,而是得到以下内容:
Exception while parsing KV {:exception=>"Invalid FieldReference: `fee[]`"}
好吧,这很臭。这基本上意味着我的fee[]
密钥包括失败。现在,我的数据解析已经关闭,因为我需要在此过程中考虑以fee
以及fee[]
发送的值。
从Logstash 6.7.x读取该警告似乎清楚地表明fee[]
将解释为[fee]
,但这完全不是我需要的,因为获得URL参数并未真正分配fee[0]
,fee[1]
和fee[2]
等的数组值。基于用户输入的项目的值相当任意。
那么我该怎么做才能有效地克服这个问题?
好吧,我在官方Elasticsearch网站上的讨论主题上阅读了此问题。它使我获得了此文档参考,该文档参考会有所帮助……但只能确认我说fee[]
时所说的内容将被解释为[fee]
,这对我不起作用。
因此,我审查了我的代码以及kv
字段选项,并意识到 - 出于我的目的,我做错了这一切:而不是有两行include_keys
,它是多余的,显然是不理想的 - 我应该使用 remove_char_key
摆脱这样的方括号:
remove_char_key => "[]"
并集成到我的kv
过滤器中,看起来像这样:
kv {
source => "request"
field_split => "&?"
allow_duplicate_values => false
remove_char_key => "[]"
include_keys => [ "fee", "fie", "foe", "fum" ]
prefix => "abc_"
}
在这些调整后的kv
过滤器与我在100%相同的期望结果和输出之前进行的基本测试。所以一切都很好!有了这个,我可以安全地升级到logstash 7.x。