Estoy usando rsyslog para obtener registros de haproxy y colocarlos en logstash para elasticsearch/kibana.
Todo funcionaba bien, pero encontré algo extraño en rsyslog.
Descubrí que me faltan datos en kibana. La razón es rsyslog.
La cola en el disco estuvo retenida y detenida durante algunos días
Me faltan datos del fin de semana, pero ayer y hoy, todo está bien.
Rsyslog ahora obtiene datos y los coloca en logstash, pero parece olvidarse de los datos almacenados en su propia cola (creo que ve que son antiguos y los ignora, hay un parámetro para eso y tal vez se usa algún valor predeterminado).
En este momento, logstash está inactivo, puedo forzarle muchos datos adicionales de la cola rsyslog
Entonces lo que quiero hacer es:
Intento vaciar temporalmente esta cola (como postfix vaciado) o si esto no es posible, ¿qué debo intentar hacer?
Mi configuración de rsyslog es:
$ActionSendTCPRebindInterval 500
$ActionQueueType LinkedList
$ActionQueueFileName kibana
$ActionQueueMaxFileSize 100m
$ActionQueueMaxDiskSpace 100g
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
Respuesta1
La cola de disco de Rsyslog podría atascarse debido a un cierre incorrecto, lo que provocaría que .qi
el archivo en el directorio de spool no esté sincronizado con los archivos de spool.
En tal caso, vaciar/quitar la cola del disco puede requerir la ejecución de un script adicional proporcionado por Rsyslog (pero no incluido en los paquetes de distribución). De acuerdo ahttps://www.rsyslog.com/doc/concepts/queues.html#disk-queues
Si pierde o necesita las estructuras de mantenimiento y tiene todos sus fragmentos de cola, puede usar el script perl incluido en el paquete rsyslog para generarlo. Uso:
recover_qi.pl -w $WorkDirectory -f QueueFileName -d 8 > QueueFileName.qi
¿Dónde $WorkDirectory
está el valor de queue.spoolDirectory
y QueueFileName
es el valor de queue.fileName
? Ver también:https://www.rsyslog.com/doc/rainerscript/queue_parameters.html
Ejemplo:
./recover_qi.pl -w /var/spool/rsyslog -f rsyslog_backlog -d 8 > /var/spool/rsyslog/rsyslog_backlog.qi
(Podría ser una buena idea detener rsyslog antes de ejecutar el script).
Aquí está recover_qi.pl
el repositorio git de Rsyslog (haga clic en "sin procesar" para obtener el archivo):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl