Size: a a a

Сбор и аналитика системных сообщений

2020 October 14

S

Solresl in Сбор и аналитика системных сообщений
Гуру rsyslog, подскажите. Есть лог строка

{"request_body":"{\"configRef\": {\"id\": 85021}, \"objects\": []}"}


значение поля request_body пишется в кавычках. Как я могу значение поля сделать  json-ом и записать в темлейт ?

"request_body":{"configRef": {"id": 85021}, "objects": []}

?
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
У тебя там вложенное что-то?
источник

S

Solresl in Сбор и аналитика системных сообщений
Видимо я Не понял вопроса.  Да, внутри json, как из примера.
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
Если хочешь нормальную работу с json-объектами, то тебе нужно распарсить request_body как json-объект.
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
источник

S

Solresl in Сбор и аналитика системных сообщений
вот как это правильно сделать в rsyslog? Всё сообщение  целиком я паршу как json  c помощью  action(type="mmjsonparse"). И могу обратиться к полю $!request_body".  Но как уже значения этого поля распарсить как json?
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
Хмы, тогда у тебя всё ровно должно быть.
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
А как выглядит шаблон?
источник

S

Solresl in Сбор и аналитика системных сообщений
Оно пишется обрамленное кавычками и воспринимается как единое значение.
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
Solresl
Оно пишется обрамленное кавычками и воспринимается как единое значение.
Это не ответ на мой вопрос.
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
Есть же формат выходной jsonf, с ним всё хорошо.
источник

S

Solresl in Сбор и аналитика системных сообщений
 template(name="test"
 type="list" ) {
   constant(value="{")
     constant(value="\"request_body\":")          property(name="$!request_body" )
     constant(value="}\n")
}

пробовал с jsonf вроде, сейчас попробую, но мне кажется не поможет.
источник

S

Solresl in Сбор и аналитика системных сообщений
Ну да, он в итоге также как строку и пишет

"request_body":"{\"configRef\": {\"id\": 85021}, \"objects\": []}"
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
Solresl
Ну да, он в итоге также как строку и пишет

"request_body":"{\"configRef\": {\"id\": 85021}, \"objects\": []}"
Шаблон покажи.
источник

S

Solresl in Сбор и аналитика системных сообщений
Sergey Pechenkó
Шаблон покажи.
экспериментирую уже по всякому, ушел от того варианта

сейчас

template(name="ch-rest"
 type="list" option.jsonf="on") {
     property(name="$!request_body" format="jsonr" position.from="2" outname="request_body" controlcharacters="drop")
}

получаю в итоге

{\"configRef\": {\"id\": 85021}, \"objects\": []}}


Так надо получается избавиться от экранирования
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
Надо задать формат самого property.
источник

S

Solresl in Сбор и аналитика системных сообщений
можешь пояснить? есть же format="jsonr"
источник

SP

Sergey Pechenkó in Сбор и аналитика системных сообщений
jsonf нужно
источник

S

Solresl in Сбор и аналитика системных сообщений
Sergey Pechenkó
jsonf нужно
Опять же не то.

template(name="ch-rest"
 type="list" option.jsonf="on") {
     property(name="$!request_body" format="jsonf" position.from="2" outname="request_body")
}

в итоге

{"request_body":"\"configRef\": {\"id\": 85021}, \"objects\": []}"}
источник

YB

Yury Bushmelev in Сбор и аналитика системных сообщений
а переименовать поля set/reset и записать $!all-json не вариант?
источник