Предварительная обработка сообщения, содержащего несколько записей журнала - PullRequest
0 голосов
/ 13 сентября 2018

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>

1 Ответ

0 голосов
/ 14 сентября 2018

Как насчет https://github.com/hakobera/fluent-plugin-heroku-syslog?

fluent-plugin-heroku-syslog не поддерживается 4 года назад, но будет работать с Fluentd v1 с использованием совместимого слоя.

...