Как исправить исключение при разборе сопоставления filebeat файлаasticsearch - попытался проанализировать поле [x] как объект, но нашел конкретное значение? - PullRequest
0 голосов
/ 28 декабря 2018

Я использую filebeat 6.2.1 , чтобы взять журналы, проанализировать как JSON и отправить их в asticsearch 6.5.4 , и я получаю следующую ошибку:

WARN    elasticsearch/client.go:520
Cannot index event publisher.Event{Content:beat.Event{Timestamp: 
[...]
"mapper_parsing_exception","reason":
"object mapping for [event] tried to parse field [event] as object, but found a concrete value

Я думаю, что это проблема сопоставления полей, которая также связана с вложенным анализом json, но я не уверен, как подойти к ее решению.

filebeat.yml:

# ======================================
# Filebeat prospectors

filebeat.prospectors:

- type: log

# Change to true to enable this prospector configuration.
enabled: true

# Paths that should be crawled and fetched. Glob based paths.
paths:
 - /var/log/bridge/*.json
 #- c:\programdata\elasticsearch\logs\*

 ignore_older: 24h
 scan_frequency: ${FilebeatScanFrequency}

 json:
   message_key: event
   keys_under_root: true

# ======================================
# Elasticsearch template setting 

setup.template.settings:
index.number_of_shards: 1

Пример вывода filebeat:

{
  "_index": "filebeat-6.2.1-date",
  "_type": "doc",
  "_id": "nh6Z9WcBwAmR4kjdfofdk-H",
  "_version": 1,
  "_score": null,
  "_source": {
    "@timestamp": "2018-12-28T16:15:48.012Z",
    "event": "",
    "Timestamp": "2018-12-28T21:45:42.7876369+05:30",
    "Level": "Information",
    "MessageTemplate": "{AuthenticationScheme} was not authenticated. 
Failure message: {FailureMessage}",
    "beat": {
      "name": "DB-01",
      "hostname": "DB-01",
      "version": "6.2.1"
    },
    "Properties": {
      "EventId": {
        "Id": 7
      },
      "Country": "Canada",
      "Format": "json",
      "MachineName": "DB-01",
      "ThreadId": 57,
      "Source": "Example API",
      "FailureMessage": "No authorization header.",
      "SourceContext": 
      "Odachi.AspNetCore.Authentication.Basic.BasicMiddleware",
      "RequestPath": "/status",
      "AuthenticationScheme": "Basic",
      "ProcessId": 4627,
      "EnvironmentUserName": "EXAMPLEDNS\\example.api",
      "RequestId": "0NKDFUJDFKDL",
      "Environment": "Production"
    },
    "source": "D:\\Logs\\Company Example-api.json",
    "offset": 9575044,
    "RenderedMessage": "\"Basic\" was not authenticated. Failure message: 
\"No authorization header.\"",
    "prospector": {
      "type": "log"
    }
  },
  "fields": {
    "@timestamp": [
      "2018-12-28T16:15:48.012Z"
    ]
  },
  "sort": [
    154601321324346
  ]
}

Я ищу способ корректно исправить ошибку сопоставления и успешно отправить проанализированные журналы JSON вasticsearch.

UPDATE: я хотел обновить этот вопрос рядом возможных решений , упомянутых Стеффеном Сиерингом (Elastic Team Member):

  • вы на самом деле используете filebeat 6.5.x
  • вы можете индексировать данные filebeat 6.2.x в тот же индекс, который использовался в 6.5.x
  • , вы можете индексировать данные filebeat 6.2.x в индекс, который соответствует конфигурации
  • из прежней / другой установки 6.5.x
  • Тип вВаши json-файлы не всегда строковые

В моем случае я обновил Filebeat до последней версии 6.5.x, что вызвало ошибку отображения поля события.Чтобы решить эту проблему, я вернул обратно файл до версии 6.2.x, что исправило проблему.

...