Instalé Logstash para analizar archivos apache. Me tomó bastante tiempo conseguir la configuración correcta y siempre probé registros reales. Noté (como dice la documentación) que logstash "recuerda" dónde estaba en un archivo. Ahora mis configuraciones están bien y me gustaría que Logstash se "olvidara". Esto parece más difícil de lo que pensé. Ya hice lo siguiente:
usado:
start_position => "beginning"
eliminó la carpeta "datos" completa de elastissearch (y la detuvo primero)
miró con qué archivos abrió logstash
lsof -p PID
y eliminó todo lo que prometía (en mi caso/tmp/jffi*.tmp
)
Aún así, Logstash no olvida y analiza solo los archivos "nuevos" en la carpeta donde están los registros
¿Algunas ideas?
/opt/logstash/data/plugins/inputs/file
Respuestas:
Por defecto, logstash escribe la última posición en un archivo de registro que generalmente reside en
$HOME/.sincedb
. Se puede engañar a Logstash haciéndole creer que nunca analizó el archivo de registro especificando/dev/null
comosincedb_path
.Aquí la parte del Archivo de entrada de documentación .
Ejemplo de configuración
fuente
sincedb_path => "NUL"
para obtener el mismo efecto. Detalles aquíingnore_older => 0
para que logstash los tome sin importar la fecha. De forma predeterminada, si los archivos son anteriores, se ignorarán las 24 horas.ignore_older => 0
trabajos en logstash! Me ha atascado el mismo problema que el interrogador. ¡Parece ser un hallazgo no obvio! (Al buscar en Google "ignore_older" y "logstash" solo aparecen páginas en filebeat, no pude encontrar ningún rastro de cómo lidiar con esto en logstash)ignore_older
en la configuración de filebeat, filbeat se ve obligado a leer todo el archivo de nuevo elastic.co/guide/en/beats/filebeat/current/...El historial de almacenamiento de archivos del complemento de "cola" en el archivo sincedb, predeterminado: en $ HOME / .sincedb *, consulte http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
El archivo since db contiene una línea similar a la siguiente:
Entonces, si desea analizar nuevamente un archivo completo, debe:
ls -i yourFile | awk '{print $1}'
)Con la clave
start_position => "beginning"
, Logstash analizará todo el archivo.Ejemplo de un archivo sincedb:
.sincedb_7a7413a84171aa550d5318c17fd756e9
el nombre contiene sincedb_ y un MD5 (Digest :: MD5.hexdigest) de todos los directorios en la ruta de la clave ( http://logstash.net/docs/1.3.3/inputs/file#path ). Consulte el código del archivo del complemento: https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105fuente
start_position => "beginning"
, la documentación dice:> Esta opción solo modifica situaciones de "primer contacto" donde un archivo es nuevo y no se ha visto antes. Si un archivo ya se ha visto antes, esta opción no tiene ningún efecto.Logstash mantendrá el registro en formato
$HOME/.sincedb_*
. Puede eliminar todo.sincedb
y reiniciar logstash, Logstash analizará el archivo.fuente
Combinando todas las respuestas, supongo que esta es la mejor manera de analizar archivos. Hice lo mismo para mis pruebas.
Para una prueba rápida, en lugar de
ignore_older
, también puedetouch /tmp/access_log
cambiar la marca de tiempo del archivo.fuente
ignore_older => 0
hará lo contrario.Si está utilizando logstash-forwarder, busque el
.logstash-forwarder
archivo en su hogar :fuente
/var/lib/logstash-forwarder/
.Después de eliminarlo
$HOME/.sincedb_*
, todavía no estaba ingiriendo datos para mí.Después de probar un montón de cosas , eliminé todo menos el
.conf
archivo principal/etc/logstash/conf.d
y reinicié Logstash, y todo funcionó. Solo puedo asumir que había algo en uno de los.conf
archivos que logstash estaba colgando silenciosamente.fuente
En realidad, volver a analizar cada vez es muy costoso si el archivo contiene muchos datos. Así que debes tener cuidado antes de hacer esto. Si queremos forzarlo a analizar nuevamente, establezca el parámetro dentro del bloque de entrada
Esta opción no almacenará el archivo .sincedb y logstash analizará cada vez. Pero si desea analizar ocasionalmente, no cada vez, lo que puede hacer es eliminar manualmente la ruta .sinceDb que se crea al analizar el archivo. Por lo general, está presente en el directorio de inicio como un archivo oculto si no es un usuario raíz, de lo contrario, está en el directorio raíz. También puede establecer sincedb_path en otra ubicación para rastrear este archivo fácilmente.
fuente
Si desea evitar jugar con las opciones de logstash, descubrí que cambiar el nombre o eliminar el archivo de registro existente y crear un nuevo archivo a partir del contenido del archivo anterior engañará a logstash para que vuelva a indexarlo.
fuente
Lo encontré en mi directorio de inicio, pero después de eliminarlo, logstash se negó a volver a seleccionar los archivos de registro existentes. La forma en que lo hice funcionar fue agregando
a mi complemento de archivo. Creo que para restablecer cada vez, solo cambie la ruta de sincedb_path
fuente
si usa tar.gz install filebeat, puede eliminar este archivo
$FilebeatPath/data/registry/filebeat/data.json
, y volver a ejecutar el filebeatfuente
Pruebe eliminando la
/var/lib/logstash
carpeta en su ENVfuente
El nuevo directorio de logstash versión 5 está en
La definición de path.data está en logstash.yml
fuente