¿Cómo configurar el almacenamiento MySQL para ciertas coincidencias de entrada de rsyslog?

¿Cómo configurar el almacenamiento MySQL para ciertas coincidencias de entrada de rsyslog?

Estoy drenando varios registros de Heroku a un servidor rsyslog linux (ubuntu) y estoy empezando a tener un poco más que morder de lo que puedo masticar en términos de trabajar con mis historiales de registros.

Necesito poder retroceder en el tiempo en función de detalles más flexibles y un acceso más flexible que lo que proporcionan los archivos syslog estándar.

Estoy pensando que iniciar sesión en MySQL puede ser el enfoque correcto, pero ¿cómo configuro esto de manera que extraiga solo ciertas entradas de registro en una tabla según un identificado? Por ejemplo, veo una cadena hexadecimal larga que identifica cada entrada de registro de una determinada instancia de la aplicación Heroku. Supongo que puedo canalizarlos al socket de MySQL frente a TODAS las entradas de rsyslog en MySQL...

¿Podría alguien indicarme un recurso que pueda guiarme a través del proceso de configuración de algo como esto o simplemente brindarme algunos detalles que puedan ayudar? Tengo más de 15 años de experiencia en Unix, por lo que solo necesito un empujón en la dirección correcta, ya que en realidad no he trabajado mucho con demonios syslog anteriormente en términos de agrupar varios servidores en uno.

Además, me interesaría cualquier herramienta de revisión de registros que pudiera hacer que la exploración de arreglos de registros como este sea más útil para los desarrolladores.

Respuesta1

Supongo que algo así debería funcionar. Primero, asegúrese de tener la siguiente línea en su archivo de configuración de rsyslog, para que se cargue el módulo de salida de MySQL:

$ModLoad ommysql

Luego, filtra las cosas que quieras de esta manera:

:msg, contains, "Heroku"     :ommysql:dbserver,dbname,dbuser,dbpass;heroku-template

A continuación, debe crear una plantilla para sus datos, de modo que rsyslog sepa qué y cómo insertar en su base de datos. Aquí hay una plantilla de ejemplo que solo registra la fecha y el mensaje, excepto que usted tenga una tabla con solo dos columnas datey message.

$template heroku-template, "INSERT INTO herokulog(date,message) VALUES ('%timestamp','%msg')\r\n", SQL

Algo como esto debería funcionar. Tenga en cuenta que esto estaba en la parte superior de mi cabeza y no se probó en absoluto, pero ya entiende la idea. Se puede encontrar información mucho más detallada ensitio web rsyslog, por ejemplo elvalores de parámetros de plantilla disponiblespodría interesarte.

Respuesta2

Canalizaría el syslog a un comando grep para extraer las líneas que necesita, luego a un script awk para generar un archivo csv bien formateado y luego colocaría el archivo csv generado en mysql usando "LOAD DATA IN FILE"

También puedes consultar el proyecto phpsyslog-ng:http://www.gdd.net/index.php/PHP-Syslog-NG

información relacionada