}

img-all3

En idealista necesitamos monitorizar el uso que se hace tanto del API para aplicaciones móviles como del API pública. Para ello, tras evaluar distintas opciones, finalmente optamos por las siguientes herramientas, capaces de gestionar sin problemas los 8M de llamadas diarias que reciben nuestras APIs:

Con todo este stack desde el API solo tenemos que interceptar y serializar las peticiones que llegan para posteriormente encolarlas en Kafka.

Apache Kafka

Inicialmente utilizamos Fluentd para transmitir los eventos hasta Elasticsearch, pero finalmente optamos por Kafka porque la latencia era menor.

Kafka nos permite desentendernos de la forma en que se persisten los eventos: desde el API simplemente encolamos los datos.

Posteriormente, unos consumidores van leyendo los eventos de Kafka y persistiéndolos, en este caso en Elasticsearch. Todo esto ocurre de forma asíncrona para evitar penalizar las llamadas al API y consiguiendo unas estadísticas near real time.

Kibana

img-map

Todos estos datos se visualizan en Kibana. Es un plugin para Elasticsearch que permite crear múltiples dashboards, con tablas, gráficos de barras, apilados, de tarta, o incluso mapas.

Algunos ejemplos de formas en que visualizamos las peticiones al API:

  • Mostrando los parámetros latitud y longitud de las búsquedas punto-radio en un mapa
  • Gráfico de barras agrupando los HTTP status codes (404, 401, 500, etc)
  • Peticiones por versión y plataforma de la aplicación
  • Histograma con la evolución de los tiempos de respuesta del API
  • Llamadas más usadas
  • IPs que más tráfico generan

Dado que Kibana permite realizar consultas con sintaxis lucene directamente a los índices de Elasticsearch, podemos no solo ver estadísticas sino analizar y buscar problemas muy concretos. Por ejemplo, una llamada que haya ocasionado un error interno o una búsqueda con unos parámetros específicos.

img3

De hecho los filtros y las visualizaciones se pueden combinar así que podemos ver cualquiera de estas gráficas para un subconjunto de llamadas, por ejemplo filtradas por plataforma (iOS o Android), por http status de la respuesta, o seguir las llamadas que esté haciendo una IP concreta.

ElastAlert

Y completando el stack tenemos un sistema de alertas para detectar comportamientos extraños y errores en el API.

Utilizamos ElastAlert, que permite hacer consultas a Elasticsearch y en función de los resultados, lanzar o no una alerta. La alerta puede ser un email, una tarea en Jira, un mensaje en Hipchat/Slack…

Es una herramienta realmente flexible ya que con solo unos archivos de configuración se pueden crear reglas de todo tipo.

Por ejemplo podemos configurar alertas en caso de que el ratio de errores suba, o si hay un pico de llamadas, o cualquier otra anomalía.

Bola extra

Hace poco lanzamos la funcionalidad ‘dibuja tu zona‘ y el hecho de tener los datos de las llamadas en el Elastic nos permite hacer visualizaciones rápidas con estos datos, como por ejemplo ver las zonas que van dibujando los usuarios en tiempo real.

shape-searches

 

Deja una respuesta