Sé que suena extraño, pero necesito un sistema de archivos más lento o en caché.
Tengo muchos firewalls que registran sus datos en un par de máquinas virtuales Linux que escriben estos archivos en sus discos formateados ext3 'locales' (en realidad, FC SAN adjuntos) y también reenvían los mensajes a nuestros servidores Splunk.
El problema es que el servidor syslog está escribiendo estos mensajes syslog como cientos, a veces miles, de pequeñas escrituras de ~4k por segundo en nuestro FC SAN, que puede manejar esta carga de trabajo ahora mismo, pero nuestro tráfico FW crecerá al menos un factor del 5000% (realmente) en los próximos meses y eso será un dolor para la SAN, quiero solucionar la causa raíz antes de que sea un problema.
Así que necesito ayuda para encontrar una manera de almacenar en caché o retener estas escrituras de alguna manera desde los discos "físicos" para que las máquinas virtuales ejecuten escrituras más grandes, pero menos frecuentes; no hay forma de evitar estas escrituras, pero hay no es necesario que haga tantos pequeños.
He analizado las distintas opciones de ext3, configurando noatime y nodiratime, pero eso no solucionó mucho el problema. Obviamente estoy investigando otros sistemas de archivos, pero pensé en descartarlo en caso de que otros tengan el mismo problema en el futuro.
Ah, y no puedo simplemente reenviar estos mensajes a Splunk, nuestro equipo de firewall insiste en que estén en su formato original para fines de diagnóstico.
Respuesta1
¿Quizás commit
la opción de montaje ext3 te ayudaría? Por ejemplo, commit=60
eliminaría todos los datos y metadatos solo una vez por minuto.
Advertencia obligatoria: esto podría provocar una pérdida de datos de hasta un minuto (si pasa el valor commit=60).
Respuesta2
Sistema de archivos: deshabilite las barreras de escritura si sus dispositivos las están usando y deshabilite las actualizaciones periódicas en todos los ámbitos.
Pero es probable que también pueda ajustar su syslog a expensas de una mayor pérdida de datos en caso de una falla (energía, etc.).
Directivas de ejemplo de syslog-ng
(que pueden no ser las que está utilizando):
flush_lines()
Especifica cuántas líneas se envían a un destino a la vez. Syslog-ng espera a que se acumule esta cantidad de líneas y las envía en un solo lote.flush_timeout()
Especifica el tiempo que syslog-ng espera a que se acumulen líneas en su búfer de salida. Consulte la opción flux_lines para obtener más información.
El destino en este caso es un archivo de disco.