Наши журналы отправляются из наших приложений в rsyslog, работающий на том же хосте. Затем Rsyslog пересылает сообщения в Sumo Logic.
Нам нужно добавить некоторые метаданные в наши сообщения журнала в поле структурированных данных. Некоторые из наших приложений уже используют структурированные данные, поэтому мы можем ' t просто замените свойство структурированных данных в нашем шаблоне.
Кроме того, свойство% STRUCTURED-DATA% включает открывающую и закрывающую скобки, поэтому мы не можем просто поместить что-то вроде [% STRUCTURED-DATA% newmetadata]
в шаблоне
Согласно документации по замене свойств , мы можем использовать FromChar
и ToChar
или регулярные выражения. Я проверил источник и подтвердил, что ToChar
не может вести обратный отсчет с конца.
Я использовал инструмент регулярных выражений rsyslog , чтобы создать следующий шаблон:
template (name = "metadata_syslog" type = "string" string = "<% PRI%> 1% TIMESTAMP ::: date-rfc3339%% HOSTNAME%% APP-NAME%% PROCID%% MSGID% [% STRUCTURED-DATA: R, ERE , 1, ПОЛЕ:mdc @ xxxxx category = "io.service.segment.IndexIO $ DefaultIndexIOHandler" thread = "foo_v2-incremental-persist"] Обработка файла [dim_device.drd]
инструмент регулярного выражения правильно проанализировал структурированные данные без скобок.
Когда я использовал этот шаблон в rsyslog, я получаю синтаксическую ошибку в части% PRI% (отладочный вывод):
Чтение токена: 9936.286569660: основной поток: вызывается LogMsg, msg: ошибка во время синтаксического анализа файла / etc / rsyslog.d / 21-logging.conf, в строке 4 или до нее: недопустимый символ '"' в определении объекта - есть ли где-нибудь недопустимая escape-последовательность?
rsyslogd: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или до нее: недопустимый символ '"' в определении объекта - есть ли где-то недопустимая escape-последовательность? [v8.17.0 попробуйте http: / /www.rsyslog.com/e/2207]
9936.286590559: основной поток: вызывается LogMsg, msg: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или перед ней: недопустимый символ '<' в определении объекта - есть ли где-то недопустимая escape-последовательность?
rsyslogd: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или до нее: недопустимый символ '<' в определении объекта - есть ли где-то недопустимая escape-последовательность? [v8.17.0 попробуйте http://www.rsyslog.com/e/2207]
9936.286606008: основной поток: вызывается LogMsg, msg: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или до нее: недопустимый символ '%' в определении объекта - есть ли где-то недопустимая escape-последовательность?
rsyslogd: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или до нее: недопустимый символ «%» в определении объекта - есть ли где-то недопустимая escape-последовательность? [v8.17.0 попробуйте http://www.rsyslog.com/e/2207]
Следующий токен - это токен NAME ()
9936.286632522: основной поток: вызывается LogMsg, msg: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или до нее: синтаксическая ошибка токена 'PRI'
rsyslogd: ошибка во время синтаксического анализа файла /etc/rsyslog.d/21-logging.conf, в строке 4 или до нее: синтаксическая ошибка токена 'PRI' [v8.17.0 попробуйте http://www.rsyslog.com/e/2207 ]
Ошибка: появляется токен '=' ()
Сложить сейчас 0 1 5 28 52
Ошибка: появляется токен NAME ()
Сложить сейчас 0 1 5 28
Ошибка: появляется nterm nvlst ()
Сложить сейчас 0 1 5
Ошибка: выскакивает токен BEGIN_TPL ()
Сложить сейчас 0 1
Ошибка: появляется nterm conf ()
Сложить сейчас 0
Очистка: отказ от лексемы просмотра NAME ()
Сложить сейчас 0
9936.286780810: основной поток: вызывается LogMsg, msg: CONFIG ERROR: не удалось интерпретировать главный файл конфигурации '/etc/rsyslog.conf'.
rsyslogd: ОШИБКА КОНФИГУРАЦИИ: не удалось интерпретировать главный файл конфигурации '/etc/rsyslog.conf'. [v8.17.0 попробуйте http://www.rsyslog.com/e/2207]
При настройке с использованием синтаксиса Rainerscript регулярные выражения нуждаются в дополнительном экранировании в соответствии с этим инструментом экранирования константной строки rainerscript .
Работал следующий шаблон:
template (name = "metadata_syslog" type = "string" string = "<% PRI% > 1% TIMESTAMP ::: date-rfc3339%% HOSTNAME%% APP-NAME%% PROCID%% MSGID% [% STRUCTURED-DATA: R, ERE, 1, FIELD: \\ [([^]] *) \ \] - end% extrafield = value]% msg% \ n ")