У меня есть события входа приложения в формате JSON для позже структурированных запросов, и т.д. Теперь у меня есть задача зарегистрировать те же сообщения в простом тексте (CSV, вероятно), и я действительно не хочу регистрировать каждое событие дважды в обоих форматах.
Действительно ли возможно преобразовать в rsyslog? Я имею опцию трассировки выходного файла и передачи по каналу его к преобразователю и затем регистрируюсь с другим тегом, но это кажется субоптимальным.
Какие-либо другие идеи?
Спасибо!
Вы, возможно, захотите взглянуть на mmjsonparse
. Похоже, она делает то, что вы хотите. Вам понадобится rsyslog
6.6 или выше (рекомендуется 7 или выше). Пример конфигов, найденный здесь достаточно хорошо объясняет это:
# load needed modules
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
module(load="mmjsonparse") #for parsing CEE-enhanced syslog messages
# try to parse structured logs
action(type="mmjsonparse")
# define a template to print field "foo"
template(name="justFoo" type="list") {
property(name="$!foo")
constant(value="\n") #we'll separate logs with a newline
}
# and now let's write the contents of field "foo" in a file
action(type="omfile"
template="justFoo"
file="/var/log/foo")
Вам все равно понадобится использовать логгер
или какой-нибудь модуль любого языка, на котором написано ваше приложение, который взаимодействует с rsyslog
для написания сообщений...
# logger '@cee: {"foo":"bar"}'
# cat /var/log/foo
bar
Если вы отправите неструктурированный лог, или недействительный JSON, то ничего не будет добавлено в лог.
.