Как правильно форматировать сообщения json и отправлять их через amqp с помощью syslog-ng?
Формат json должен выглядеть примерно так.
{"log":"This is the error message...", "date":"xxx", "source":"xxx"}
У меня проблема в том, что сообщение не всегда является допустимой строкой json.
например
"log":"This is a "serious" error message."
Как мне избежать сообщения?
Моя конфигурация syslog-ng выглядит примерно так.
destination d_amqp {
amqp(
vhost("/")
host("127.0.0.1")
port(5672)
username("guest") # required option, no default
password("guest") # required option, no default
exchange("syslog")
exchange_type("header")
routing_key("my-routing-key")
body("\{\"log\":\"${MSG}\"\}")
persistent(yes)
value-pairs(
scope("selected-macros" "nv-pairs" "sdata")
)
);
};
Это всего лишь пример, поскольку сейчас у меня нет фактической конфигурации.
Вам следует использовать функцию шаблона $ (format-json) вместо ручной обработки полезной нагрузки json.
Это сделает побег за вас. Не говоря уже о том, что вы можете запросить набор пар имя-значение в сообщении и сделать json более динамичным, например, добавив все пары имя-значение с определенным префиксом.
Вот ссылка на документацию: http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.5-guides/en/syslog-ng-ose-v3.5-guide-admin/html/reference-template- functions.html
Алджернон также опубликовал длинный пост в блоге о json. Посмотреть здесь: https://algernon.blogs.balabit.com/2012/02/cee-handling-with-syslog-ng-ose/