Apache 如何走动“;检测到不明确的字段引用”;使用Logstash解析HTTP URL参数时

Apache 如何走动“;检测到不明确的字段引用”;使用Logstash解析HTTP URL参数时,apache,get,logstash,Apache,Get,Logstash,所以我一直在使用Logstash解析Apache访问日志。目前,我正在使用一些过滤器来处理logstash6.7.x(以及更早版本)的问题,但我想升级到logstash7.x 我在Logstash 6.7.x中看到的一个警告似乎导致了一个彻底的故障,出现了一个“异常”,使我的过滤器变得无用 我在Logstash 6.7.0中得到的警告如下: 2019-05-13T10:57:09,541][WARN ][org.logstash.FieldReference] Detected ambiguou

所以我一直在使用Logstash解析Apache访问日志。目前,我正在使用一些过滤器来处理logstash6.7.x(以及更早版本)的问题,但我想升级到logstash7.x

我在Logstash 6.7.x中看到的一个警告似乎导致了一个彻底的故障,出现了一个“异常”,使我的过滤器变得无用

我在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_"
}
remove_char_key => "\[\]"
kv {
  source => "request"
  field_split => "&?"
  allow_duplicate_values => false
  remove_char_key => "\[\]"
  include_keys => [ "fee", "fie", "foe", "fum" ]
  prefix => "abc_"
}
是的,看起来有点多余,但是如果您知道URL中的GET参数,包括
fee
fee[]
之类的内容,请允许我捕获作为数组和字符串传递的值。它一直工作得很好!直到现在

在Logstash 7.x中,我没有得到警告,而是得到以下信息:

Exception while parsing KV {:exception=>"Invalid FieldReference: `fee[]`"}
好吧,真臭。这基本上意味着我的
fee[]
key include失败。现在我的数据解析关闭了,因为我需要考虑在此过程中作为
fee
以及
fee[]
发送的值

从Logstash 6.7.x中读取该警告似乎清楚地表明,
fee[]
将被解释为
[fee]
,但这完全不是我所需要的,因为GET-URL参数并不真正分配
fee[0]
fee[1]
fee[2]
等的数组值;对于基于用户输入的项目,这些值是相当任意的


那么我该怎么做才能有效地解决这个问题呢?

好的,我在Elasticsearch官方网站上读到了这个问题。这让我知道了哪些是有用的……但只证实了我所说的
fee[]
将被解释为
[fee]
,这对我不起作用

因此,我回顾了我的代码和字段选项,并意识到出于我的目的,我做的都是错的:我不应该有两行代码——这是多余的,显然不是理想的——我应该用它来摆脱方括号,如下所示:

kv {
  source => "request"
  field_split => "&?"
  allow_duplicate_values => false
  include_keys => [ "fee", "fie", "foe", "fum" ]
  include_keys => [ "fee[]", "fie[]", "foe[]", "fum[]" ]
  prefix => "abc_"
}
remove_char_key => "\[\]"
kv {
  source => "request"
  field_split => "&?"
  allow_duplicate_values => false
  remove_char_key => "\[\]"
  include_keys => [ "fee", "fie", "foe", "fum" ]
  prefix => "abc_"
}
并集成到我的
kv
过滤器中,它将如下所示:

kv {
  source => "request"
  field_split => "&?"
  allow_duplicate_values => false
  include_keys => [ "fee", "fie", "foe", "fum" ]
  include_keys => [ "fee[]", "fie[]", "foe[]", "fum[]" ]
  prefix => "abc_"
}
remove_char_key => "\[\]"
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