问题描述
我有message
字段的以下数据,这些数据已通过文件信号传送到elasticseatch。我在这里不使用Logstash
2020-09-20 15:44:23 ::1 get / - 80 - ::1 mozilla/5.0+(windows+nt+10.0;+win64;+x64)+windows/537.36+(khtml,+like+gecko)+chrome/85.0.4183.102+chrome/537.36 - 200 0 0 10
我想在每个空间分割以上数据,并将它们分配到不同的字段,新字段应该在kibana发现门户网站中得到体现。
我们该怎么做?
我尝试在kibana中使用脚本化字段,但由于不了解脚本化字段查询,因此无法实现。
解决方法
您可以在Elasticsearch中设置接收管道,并使用Grok处理器将message
字段解析为多个字段。参考:https://www.elastic.co/guide/en/elasticsearch/reference/master/grok-processor.html
例如,根据您的日志:
POST _ingest/pipeline/_simulate
{
"pipeline": {
"description" : "...","processors": [
{
"grok": {
"field": "message","patterns": ["%{DATESTAMP:timestamp} %{DATA} %{WORD:request.method} %{DATA:request.url} - %{NUMBER:port} %{GREEDYDATA:useragent} - %{NUMBER:response.status_code} %{GREEDYDATA}"]
}
}
]
},"docs":[
{
"_source": {
"message": "2020-09-20 15:44:23 ::1 get / - 80 - ::1 mozilla/5.0+(windows+nt+10.0;+win64;+x64)+windows/537.36+(khtml,+like+gecko)+chrome/85.0.4183.102+chrome/537.36 - 200 0 0 10"
}
}
]
}