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.

Elasticsearch no está devolviendo los datos de los últimos 30 minutos.

Necesito obtener los datos de los últimos 30 minutos del índice de Elastic Search. Estoy leyendo esta consulta desde el plugin de entrada de Logstash. He utilizado now-30m, pero no me está dando los resultados correctos. Por favor, ayúdame a identificar lo que me falta aquí.

Consulta:

"query": {
   "bool": {
     "filter": [
       {
         "range": {
           "createdDate": {
             "gte": "now-30m"
           }
         }
       }
     ]
   }
 }

Los datos de salida tienen la siguiente hora que no está en el rango de los 30 minutos:

"createdDate": "2021-11-26T09:10:38.524Z",
"createdDate": "2021-11-26T06:44:58.520Z",

Detalles del campo en el índice:

"createdDate": {
"type": "date"
},
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el formato de la marca temporal de tu índice. Elastic Search utiliza el huso horario UTC por defecto, por lo que cuando utilizas ahora-30m, calcula la diferencia horaria a partir de la hora UTC actual. Sin embargo, las marcas de tiempo de tu índice están en un huso horario o formato diferente, lo que provoca que la consulta devuelva resultados incorrectos.

    Para solucionarlo, puedes intentar especificar explícitamente el huso horario en tu consulta añadiendo el parámetro time_zone a la consulta de rango. Por ejemplo:

    "query": {
      "bool": {
        "filter": [
          {
            "range": {
              "createdDate": {
                "gte": "now-30m",
                "time_zone": "+05:30" // reemplaza con tu desplazamiento horario
              }
            }
          }
        ]
      }
    }
    

    Alternativamente, puedes convertir las marcas de tiempo de tu índice al formato UTC y luego utilizar la palabra clave now para buscar los últimos 30 minutos. Puedes utilizar el plugin de filtro de fecha en Logstash para lograr esto.

    filter {
      date {
        match => ["createdDate", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"] # ajusta el formato según tu marca de tiempo
        timezone => "UTC"
        target => "@timestamp"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["localhost:9200"]
        index => "tuíndice-%{+YYYY.MM.dd}"
      }
    }
    

    Una vez que hayas convertido las marcas de tiempo a UTC, tu consulta original debería funcionar como se esperaba.

Comments are closed.