#elasticsearch #filebeat #kibana-7
Вопрос:
У меня есть log4net
json
журнал, в котором поле сообщения может быть разделено на несколько строк при регистрации стека с сообщением.
Пример:
{"@timestamp":"2021-11-12 17:54:09,517","event.dataset":"app.access","thread":"[30]","Level":"ERROR","Message":"MySqlConnector.MySqlException (0x80004005): Access denied for user 'root'@'someplace' (using password: YES)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()... "}
Filebeat правильно анализирует обе строки как одно событие, но я не могу заставить его заполнить ECS event.dataset
из файла.
Здесь соответствующая часть filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- d:logs*.log
multiline.pattern: '^{'
multiline.negate: true
multiline.match: after
processors:
- decode_json_fields:
fields: ["message","event.dataset"]
target: "json"
Чего не хватает для того, чтобы filebeat смог извлечь event.dataset
поле из файла?
Обновить
Я смог успешно проанализировать поля ECS и поля, отличные от ECS, из одной строки журнала с помощью этой более простой конфигурации:
filebeat.inputs:
- type: log
enabled: true
paths:
- d:logs*.log
multiline.pattern: '^{'
multiline.negate: true
multiline.match: after
json.keys_under_root: true
json.add_error_key: true
json.message_key: message
Но не удается извлечь какое-либо поле, когда строка журнала охватывает несколько строк. Отчет по ключам ошибок:
- ошибка.сообщение: Ошибка при декодировании JSON: недопустимый символ «a» , ищущий начало значения
- ошибка.тип: json
запись в журнале:
{"entry":"2021-11-15 11:31:47,954","event.dataset":"someapp","thread":"[72]","Level":"ERROR","message":"MySqlConnector.MySqlException (0x80004005): Access denied for user 'someuser' (using password: YES)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Комментарии:
1. вы используете Logstash ? или вы отправляете журналы непосредственно в elasticsearch?
2. Я использую logstash.
3. примените фильтр json, а затем используйте поле event.dataset в elasticsearch
4. Вы имеете в виду определение полей decode_json_fields для процессора? Если да, то не повлияет ли это на другие отслеживаемые файлы? Это мой первый раз с logstash.
5. смотрите Шаблоны Logstash grok, вы можете определить шаблон, чтобы захватить каждый параметр из неструктурированного журнала