Syslog-ng habilita enquadramento TCP

Syslog-ng habilita enquadramento TCP

Estou tentando enviar entradas de arquivo como mensagens via TCP, onde o syslog-ng está em um contêiner e está enviando para outro contêiner. Tive duas tentativas diferentes, ambas com comportamento problemático. A primeira configuração:

@version: 3.31
source s_file {
    file("/var/log/my_file.json" follow_freq(1) flags(no-parse));
};

template log_template {
    template("MSGSTART${MESSAGE}MSGEND");
};

class SngResolver(object):
    def init(self, options):
        """
        Initializes the parser
        """
        self.counter = 0
        return True
    def parse(self, log_message):
        log_message["SYSUPTIME"] = subprocess.check_output(['cat', '/proc/uptime']).decode('utf-8')
        log_message["SEQUENCEID"] = str(self.counter)
        self.counter += 1
        # return True, other way message is dropped
        return True
};

parser p_resolver {
    python(
        class("SngResolver")
    );
};


# Define the destination for Suricata logs
destination d_container {
    syslog("my_other_container" transport("tcp") port(1234) template(log_template));    
};


# Define the log path for Suricata logs
log {
    source(s_file);
    parser(p_resolver);

    destination(d_container);
};

Neste método, às vezes a mensagem recebida começa com o número de bytes da mensagem seguinte, digamos 400. outras vezes, não o fizeram e foram direto à mensagem.

Mais tarde, mudei o destino para usar networkem vez de syslog. Agora, não há enquadramento.

Não me importo se tiver que usar TCP, UDP, seja o que for. Eu recebi um golang conectado a um soquete TCP e quero que ele leia uma mensagem por vez e analise-a. Como isso é possível? Obrigado

Responder1

O destino syslog() usaria o formato de enquadramento contado em octetos em transport(tcp) e transport(tls) conforme descrito em RFC5425. Ele NÃO usará enquadramento no transporte (udp), pois nesse caso o datagrama separa as mensagens usando os limites do pacote. O transporte UDP é descrito em RFC5426.

informação relacionada