Vamos a aprender los fundamentos de Grafana Tempo, un backend de trazado distribuido
El trazado distribuido es la forma de obtener información detallada sobre el rendimiento del sistema. Es una forma de visualizar el ciclo de vida de una solicitud que pasa por la aplicación. La aplicación puede consistir en múltiples servicios presentes en un único nodo o distribuidos entre nodos
Por lo tanto, al utilizar el rastreo distribuido, puede obtener una vista consolidada de todos los servicios. Y Grafana Tempo trata de eso
¿Qué es Grafana Tempo?
Hubo algunas actualizaciones importantes de Grafana Labs en la conferencia ObservabilityCon de este año, y Grafana Tempo fue una de ellas. Grafana Labs ha añadido un proyecto más, "Grafana Tempo", a su cartera de código abierto
Grafana Tempo es un backend de rastreo distribuido de código abierto que es altamente escalable y fácil de usar. Tempo es totalmente compatible con otros protocolos de rastreo como Zipkin, Jaeger, OpenTelemetry y OpenCensus. Actualmente, es compatible con el motor de descubrimiento de datos Tempo en Loki, plataformas de monitorización como Prometeo y Grafana. Grafana 7.3 ofrece una experiencia sin fisuras entre Grafana y Tempo
¿Por qué utilizar Tempo?
El tiempo se utiliza para correlacionar las métricas, las trazas y los registros. Hay situaciones en las que un usuario está recibiendo el mismo tipo de error varias veces. Si quiero entender lo que está pasando, necesitaré mirar las trazas exactas. Pero debido a la reducción del muestreo, parte de la información valiosa que podría estar buscando se habría perdido. Con Tempo, ahora no necesitamos reducir el muestreo de los datos de rastreo distribuidos. Podemos almacenar la traza completa en almacenamiento de objetos como S3 o GCS, lo que hace que Tempo sea muy rentable
Además, Tempo le permite una depuración/solución de problemas más rápida al permitirle pasar rápidamente de las métricas a las trazas relevantes de los registros específicos que han registrado algunos problemas.
A continuación se detallan las opciones de configuración utilizadas en Tempo
- Distribuidor: Se utilizan para configurar las opciones de recepción para recibir las trazas y luego enviarlas a los ingesters.
- Ingester: Estos se utilizan para crear lotes de trazas y los envía a TempoDB para su almacenamiento.
- Compactador: Transmite bloques desde el almacenamiento como S3 o GCS, los combina y los escribe de nuevo en el almacenamiento.
- Almacenamiento: Se utiliza para configurar TempoDB. Necesita mencionar el nombre del backend de almacenamiento (S3 o GCS) con otros parámetros en esta configuración.
- Lista de miembros: Se utiliza para la coordinación entre los componentes de Tempo.
- Autenticación/Servidor: Tempo utiliza el servidor Weaveworks/Common. Se utiliza para establecer las configuraciones del servidor.
Arquitectura de Tiempo
El diagrama anterior muestra la arquitectura de funcionamiento de Grafana Tempo
En primer lugar, el distribuidor recibe trazas en diferentes formatos desde Zipkin, Jaeger, OpenTelemetry, OpenCensus y envía estas trazas a los ingesters mediante hashing del ID de la traza. A continuación, el ingester crea lotes de trazas que se denominan bloques
Luego envía esos bloques al backend de almacenamiento (S3/GCS). Cuando tenga un ID de traza que desee solucionar, utilizará la interfaz de usuario de Grafana y pondrá el ID de traza en la barra de búsqueda. Ahora el consultor se encarga de obtener los detalles, ya sea del ingester o del almacenamiento de objetos, sobre el ID de rastreo que ha introducido
En primer lugar, comprueba si ese ID de rastro está presente en el ingester; si no lo encuentra, entonces comprueba el backend de almacenamiento. Utiliza un simple punto final HTTP para exponer las trazas. Mientras tanto, el compactador toma los bloques del almacenamiento, los combina y los envía de vuelta al almacenamiento para reducir el número de bloques en el almacenamiento
Configurar Tempo utilizando Docker
En esta sección, voy a configurar Grafana Tempo paso a paso utilizando Docker. En primer lugar, necesita un backend Tempo, así que configure una red docker
[
geekflare@geekflare ~]$ docker network create docker-tempo
Descargue el archivo de configuración de Tempo
[geekflare@geekflare ~
]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml
A continuación se muestra la lista de opciones de protocolo que obtiene
Protocolo | Puerto |
Abrir telemetría | 55680 |
Jaeger - Compacto de segunda mano | 6831 |
Jaeger - Binario de segunda mano | 6832 |
Jaeger - Tienda de segunda mano | 14268 |
Jaeger - GRPC | 14250 |
Zipkin | 9411 |
Utilizando el archivo de configuración tempo, ejecute un contenedor docker. Aquí estoy eligiendo el formato Jaeger - Thrift Compact (puerto 6831) para enviar las trazas
[geekflare@geekflare ~]$ docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo-local.yaml:/etc/tempo-local.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo-local.yaml
Ahora necesita ejecutar un contenedor de consulta tempo. Así que primero, descargue el archivo de configuración de la consulta tempo
[geekflare@geekflare ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yam
l
Utilizando el archivo de configuración de tempo query, ejecute un contenedor docker
[geekflare@geekflare ~]$ docker run -d --rm -p 16686:16686 -v $(pwd)/tempo-query.yaml:/etc/tempo-query.yaml --network docker-tempo grafana/tempo-query:latest --grpc-storage-plugin.configuration-file=/etc/tempo-query.yaml
Ahora podrá acceder a la interfaz de usuario de Jaeger en http://localhost:16686, como se muestra a continuación
En la barra de búsqueda, puede añadir el ID de traza de un registro que desee solucionar, y generará las trazas por usted
Ejecutar una aplicación de demostración en Tempo
Es hora de ejecutar un ejemplo de demostración dado por Grafana Tempo. Ejecutaré un ejemplo docker-compose, así que si está intentando lo mismo, debe tener docker-compose instalado en su máquina
Descargue el archivo zip de Grafana Tempo: https://github.com/grafana/tempo
Extráigalo en la carpeta de inicio y vaya al directorio docker-compose. Encontrará múltiples ejemplos de docker-compose; yo estoy utilizando el ejemplo en el que los datos de una aplicación se almacenan localmente
[geekflare@geekflare ~]$ cd tempo-master/example/docker-compose/
[geekflare@geekflare docker-compose]$ ls
docker-compose.loki.yaml docker-compose.s3.minio.yaml docker-compose.yaml etc
example-data readme.md tempo-link.png
Ejecute el siguiente comando para iniciar la pila
[geekflare@geekflare docker-compose]$ docker-compose up -d
Starting docker-compose_prometheus_1 ... hecho
Starting docker-compose_tempo_1 ... hecho
Starting docker-compose_grafana_1 ... hecho
Starting docker-compose_tempo-query_1 ... hecho
Starting docker-compose_synthetic-load-generator_1 ... hecho
Como puede ver, ha iniciado contenedores para Grafana, Loki, Tempo, Tempo-query y Prometeo
[geekflare@geekflare docker-compose]$ docker ps
ID DE CONTENEDOR IMAGEN ORDEN CREADO ESTADO PUERTOS NOMBRES
84cd557ce07b grafana/tempo-query:latest "/go/bin/query-linux..." hace 10 minutos Arriba 4 segundos 0.0.0.0:16686->16686/tcp docker-compose_tempo-query_1
f7cd9cf460d9 omnition/synthetic-load-generator:1.0.25 "./start.sh" hace 10 minutos Hasta 4 segundos docker-compose_synthetic-load-generator_1
6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 "/run.sh" hace 10 minutos Arriba 6 segundos 0.0.0.0:3000->3000/tcp docker-compose_grafana_1
d8574ea25028 grafana/tempo:latest "/tempo -config.file..." hace 10 minutos Arriba 6 segundos 0.0.0.0:49173->3100/tcp, 0.
0.0.0:
49172->14268/tcp docker-compose_tempo_1
5f9e53b5a09c
prom/prometheus:latest "/bin/prometheus --c..." Hace 10 minutos Hasta 6 segundos 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1
También puede ir a su navegador y verificar si Grafana, Jaeger UI, Prometheus se están ejecutando
Ahora synthetic-load-generator ejecutándose dentro de un contenedor está generando ids de trazas que está poniendo dentro de tempo. Ejecute el siguiente comando y podrá ver los logs
[docker-compose]$ docker-compose logs -f synthetic-load-generator
Adjuntando a docker-compose_synthetic-load-generator_1
synthetic-load-generator_1
| using params:
--jaegerCollectorUrl http://tempo:14268
synthetic-load-generator_1
| 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /product, 2880 traces/hr
synthetic-load-generator_1
| 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /cart, 14400 traces/hr
synthetic-load-generator_1
| 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /checkout, 480 traces/hr
synthetic-load-generator_1
| 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 17867942c5e161f2 for service frontend route /currency
synthetic-load-generator_1
| 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 3d9cc23c8129439f for service frontend route /shipping
synthetic-load-generator_1
Estos son los ids de traza que necesita pasar para generar trazas
Copio uno de los ids de traza y lo pongo en la barra de búsqueda de Jaeger UI
Puede ver que ha generado con éxito las trazas relacionadas con el id de traza que le he proporcionado
Conclusión
Así que eso fue todo acerca de Grafana Tempo. Siga adelante y comience a utilizar Tempo para generar trazas para entender las métricas y los problemas en sus registros en detalle
Todo se captura en Tempo, y no se perderá ningún detalle debido al downsampling, que solía ocurrir antes. Tempo resulta muy sencillo para un desarrollador o un equipo de producción comprender la causa raíz de los errores o advertencias que puedan aparecer en los registros.
-
Avi es un entusiasta de la tecnología con experiencia en tecnologías de tendencia como DevOps, Cloud Computing, Big Data y muchas más. Le apasiona aprender tecnologías de vanguardia y compartir sus conocimientos con los demás a través de... Seguir leyendo