Я пытаюсь проанализировать сообщения журнала и преобразовать их в структурированные сообщения с помощью rsyslog.Есть ли способ поддержки такой работы с конфигом rsyslog?Я еще не исследовал возможность написать собственный анализатор или плагин для модификации сообщений.
Я нашел свойства списка шаблонов , которые могут с этим справиться.Есть ли способ сделать следующее?
- Сопоставить 2 поля с одним выходным именем.Пример: "__ts": "2018-09-20 10: 18: 56.363" (первые 2 поля в примере ниже).Не использовал бы здесь регулярные выражения, так как я ищу решение, которое не зависит от значения полей.Пример: два поля могут быть двумя строками или некоторыми другими значениями, а не просто датами.
- Извлечь то, что осталось в сообщении после извлечения всех известных полей на основе позиции.Пример: "msg": "Отмена регистрации приложения nameOfAnApiHere с someOtherName со статусом DOWN".
- Есть ли способ использовать локальные переменные для хранения значений полей из msg и использования переменных в шаблонах?
Пример Сообщение в журнале:
2018-09-20 10: 18: 56.363 INFO --- [Thread-68] xyzkey1Value Отмена регистрации имени приложенияOfAnApiHere с someOtherNameсо статусом ВНИЗ
1.Определение шаблона конфигурации rsyslog
template(name="structure-log-format" type="list") {
constant(value="{")
# This only extracts the first field with value 2018-09-20.
# TODO: What is a way to map first 2 fields to map to __ts field?
property(outname="__ts" name="msg" field.number="1" field.delimiter="32" format="jsonf") constant(value=", ")
constant(value="\"event\":[{")
constant(value="\"payload\":{")
property(outname="_log_" name="syslogtag" format="jsonf") constant(value=", ")
property(outname="__loglvl" name="msg" field.number="4" field.delimiter="32" format="jsonf") constant(value=", ")
property(outname="__thread" name="msg" field.number="7" field.delimiter="32" format="jsonf") constant(value=", ")
property(outname="__key1" name="msg" field.number="8" field.delimiter="32" format="jsonf") constant(value=", ")
# The following setting will include full message value starting from "2018-09-20 ... DOWN"
# TODO: What is a way to only include message starting from "Unregistering ... DOWN"?
property(name="msg" format="jsonf" droplastlf="on" )
constant(value="}")
constant(value="}]} \n")
}
2.Ожидаемый результат:
{
"__ts": "2018-09-20 10:18:56.363",
"event": [
{
"payload": {
"_log_": "catalina",
"__loglvl": "INFO",
"__thread": "Thread-68",
"__key1": "x.y.z.key1Value",
"msg": "Unregistering application nameOfAnApiHere with someOtherName with status DOWN"
}
}
]
}
3.Фактический результат:
{
"__ts": "2018-09-20",
"event": [
{
"payload": {
"_log_": "catalina",
"__loglvl": "INFO",
"__thread": "Thread-68",
"__key1": "x.y.z.key1Value",
"msg": "2018-09-20 10:18:56.363 INFO 2144 --- [Thread-68] x.y.z.key1Value Unregistering application nameOfAnApiHere with someOtherName with status DOWN"
}
}
]
}
Спасибо.