rsyslog - как отправлять многострочные сообщения по шаблону JSON - PullRequest
0 голосов
/ 03 июля 2018

Я отправляю журналы Laravel с помощью модуля rsyslog imfile. Я использую startmsg.regex для работы с многострочными сообщениями. Они прекрасно работают.

input(type="imfile"
      File="laravel.log"
      Tag="laravel_app"
      startmsg.regex="[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2} [[:digit:]]{1,2}:[[:digit:]]{1,2}:[[:digit:]]{1,2}"
)

Затем я отправляю журналы в Logstash (а затем использую их в Elasticsearch и Kibana) Я отправляю журналы, используя шаблон Rsyslog

template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}

Мои журналы выглядят так, где разрывы строк помечены \ n

[2018-06-07 11:02:33] testing.ERROR: класс 'App \ Http \ Controllers \ Deal' не найдено {"исключение": "[объект] (Symfony \ Component \ Debug \ Exception \ FatalThrowableError (код: 0): класс 'App \ Http \ Controllers \ Deal' не найден в /app/Http/Controllers/TestingSyslogController.php:13)\n[stacktrace]\n#0 [внутренняя функция]: App \ Http \ Контроллеры \ TestingSyslogController-> индекс () \ п # 1 /vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array (Array, Array) \ n # 2 /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Осветить \ Routing \ Controller-> callAction ('index', Array) \ n # 3 /vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Осветить \ Routing \ ControllerDispatcher-> отправка (Object (Illuminate \ Routing \ Route), Объект (App \ Http \ Controllers \ TestingSyslogController), 'index') \ n # 4 /vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): Осветить \ Routing \ маршрутные> runController () \ п # 5

Таким образом, все сообщение в одной строке {message}

Как я могу использовать шаблон rsyslog, чтобы разбить сообщение в '\ n' на разные объекты, чтобы выглядеть примерно так ... {строка сообщения 1}, {строка сообщения 2}, {строка сообщения x}

...