Hola, mi nombre es Eugene, soy un líder de equipo B2B en Citymobil. Una de las tareas de nuestro equipo es respaldar las integraciones para pedir un taxi a los socios y, para garantizar un servicio estable, siempre debemos comprender lo que sucede en nuestros microservicios. Y para esto necesita monitorear constantemente los registros.
En Citymobil, usamos la pila ELK (ElasticSearch, Logstash, Kibana) para trabajar con registros, y la cantidad de datos que llegan allí es enorme. Encontrar problemas en esta masa de solicitudes que pueden aparecer después de la implementación de un nuevo código es bastante difícil. Y para su identificación visual, Kibana cuenta con una sección de Dashboard.
Hay bastantes artículos sobre Habré con ejemplos de cómo configurar una pila ELK para recibir y almacenar datos, pero no hay materiales relevantes sobre la creación de un Tablero. Por lo tanto, quiero mostrar cómo crear una representación visual de datos basada en registros entrantes en Kibana.
Ajuste
Para que quede más claro, creé una imagen de Docker con ELK y Filebeat. Y se coloca en un recipiente un pequeño
Clonar el repositorio de configuración docker-compose
y configuración ELK, y ejecútelo con el comando docker-compose up
. Intencionalmente no agregar una clave -d
para ver el progreso de la pila ELK.
git clone https://github.com/et-soft/habr-elk
cd habr-elk
docker-compose up
Si todo está configurado correctamente, veremos una entrada en los registros (quizás no de inmediato, el proceso de lanzamiento de un contenedor con toda la pila puede demorar varios 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 localhost:5061
Kibana debería abrirse.
Lo único que necesitamos configurar es crear un patrón de índice para Kibana con información sobre qué datos mostrar. Para ello ejecutaremos una petición curl o realizaremos 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 GUI
Para configurar, seleccione la sección Descubrir en el menú de la izquierda y acceda a la página de creación de patrones de Índice.
Al hacer clic en el botón "Crear patrón de índice", accedemos a la página de creación de índice. En el campo "Nombre del patrón de índice", ingrese "logstash-*". Si todo está configurado correctamente, debajo de Kibana se mostrarán los índices que se incluyen en la regla.
En la página siguiente, seleccione el campo clave con una marca de tiempo, en nuestro caso es @timestamp
.
Esto abrirá la página de configuración del índice, pero no se requiere ninguna otra acción de nuestra parte en este momento.
Ahora podemos ir de nuevo a la sección Descubrir, donde veremos las entradas de registro.
Panel De Control
En el menú de la izquierda, haga clic en la sección de creación de Dashboard y acceda a la página correspondiente.
Haga clic en "Crear nuevo tablero" y acceda a la página para agregar objetos al Tablero.
Haga clic en el botón "Crear nuevo" y el sistema le pedirá que seleccione el tipo de visualización de datos. Kibana tiene una gran cantidad de ellos, pero veremos cómo crear una representación gráfica de la "Barra vertical" y una "Tabla de datos" tabular. Otros tipos de presentación se configuran de manera similar.
Algunos objetos disponibles están etiquetados como B y E, lo que significa que el formato es experimental o está en pruebas beta. Con el tiempo, el formato puede cambiar o desaparecer por completo de Kibana.
Barra vertical
Para el ejemplo de la "Barra vertical", creemos un histograma de la proporción de estados de respuesta exitosos y no exitosos de nuestro servicio. Al final de la configuración, obtenemos el siguiente gráfico:
Clasificaremos todas las solicitudes con un estado de respuesta < 400 como exitosas y >= 400 como problemáticas.
Para crear un gráfico de "barra vertical", debemos seleccionar una fuente de datos. Seleccione el patrón de índice que creamos anteriormente.
De forma predeterminada, aparecerá un único gráfico sólido después de seleccionar una fuente de datos. Vamos a configurarlo.
En el bloque "Cubos", presione el botón "Agregar", seleccione "X-asis" y configure el eje X. Dejemos a un lado las marcas de tiempo para la recepción de entradas en el registro. En el campo "Agregación", seleccione "Histograma de fecha", y en el "Campo" seleccione "@timestamp", indicando el campo de tiempo. Dejemos "Intervalo mínimo" en el estado "Auto" y se ajustará automáticamente a nuestra pantalla.
Al hacer clic en el botón "Actualizar", veremos un gráfico con el número de solicitudes cada 30 segundos.
Ahora configuremos las columnas a lo largo del eje Y. Ahora estamos mostrando el número total de solicitudes en el intervalo de tiempo seleccionado.
Cambiemos el valor de "Agregación" a "Sum Bucket", lo que nos permitirá combinar datos para solicitudes exitosas y no exitosas. En el bloque Cubo -> Agregación, seleccione la agregación por "Filtros" y configure el filtrado por "statusCode >= 400". Y en el campo "Etiqueta personalizada", indicamos nuestro nombre del indicador para una visualización más comprensible 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 solicitudes de problemas.
Si hace clic en el círculo al lado de la leyenda, aparecerá una ventana en la que puede cambiar el color de las columnas.
Ahora agreguemos datos sobre solicitudes exitosas al gráfico. En la sección "Métricas", haga clic en el botón "Agregar" y seleccione "Eje Y".
En la métrica creada, hacemos la misma configuración que para las solicitudes erróneas. Solo en el filtro especificamos "statusCode < 400".
Al cambiar el color de la nueva columna, obtenemos una visualización de la proporción de solicitudes exitosas y problemáticas.
Al hacer clic en el botón "Guardar" en la parte superior de la pantalla y especificar el nombre, veremos el primer gráfico en el Tablero.
Tabla de Datos
Ahora considere la vista tabular "Tabla de datos". Vamos a crear una tabla con una lista de todas las URL que se solicitaron y el número de esas solicitudes. Al igual que con el ejemplo de la barra vertical, primero seleccionamos una fuente de datos.
Después de eso, se mostrará una tabla con una columna en la pantalla, que muestra el número total de solicitudes para el intervalo de tiempo seleccionado.
Solo cambiaremos el bloque "Cubos". Haga clic en el botón "Agregar" y seleccione "Dividir filas".
En el campo "Agregación", seleccione "Términos". Y en el campo que aparece "Campo" seleccione "url.keyword".
Especificando el valor de "Url" en el campo "Etiqueta personalizada" y haciendo clic en "Actualizar", obtendremos la tabla deseada con el número de solicitudes de cada una de las URL para el período de tiempo seleccionado.
En la parte superior de la pantalla, haga clic en el botón "Guardar" nuevamente y especifique el nombre de la tabla, por ejemplo, Urls. Volvamos al Tablero y veamos ambas vistas creadas.
Trabajar con el panel
Al crear el Tablero, configuramos solo los parámetros de la vista principal en la configuración del objeto de visualización. No tiene sentido especificar datos para filtros en objetos, por ejemplo, "rango de fechas", "filtrado por agente de usuario", "filtrado por país de solicitud", etc. Es mucho más conveniente especificar el período de tiempo deseado o establecer el filtrado necesario en el panel de consulta, que se encuentra sobre los objetos.
Los filtros agregados en este panel se aplicarán a todo el Tablero y todos los objetos de visualización se reconstruirán de acuerdo con los datos filtrados reales.
Conclusión
Kibana es una poderosa herramienta que le permite visualizar cualquier dato de manera conveniente. Traté de mostrar la configuración de los dos tipos principales de pantalla. Pero otros tipos se configuran de manera similar. Y la gran cantidad de configuraciones que dejé "detrás de escena" le permitirán personalizar los gráficos de manera muy flexible para satisfacer sus necesidades.
Fuente: habr.com