logspout gelf, отправленный на fluentd, находится в формате JSON?
Поэтому я использую logspout с плагином gelf (vincit/logspout-gelf) для вывода gelf в fluentd (td-agent). Fluentd настроен с помощью входного плагина gelf (MerlinDMC/fluent-plugin-input-gelf). Цель состоит в том, чтобы перехватить журналы докеров-контейнеров и отправить их на один сервер пересылки с одной точкой выхода с хоста EC2. Экспедитор уже с радостью собирает системные журналы хостов EC2 и добавляет правильную дату / время к каждому событию.
Когда я начинаю свободно говорить с этим конфигом, я пересылаю свои логи в Graylog, но формат времени неправильный (эпоха + время работы):
<source>
type gelf
protocol_type udp
port 12202
tag stuff
</source>
Зарегистрированное событие выглядит так:
1970-01-01 01:33:38 +0100 stuff: {"version":"1.1","host":"server1","short_message":"2018-02-09T16:07:25.546Z [access-log] ::ffff:1.2.3.4 - \"GET /find HTTP/1.1\" 200 5567 \"-\" \"ELB-HealthChecker/2.0\"1234","level":3,"image_id":"sha256:12345","image_name":"hello-world","container_id":"12345","container_name":"hello_world-task","command":"node bin/hello_world.js"}
Добавление небольшого форматирования добавляет правильную дату, но теряет все поля индексации:
format /^(?<time>[^ ]* [^ ]) (?<message>.)$/
Вывод теперь имеет правильную дату, но единственное проиндексированное поле - это, конечно, сообщение:
2018-02-09 16:14:45 +0000 stuff: {"message":"::ffff:1.2.3.4 - \\\"GET /find HTTP/1.1\\\" 200 5567 \\\"-\\\" \\\"ELB-HealthChecker/2.0\\\"1234\",\"timestamp\":\"2018-02-09T16:14:45.990867153Z\",\"level\":3,\"image_id\":\"sha256:12345\",\"image_name\":\"hello-world\",\"container_id\":\"12345\",\"container_name\":\"hello_world-task\",\"command\":\"node bin/hello_world.js\"}"}
Это тот самый JSON, который проглотил fluentd? Как исправить дату и проиндексировать все поля? Я пошел с "GELF out > GELF in", предполагая, что мне не придется тратить дни на написание пользовательских форматов?