
Hola, me llamo Evgeny, soy el líder del equipo de B2B en Citymobil. Una de las tareas de nuestro equipo es mantener las integraciones para el pedido de taxis de los socios, y para garantizar un servicio estable siempre debemos entender qué está sucediendo en nuestros microservicios. Y para ello, necesitamos supervisar constantemente los registros.
En Citymobil, para trabajar con los registros utilizamos el stack ELK (ElasticSearch, Logstash, Kibana), y el volumen de datos que llega allí es enorme. Encontrar en esta masa de solicitudes problemas que pueden surgir después del despliegue de nuevo código es bastante complicado. Y para visualizar estos problemas, en Kibana hay una sección llamada Dashboard.
En Habr, hay bastantes artículos con ejemplos de cómo configurar el stack ELK para recibir y almacenar datos, pero no hay material relevante sobre la creación de un Dashboard. Por lo tanto, quiero mostrar cómo crear una representación visual de los datos en Kibana basada en los registros entrantes.
Configuración
Para que sea más claro, he creado una imagen de Docker con ELK y Filebeat. Y he colocado en el contenedor un pequeño programa en Go, que generará registros de prueba para nuestro ejemplo. No voy a describir en detalle la configuración de ELK, en Habr ya hay suficiente información sobre esto.
Clonamos el repositorio con la configuración docker-compose y ajustes de ELK, y lo iniciamos con el comando docker-compose up. Intencionalmente no añado la clave -d, para poder ver el proceso de funcionamiento del stack ELK.
git clone https://github.com/et-soft/habr-elk
cd habr-elk
docker-compose up
Si todo está configurado correctamente, en los registros veremos una entrada (posiblemente no de inmediato, el proceso de inicio del contenedor con todo el stack puede tardar unos minutos):
{"type":"log","@timestamp":"2020-09-20T05:55:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at http://0:5601"}
En la dirección localhost:5061 debería abrirse Kibana.


Lo único que necesitamos configurar es crear un patrón de índice para Kibana con información sobre qué datos deben mostrarse. Para ello, realizaremos una solicitud curl o haremos una serie de acciones en la interfaz gráfica.
$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern'
-H 'Content-Type: application/json'
-H 'kbn-xsrf: true'
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
Creación de un patrón de índice a través de la interfaz gráfica
Para la configuración, seleccionamos en el menú de la izquierda la sección Discover, y llegamos a la página de creación del patrón de índice.

Al hacer clic en el botón “Create index pattern”, llegamos a la página de creación del índice. En el campo “Index pattern name”, introducimos “logstash-*”. Si todo está configurado correctamente, Kibana mostrará los índices que cumplen con la regla en la parte inferior.

En la siguiente página seleccionamos el campo clave con la marca de tiempo, en nuestro caso es @timestamp.

Como resultado, aparecerá una página de configuración de índice, pero ahora no se requieren acciones adicionales de nuestra parte.

Ahora podemos volver a la sección Discover, donde veremos los registros de logs.

Tablero
En el menú de la izquierda, hacemos clic en la sección de creación de Dashboard y accedemos a la página correspondiente.

Hacemos clic en «Crear nuevo dashboard» y llegamos a la página para agregar objetos al Dashboard.

Hacemos clic en el botón «Crear nuevo», y el sistema nos pedirá elegir el tipo de visualización de datos. En Kibana hay una gran cantidad, pero vamos a considerar la creación de la representación gráfica «Vertical Bar» y la tabla «Data Table». Los otros tipos de visualización se configuran de manera similar.

Algunos de los objetos disponibles tienen etiquetas B y E, lo que significa que su formato es experimental o está en fase beta. Con el tiempo, el formato puede cambiar o desaparecer completamente de Kibana.
Barra Vertical
Como ejemplo, para «Vertical Bar» crearemos un histograma que muestra la relación entre estados de respuesta exitosos y no exitosos de nuestro servicio. Al finalizar la configuración, obtendremos el siguiente gráfico:

Consideraremos como exitosos todos los pedidos con un estado de respuesta = 400.
Para crear el gráfico «Vertical Bar», necesitamos seleccionar la fuente de datos. Elegimos el Patron de Índice que creamos anteriormente.

Por defecto, después de seleccionar la fuente de datos, aparecerá un solo gráfico continuo. Vamos a configurarlo.

En el bloque «Buckets», hacemos clic en el botón «Agregar», elegimos «Eje X» y configuramos el eje X. Lo ajustaremos para que muestre las marcas de tiempo de llegada de los registros en el log. En el campo «Aggregación», seleccionamos «Date Histogram» y, en «Campo», elegimos «@timestamp», que indica el campo temporal. Dejamos el «Intervalo mínimo» en «Auto», y se ajustará automáticamente a nuestra visualización.

Al hacer clic en el botón «Actualizar», veremos un gráfico con la cantidad de solicitudes cada 30 segundos.

Ahora configuraremos las columnas en el eje Y. Actualmente, se muestra el número total de solicitudes en el intervalo de tiempo seleccionado.

Cambiaremos el valor de «Aggregación» a «Sum Bucket», lo que nos permitirá combinar los datos de las solicitudes exitosas y no exitosas. En el bloque Bucket -> Aggregation, elegimos la agregación por «Filters» y establecemos el filtrado por «statusCode >= 400». En el campo «Etiqueta personalizada», indicamos nuestro nombre para que sea más claro en la leyenda del gráfico y en la lista general.

Al hacer clic en el botón «Actualizar» debajo del bloque de configuración, obtendremos un gráfico con las solicitudes problemáticas.

Si haces clic en el círculo junto a la leyenda, se abrirá una ventana donde podrás cambiar el color de las columnas.

Ahora añadiremos al gráfico los datos sobre las solicitudes exitosas. En la sección «Métricas», hacemos clic en el botón «Agregar» y seleccionamos «Eje Y».

En la métrica creada, realizamos las mismas configuraciones que para las solicitudes erróneas. Solo que en el filtro indicamos «statusCode < 400».

Al cambiar el color de la nueva columna, obtendremos una representación de la relación entre solicitudes problemáticas y exitosas.

Al hacer clic en el botón «Guardar» en la parte superior de la pantalla e indicar un nombre, veremos el primer gráfico en el Dashboard.

Tabla de Datos
Ahora veamos la representación tabular «Tabla de Datos». Crearemos una tabla con la lista de todas las URL a las que se hicieron solicitudes y el número de esas solicitudes. Al igual que en el ejemplo con la Barra Vertical, primero seleccionamos la fuente de datos.

Después de esto, en la pantalla se mostrará una tabla con una columna que muestra el número total de solicitudes durante el intervalo de tiempo seleccionado.

Solo modificaremos el bloque «Buckets». Hacemos clic en el botón «Agregar» y seleccionamos «Dividir filas».

En el campo «Agregación» seleccionamos «Términos». Y en el campo que aparece, elegimos «url.keyword».

Al indicar en el campo «Etiqueta personalizada» el valor «Url» y hacer clic en «Actualizar», obtendremos la tabla deseada con el número de solicitudes para cada URL durante el intervalo de tiempo seleccionado.

En la parte superior de la pantalla nuevamente haremos clic en el botón «Guardar» e indicaremos el nombre de la tabla, por ejemplo, Urls. Regresaremos al Dashboard y veremos ambas representaciones creadas.

Trabajando con el Dashboard
Al crear un Dashboard, en las configuraciones de los objetos de visualización, solo establecimos los parámetros básicos de vista. No tiene sentido indicar en los objetos los datos para los filtros, por ejemplo, «rango de fechas», «filtrado por user agent», «filtrado por país de solicitud», etc. Es mucho más conveniente especificar el intervalo de tiempo deseado o establecer el filtrado necesario en el panel de solicitudes que se encuentra encima de los objetos.
![]()
Los filtros añadidos en este panel se aplicarán a todo el Dashboard, y todos los objetos de visualización se reestructurarán de acuerdo con los datos filtrados actuales.
Conclusión
Kibana es una poderosa herramienta que permite visualizar cualquier dato de manera conveniente. He tratado de mostrar la configuración de dos tipos principales de visualización. Pero otros tipos se configuran de manera similar. Y la abundancia de configuraciones que dejé «fuera de cámara» te permitirá personalizar gráficos de manera muy flexible según tus necesidades.
Fuente: habr.com
