我尝试使用json,json_lines甚至多行输入插件来解析它,但无济于事。多行在我的本地计算机上运行良好,但在我的s3和ec2实例上似乎不起作用。
我将如何编写grok过滤器来对此进行解析?
这是我的JSON文件的样子
{
"sourceId":"94:54:93:3B:81:6F1",
"machineId":"c1VR21A0GoCBgU6EMJ78d3CL",
"columnsCSV":"timestamp,state,0001,0002,0003,0004",
"tenantId":"iugcp",
"valuesCSV":"1557920277890,1,98.66,0.07,0.1,0.17 ",
"timestamp":"2019-05-15T11:37:57.890Z"
}
这是我的配置-
input {
file{
codec => multiline
{
pattern => '^\{'
negate => true
what => previous
}
path => "/home/*myusername*/Desktop/data/*.json"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
//输出标记正确,此处未包含
我得到的结果只是“消息”字段中存在的json文件。 我想要的是每个json标签,文档中应该有一个单独的字段。