es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Plugin de entrada Logstash S3: filtrar según la hora de modificación.

Tengo un contenedor de Logstash configurado para leer objetos de S3.
El requisito es filtrar objetos antiguos, digamos que los objetos anteriores a 3 meses deben ser eliminados.

Me di cuenta de que puedo exponer los metadatos de s3, así que tengo los siguientes metadatos en cada evento:

"@metadata" => {
    "s3" => {
        "etag" => ""xxx"",
        "content_length" => 33,
        "metadata" => {},
        "version_id" => "null",
        "accept_ranges" => "bytes",
        "last_modified" => 2021-12-21T13:30:28.000Z,
}

¿Quizás hay un código de filtro/ruby que puedo usar para filtrar objetos “antiguos” y eliminarlos?

¡Cualquier ayuda es apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Con los metadatos disponibles en cada evento, puedes usar un complemento de filtro en Logstash para comparar la marca de tiempo last_modified del objeto con la fecha actual y descartar eventos que tengan más de tres meses de antigüedad. Aquí tienes un ejemplo de configuración del filtro en Logstash:

    filter { 
      if [@metadata][s3][last_modified] { 
        # Convertir last_modified a una marca de tiempo 
        ruby { 
          code => " 
             require 'time' 
             timestamp = Time.parse(event.get('[@metadata][s3][last_modified]')).to_i 
             event.set('timestamp', timestamp) 
          " 
        } 
    
        # Descartar eventos más antiguos de tres meses 
        if [timestamp] < (Time.now.to_i - 90*24*60*60) { 
           drop {} 
        } 
    
        # Eliminar el campo timestamp 
        mutate { 
           remove_field => ["timestamp"] 
        } 
      } 
    }
    

    Este filtro convierte la marca de tiempo last_modified en una marca de tiempo Unix y la almacena en un nuevo campo llamado “timestamp”. Luego compara esta marca de tiempo con la hora actual menos el número de segundos en tres meses (90 días x 24 horas/día x 60 minutos/hora x 60 segundos/minuto) y descarta los eventos que son más antiguos. Por último, elimina el campo “timestamp” del evento.

    Puedes personalizar esta configuración de filtro según tus necesidades específicas, como filtrar objetos basados en su nombre de archivo o filtrar según un campo de marca de tiempo diferente.

Comments are closed.