syslog rsyslog syslog-ng

Confundido con el formato de mensaje syslog



rsyslog syslog-ng (2)

El problema en este caso es que apache está registrando a través del syslog estándar (3) o a través del registrador. Esto solo es compatible con el formato antiguo de syslog (RFC3164), es decir, no hay datos estructurados aquí. Para que los campos del registro de apache se muestren como datos estructurados RFC5424, apache tendría que formatear el registro de esa manera.

El primer ejemplo no es el syslog RFC3164 correcto, porque el valor de prioridad se elimina del encabezado. El formato RFC3164 adecuado se vería así:

<34>Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0

Tradicionalmente, los mensajes de syslog rfc3164 se guardan en archivos con el valor de prioridad eliminado.

Los otros dos están en formato RFC5424.

Estoy un poco confundido sobre el formato del mensaje syslog. Tengo que escribir un programa que analiza los mensajes de syslog. Cuando leo lo que obtengo en mi instancia de syslog-ng, recibo mensajes como este:

Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0

Puedo determinar claramente el mensaje real (que es, en este caso, un mensaje de registro de acceso de Apache). El resto son metadatos sobre el mensaje de syslog.

Sin embargo, cuando leí el RFC 5424, los ejemplos de los mensajes parecen:

sin datos estructurados

<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM''su root'' failed for lonvick on /dev/pts/8

o con datos estructurados

<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMAn application event log entry...

Así que ahora estoy un poco confundido. ¿Cuál es el formato correcto de mensaje syslog? Es una cuestión de versión de versión donde RFC 5424 obsoleta RFC 3164 ?


Si tiene acceso al daemon de syslog instalado en el sistema, puede configurarlo para escribir los registros (recibidos localmente o a través de la red) en un formato diferente. rsyslogd, por ejemplo, permite configurar su propio formato (solo escriba una plantilla) y también si recuerdo correctamente tiene una plantilla incorporada para almacenar en formato json. Y hay bibliotecas en casi cualquier idioma para analizar json.