Назад | Перейти на главную страницу

отправка сообщений на основе json с использованием syslog-ng и amqp

Как правильно форматировать сообщения 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/