我在使用logstash将以下原始数据引入elasticsearch时遇到麻烦。提取了下面的原始数据,希望JSON插件可以工作,但目前不行。我没有看过其他有关json的帖子。
{
"offset": "stuff",
"results": [
{
"key": "value",
"key1": null,
"key2": null,
"key3": "true",
"key4": "value4",
"key4": [],
"key5": value5,
"key6": "value6",
"key7": "value7",
"key8": value8,
"key9": "value9",
"key10": null,
"key11": null,
"key12": "value12",
"key13": "value13",
"key14": [],
"key15": "key15",
"key16": "value16",
"key17": "value17",
"key18": "value18",
"key19": "value19"
},
{
"key20": "value20",
"key21": null,
"key22": null,
"key23": "value23",
"key24": "value24",
<etc.>
我当前的conf文件:
input {
file {
codec => multiline
{
pattern => '^\{'
negate => true
what => previous
}
#type => "json"
path => <my path>
sincedb_path => "/dev/null"
start_position => "beginning"
}
}
#filter
#{
# json {
# source => message
# remove_field => message
# }
#}
filter
{
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
output {
#stdout { codec => rubydebug }
stdout { codec => json }
}
我收到了一个无法读取的长错误,因为它充满了 “ \” key10 \“:null,\ r \” key11 \“:\” value11 \“,\ r
等
有人知道我在做什么错或者如何更好地看到我的错误吗?这是有效的json,但也许我在多行编解码器中使用正则表达式错误。
答案 0 :(得分:0)
可以使用与文件不同的输入插件吗?将JSON文件解析为多行可能会出现问题。如果可能,请使用带有JSON编解码器的插件。
在文件输入中,您可以设置一个真正的sincedb_path,logstash可以在其中写入
在您替换邮件的行中,您有一个大括号}
replace => [ "message", "%{message}}" ]
我会将输出写到elasticsearch而不是stdout,但是当然不必进行测试,但是当您将输出写到elasticsearch时,您可以看到正在创建的索引并使用kibana来发现它们的内容是否根据您的喜好。
output {
elasticsearch {
hosts => "localhost"
index => "stuff-%{+xxxx.ww}"
}
}
我使用这些curl命令从elasticsearch中读取
curl -s -XGET 'http://localhost:9200/_cat/indices?v&pretty'
和
curl -s -XGET 'http://localhost:9200/stuff*/_search?pretty=true'