elasticsearch 如何使用grok过滤{quot;foo";:“bar";,“bar";:“foo";}以仅获取foo字段?
我抄了
elasticsearch 如何使用grok过滤{quot;foo";:“bar";,“bar";:“foo";}以仅获取foo字段?,
elasticsearch,elastic-stack,logstash-grok,grok,
elasticsearch,Elastic Stack,Logstash Grok,Grok,我抄了 {"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"hi","time":"2013-01-04T18:46:23.851Z","v":0} 并将其另存为my logs.json。我试图通过LogStash将两个字段(name和msg)导入ElasticSearch。问题是我依赖于一种我无法实现的过滤器。嗯,我已经成功地导入了这样的行作为一个单一的消息,但肯定是不值得在我的真实情况 也就是说,我
{"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"hi","time":"2013-01-04T18:46:23.851Z","v":0}
并将其另存为my logs.json。我试图通过LogStash将两个字段(name和msg)导入ElasticSearch。问题是我依赖于一种我无法实现的过滤器。嗯,我已经成功地导入了这样的行作为一个单一的消息,但肯定是不值得在我的真实情况
也就是说,我如何才能只将名称和msg导入ElasticSearch?我测试了几种替代方法,用它们来达到一个有用的过滤器,但没有成功
例如,%{GREEDYDATA:message}会将整行作为一条唯一的消息显示出来,但是如何分割它并忽略除name和msg字段以外的所有字段呢
最后,我计划在这里使用:
input {
file {
type => "my_type"
path => [ "/home/logs/logs.log" ]
codec => "json"
}
}
filter {
grok {
match => { "message" => "data=%{GREEDYDATA:request}"}
}
#### some extra lines here probably
}
output
{
elasticsearch {
codec => json
hosts => "http://127.0.0.1:9200"
index => "indextest"
}
stdout { codec => rubydebug }
}
我刚刚看了一下名单。这件衣服应该符合你的需要 假设您已安装,您的配置文件应该如下所示:
input {
file {
type => "my_type"
path => [ "/home/logs/logs.log" ]
codec => "json"
}
}
filter {
prune {
whitelist_names => [
"@timestamp",
"type",
"name",
"msg"
]
}
}
output {
elasticsearch {
codec => json
hosts => "http://127.0.0.1:9200"
index => "indextest"
}
stdout { codec => rubydebug }
}
请注意,您需要保留类型
,以便Elasticsearch将其索引为正确的类型<如果要在上查看数据,则需要code>@timestamp