Эластик Logstash Mutate Split не работает - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблемы с разделением поля http.request.referrer в logstash.Это исходит от пакета пакетов.Я хочу использовать только домен, а не полный путь.Со следующим фильтром, как предложено здесь https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html,, я получаю следующую ошибку

[WARN ][logstash.filters.mutate  ] Exception caught while applying mutate filter {:exception=>"Invalid FieldReference: `sfa[2]`"}

Но если я не попытаюсь извлечь второй элемент и просто использовал поле sfa для добавления в sfa_ref, тогда онработает, только если косая черта заменена запятыми.

filter {
  mutate {
    add_field => {"sfa" => "%{[http][request][referrer]}"}
  }
  mutate {
    split => ["sfa", "/"]
    add_field => {"sfa_ref" => "%{sfa[2]}"}
  }
}

Ввод выглядит следующим образом:

{
    "http": {
      "request": {
        "bytes": 727,
        "method": "get",
        "headers": {
          "content-length": 0
        },
        "referrer": "https://example.domain.com/web/font-awesome/css/font-awesome.min.css"
      },
      "response": {
        "bytes": 66989,
        "status_code": 200,
        "body": {
          "bytes": 66624
        },
        "headers": {
          "content-length": 66624,
          "content-type": "application/font-woff2"
        }
      },
      "version": "1.1"
    },
    "status": "OK"
  }

После разделения поле sfa становится:

"sfa": [ "https:", "", "example.domain.com", "web", "font-awesome", "css", "font-awesome.min.css" ]

1 Ответ

1 голос
/ 26 сентября 2019

Представленная документация выглядит устаревшей.В более новых версиях logstash правильным способом обращения к массиву или элементам в них является %{[field_name][index]}.Так что мне нужны были квадратные скобки вокруг имени поля.

mutate {
  split => ["sfa", "/"]
  add_field => {"sfa_ref" => "%{[sfa][2]}"}
}
...