Я использую 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, что исправило проблему.