Syslog-ng aktiviert TCP-Framing

Syslog-ng aktiviert TCP-Framing

Ich versuche, Dateieinträge als Nachrichten über TCP zu senden, wobei sich syslog-ng in einem Container befindet und an einen anderen Container sendet. Ich hatte zwei verschiedene Versuche, beide mit problematischem Verhalten. Die erste Konfiguration:

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

Bei dieser Methode begann die empfangene Nachricht manchmal mit der Anzahl der Bytes in der kommenden Nachricht, beispielsweise 400, in anderen Fällen war dies nicht der Fall und es ging direkt zur Nachricht über.

Später habe ich das Ziel geändert und networkanstelle von verwendet syslog. Jetzt gibt es keinen Rahmen mehr.

Mir macht es nichts aus, wenn ich TCP, UDP oder was auch immer verwenden muss. Ich habe einen Golang-Receiver an einen TCP-Socket angeschlossen und möchte, dass er eine Nachricht nach der anderen liest und analysiert. Wie ist das möglich? Danke

Antwort1

Das syslog()-Ziel würde das Oktett-gezählte Framing-Format für Transport (TCP) und Transport (TLS) verwenden, wie in RFC5425 beschrieben. Es wird KEIN Framing für Transport (UDP) verwenden, da das Datagramm in diesem Fall Nachrichten anhand der Paketgrenzen unterteilt. Der UDP-Transport wird in RFC5426 beschrieben.

verwandte Informationen