gpt4 book ai didi

json - Logstash 索引 JSON 数组

转载 作者:行者123 更新时间:2023-12-03 23:55:51 24 4
gpt4 key购买 nike

Logstash 很棒。我可以像这样发送 JSON(多行以提高可读性):

{
"a": "one"
"b": {
"alpha":"awesome"
}
}

然后使用搜索词 b.alpha:awesome 在 kibana 中查询该行.好的。

但是我现在有一个像这样的 JSON 日志行:
{
"different":[
{
"this": "one",
"that": "uno"
},
{
"this": "two"
}
]
}

我希望能够通过类似 different.this:two 的搜索找到这一行(或 different.this:one ,或 different.that:uno )

如果我直接使用 Lucene,我会遍历 different数组,并为其中的每个散列生成一个新的搜索索引,但 Logstash 目前似乎像这样摄取该行:

different: {this: one, that: uno}, {this: two}



这不会帮助我使用 different.this 搜索日志行或 different.that .

有没有人对我可以进行的编解码器、过滤器或代码更改有任何想法以启用此功能?

最佳答案

你可以自己写filter (复制并粘贴,重命名类名,config_name 并重写filter(event) 方法)或修改当前的JSON过滤器(source 在 Github 上)

您可以在以下路径中找到 JSON 过滤器(Ruby 类)源代码 logstash-1.x.x\lib\logstash\filters命名为 json.rb . JSON 过滤器将内容解析为 JSON,如下所示

begin
# TODO(sissel): Note, this will not successfully handle json lists
# like your text is '[ 1,2,3 ]' JSON.parse gives you an array (correctly)
# which won't merge into a hash. If someone needs this, we can fix it
# later.
dest.merge!(JSON.parse(source))

# If no target, we target the root of the event object. This can allow
# you to overwrite @timestamp. If so, let's parse it as a timestamp!
if !@target && event[TIMESTAMP].is_a?(String)
# This is a hack to help folks who are mucking with @timestamp during
# their json filter. You aren't supposed to do anything with
# "@timestamp" outside of the date filter, but nobody listens... ;)
event[TIMESTAMP] = Time.parse(event[TIMESTAMP]).utc
end

filter_matched(event)
rescue => e
event.tag("_jsonparsefailure")
@logger.warn("Trouble parsing json", :source => @source,
:raw => event[@source], :exception => e)
return
end

可以修改解析过程来修改原始JSON
  json  = JSON.parse(source)
if json.is_a?(Hash)
json.each do |key, value|
if value.is_a?(Array)
value.each_with_index do |object, index|
#modify as you need
object["index"]=index
end
end
end
end
#save modified json
......
dest.merge!(json)

然后您可以修改您的配置文件以使用/您的新/修改后的 JSON 过滤器并放入 \logstash-1.x.x\lib\logstash\config
这是我的 elastic_with_json.conf带有修改 json.rb筛选
input{
stdin{

}
}filter{
json{
source => "message"
}
}output{
elasticsearch{
host=>localhost
}stdout{

}
}

如果你想使用你的新过滤器,你可以用 config_name 配置它
class LogStash::Filters::Json_index < LogStash::Filters::Base

config_name "json_index"
milestone 2
....
end

并配置它
input{
stdin{

}
}filter{
json_index{
source => "message"
}
}output{
elasticsearch{
host=>localhost
}stdout{

}
}

希望这会有所帮助。

关于json - Logstash 索引 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com