Мои журналы приложений в формате json, например
{"verified": true, "id": 42, "date": "bla"}
и я хочу переслать это как json с filebeat (6.2.4). Однако, поскольку приложения работают внутри докера, журнал записывается в /var/lib/docker/containers//_json.log как:
{"log":"{\"verified\": true, \"id\": 42, \"date\": \"bla\"}\r\n","stream":"stdout","time":"2018-08-10T08:13:53.219511878Z"}
Итак, теперь есть json-элемент log
со строковым значением.
Когда filebeat анализирует файл журнала докеров, содержимое значения log
интерпретируется как простая строка, и filebeat производит следующий вывод:
...
"log": "{\"verified\": true, \"id\": 42, \"date\": \"bla\"}",
"time": "2018-08-10T09:00:15.038787209Z",
"stream": "stdout",
...
Можно ли разобрать поле «log» в filebeat, чтобы выходные данные filebeat содержали json-элементы verified
, id
и date
.
Это моя конфигурация:
filebeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains.docker.container.image: logprod
config:
- type: log
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
json.message_key: log
json.add_error_key: true
json.keys_under_root: true
output.console:
enabled: true
pretty: true
Если кто-то наткнется на это с вводом Graylog Beats, v2.5.2 не может обрабатывать json в сообщении, 3.x может.
ты когда-нибудь догадывался об этом? У меня такая же проблема.