enviando mensagens baseadas em json usando syslog-ng e amqp

1

Como você formata corretamente as mensagens do json e as envia por amqp com o syslog-ng?

O formato json deve ser parecido com isto.

{"log":"This is the error message...", "date":"xxx", "source":"xxx"}

O problema que tenho é que a mensagem nem sempre é uma string json válida.

por exemplo,

"log":"This is a "serious" error message."

Como eu escaparia da mensagem?

Minha configuração do syslog-ng é algo como isto.

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")
        )
    );
};

Este é apenas um exemplo, já que não tenho a configuração atual na minha frente agora.

    
por eandersson 17.11.2013 / 03:12

1 resposta

3

Você deve usar a função de template $ (format-json) ao invés de criar manualmente o payload do json.

Isso fará o escape para você. Sem mencionar que você pode consultar o conjunto de pares nome-valor dentro de uma mensagem e tornar o json mais dinâmico, por exemplo, adicionando todos os pares nome-valor com um prefixo específico.

Aqui está um link para a documentação: link

Algernon postou um longo post em json também. Veja aqui: link

    
por 17.11.2013 / 07:37