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!) Я работаю с журналами буферов, и выдает их как один блок, что делает невозможным узнать количество записей в блоке. авансом.
Это известное свойство Heroku. дренирование бревен.
Есть ли способ предварительно обработать сообщение журнала, чтобы получить непрерывный поток сообщений, которые будут нормально обрабатываться последующими средствами Fluent?
Вот как должен выглядеть постобработанный поток сообщений:
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>