将 filebeat 消息字段拆分为 kibana 中的多个字段

Split filebeat message field into multiple fields in kibana

我有以下 message 字段的数据,这些数据由 filebeat 发送到 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

我想在每个 space 拆分以上数据并将它们分配给不同的字段,新字段应该反映在 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"
      }
    }
  ]
}