TL; DR . Можно ли предварительно обработать сообщение, разделив его на новые строки, и затем, как обычно, каждое сообщение проходит через конвейер fluentd?
Я получаю эти сообщения журнала в формате fluentd:
2018-09-13 13:00:41.251048191 +0000 : {"message":"146 <190>1 2018-09-13T13:00:40.685591+00:00 host app web.1 - 13:00:40.685 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Received GET /alerts\n"}
2018-09-13 13:00:41.337628343 +0000 : {"message":"199 <190>1 2018-09-13T13:00:40.872670+00:00 host app web.1 - 13:00:40.871 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Processing with Api.AlertController.index/2 Pipelines: [:api]\n156 <190>1 2018-09-13T13:00:40.898316+00:00 host app web.1 - 13:00:40.894 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Rendered \"index.json\" in 1.0ms\n155 <190>1 2018-09-13T13:00:40.898415+00:00 host app web.1 - 13:00:40.894 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Sent 200 response in 209.70ms\n"}
Проблема этих журналов заключается во втором сообщении: оно содержит несколько строк журнала приложений.
Это, к сожалению, то, с чем мне приходится иметь дело: система (привет, журналы Heroku!) Я работаю с буферами журналов и выкладывает их как один кусок, что делает невозможным узнать количество записей в клочке авансом.
Это известное свойство осушения бревен Хероку.
Есть ли способ предварительной обработки сообщения журнала, чтобы я получал плоский поток сообщений, которые обычно обрабатывались бы последующими средствами fluentd?
Вот так должен выглядеть поток сообщений после обработки:
2018-09-13 13:00:41.251048191 +0000 : {"message":"146 <190>1 2018-09-13T13:00:40.685591+00:00 host app web.1 - 13:00:40.685 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Received GET /alerts\n"}
2018-09-13 13:00:41.337628343 +0000 : {"message":"199 <190>1 2018-09-13T13:00:40.872670+00:00 host app web.1 - 13:00:40.871 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Processing with Api.AlertController.index/2 Pipelines: [:api]\n"}
2018-09-13 13:00:41.337628343 +0000 : {"message":"156 <190>1 2018-09-13T13:00:40.898316+00:00 host app web.1 - 13:00:40.894 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Rendered \"index.json\" in 1.0ms\n"}
2018-09-13 13:00:41.337628343 +0000 : {"message":"155 <190>1 2018-09-13T13:00:40.898415+00:00 host app web.1 - 13:00:40.894 request_id=40932fe8-cd7e-42e9-af24-13350159376d [info] Sent 200 response in 209.70ms\n"}
P.S. Мой текущий конфиг супер базовый, но я выкладываю его на всякий случай. Все, что я пытаюсь сделать, это понять, возможно ли в принципе предварительную обработку сообщения?
<source>
@type http
port 5140
bind 0.0.0.0
<parse>
@type none
</parse>
</source>
<filter **>
@type stdout
</filter>