用LogStash解析HTTP URL参数时,如何解决“检测到模棱两可的现场参考”



,所以我一直在使用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中获得参数,包括feefee[]之类的内容,允许我捕获的值作为数组和字符串传递。而且它一直很棒!到目前为止。

在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。

最新更新