LINUX.ORG.RU
ФорумAdmin

JSON и rsyslog

 


0

1

Здравствуйте, люди добрые!

Очередные вопросы про rsyslog (если что, rsyslog 8.4.2-1).

Теперь бы надо сделать вывод в лог в json. Добавил в rsyslog.conf шаблон:

template(name="outfmt" type="list" option.jsonf="on") {
         property(outname="@timestamp"
                  name="timereported" 
                  dateFormat="rfc3339" format="jsonf")
         property(outname="host"
                  name="hostname" format="jsonf")
         property(outname="severity"
                  name="syslogseverity-text" caseConversion="upper" format="jsonf")
         property(outname="facility"
                  name="syslogfacility-text" format="jsonf")
         property(outname="syslog-tag"
                  name="syslogtag" format="jsonf")
         property(outname="source"
                  name="app-name" format="jsonf")
         property(outname="message"
                  name="msg" format="jsonf")

     }

и перезапустил службу. Однако, не вижу в логе JSON’а. Отсюда вопросы:

  • 1 Есть конкретное место для шаблона или все равно?
  • 2 app-name в шаблоне должно совпадать с openlog(app_name, ...), т.е. именем программы?

Ответ на: комментарий от mky

В какой-то степени разобрался с rsyslog.conf, ошибок нет, почти желаемый вывод, но есть нюанс.

Часть rsyslog.conf:

template(name="outfmt" type="list" option.jsonf="on") {
    property(name="timestamp" dateFormat="rfc3339" format="jsonf")
    property(name="msg" format="jsonf")
}

action(type="omfile" file="/home/user/log/progname.log" template="outfmt")

if $programname startswith "progname" then /home/user/log/progname.log
& stop

Лог:

"timestamp":"2022-12-09T11:50:15.972719+03:00""msg":" msg 31"Dec  9 11:50:15 deb8-0 progname: msg 31
"timestamp":"2022-12-09T11:50:28.756649+03:00""msg":" msg 32"Dec  9 11:50:28 deb8-0 progname: msg 32
"timestamp":"2022-12-09T11:53:38.280516+03:00""msg":" Accepted password for user from <...>"

В лог попадает не только вывод от progname, но и левый вывод (например, попал лог коннекта по ssh). Как это исправить?

Заранее благодарен.

braboar
() автор топика
Последнее исправление: braboar (всего исправлений: 1)
Ответ на: комментарий от braboar

Ну попробуйте то, что привели заменить на это:

template(name="outfmt" type="list" option.jsonf="on") {
    property(name="timestamp" dateFormat="rfc3339" format="jsonf")
    property(name="msg" format="jsonf")
}

if $programname startswith "progname" then { 
  action(type="omfile" file="/home/user/log/progname.log" template="outfmt")
  stop
}

mky ★★★★★
()
Ответ на: комментарий от mky

Дошли руки, попробовал такую конфигурацию. Работает, но в файле лога одна очень длинная строка, т.е. не новая строка добавляется в файл, а дописывается к предыдущей. Такое можно побороть?

braboar
() автор топика