Primeros pasos con Grafana Tempo

Aprendamos los fundamentos de Grafana Tempo, un backend de rastreo distribuido.

El rastreo 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 podría constar de múltiples servicios presentes en un solo nodo o distribuidos entre nodos.

Entonces, al usar el seguimiento distribuido, puede obtener una vista consolidada de todos los servicios. Y Grafana Tempo se trata de eso.

¿Qué es Grafana Tempo?

Hubo algunas actualizaciones importantes de Grafana Labs en la conferencia ObservabilityCon este año, y Grafana Tempo fue una de ellas. Grafana Labs ha agregado un proyecto más, «Grafana Tempo», a su cartera de código abierto.

Tiempo de Grafana es un backend de rastreo distribuido de código abierto que es altamente escalable y fácil de usar. Tempo es completamente 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 monitoreo como Prometheus y Grafana. Grafana 7.3+ ofrece una experiencia perfecta entre Grafana y Tempo.

¿Por qué usar tempo?

Tempo se utiliza para correlacionar las métricas, los seguimientos y los registros. Hay situaciones en las que un usuario recibe el mismo tipo de error varias veces. Si quiero entender lo que está pasando, tendré que mirar los rastros exactos. Pero debido a la reducción de resolución, parte de la información valiosa que podría estar buscando se habría perdido. Con Tempo, ahora no necesitamos reducir la muestra de los datos de rastreo distribuidos. Podemos almacenar el seguimiento completo en el almacenamiento de objetos como S3 o GCS, lo que hace que Tempo sea muy rentable.

Además, Tempo le permite una depuración/resolución de problemas más rápida al permitirle pasar rápidamente de las métricas a los rastros relevantes de los registros específicos que han registrado algunos problemas.

A continuación se muestran las opciones de configuración utilizadas en Tempo.

  • Distribuidor: Estos se utilizan para configurar las opciones de recepción para recibir tramos y luego enviarlos a los ingestadores.
  • Ingester: Estos se utilizan para crear lotes de seguimientos y los envía a TempoDB para su almacenamiento.
  • Compactador: transmite bloques desde el almacenamiento, como S3 o GCS, los combina y los vuelve a escribir en el almacenamiento.
  • Almacenamiento: Esto se usa para configurar TempoDB. Debe mencionar el nombre del backend de almacenamiento (S3 o GCS) con otros parámetros en esta configuración.
  • Memberlist: Se utiliza para la coordinación entre los componentes de Tempo.
  • Autenticación/Servidor: Tempo usa el servidor Weaveworks/Common. Se utiliza para establecer las configuraciones del servidor.

Arquitectura temporal

El diagrama anterior muestra la arquitectura de trabajo de Grafana Tempo.

En primer lugar, el distribuidor recibe tramos en diferentes formatos de Zipkin, Jaeger, OpenTelemetry, OpenCensus y envía estos tramos a los ingestores mediante el hash del ID de seguimiento. Luego, Ingester crea lotes de trazas que se denominan bloques.

Luego, envía esos bloques al almacenamiento de back-end (S3/GCS). Cuando tenga un ID de seguimiento que desee solucionar, utilizará la interfaz de usuario de Grafana y colocará el ID de seguimiento en la barra de búsqueda. Ahora, el consultador es responsable de obtener los detalles de la ingesta o del almacenamiento de objetos sobre el ID de seguimiento que ingresó.

En primer lugar, comprueba si ese ID de seguimiento está presente en el ingerido; si no lo encuentra, comprueba el backend de almacenamiento. Utiliza un punto final HTTP simple para exponer los rastros. Mientras tanto, el compactador toma los bloques del almacenamiento, los combina y los envía de regreso al almacenamiento para reducir la cantidad de bloques en el almacenamiento.

Configurar tempo usando Docker

En esta sección, configuraré Grafana Tempo paso a paso usando Docker. En primer lugar, necesita un backend de Tempo, así que configure una red docker.

[[email protected] ~]$ docker network create docker-tempo

Descargue el archivo de configuración de Tempo.

[[email protected] ~]$ 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
Telemetría abierta
55680
Jaeger – Compacto de ahorro
6831
Jaeger – Binario de ahorro
6832
Jaeger – Ahorro HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411

Con el archivo de configuración de tempo, ejecute un contenedor docker. Aquí estoy eligiendo Jaeger – Formato Thrift Compact (puerto 6831) para enviar las trazas.

[[email protected] ~]$ 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. Primero, descargue el archivo de configuración de consulta de tempo.

[[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

Con el archivo de configuración de consulta de tempo, ejecute un contenedor docker.

[[email protected] ~]$ 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 se 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 agregar el ID de seguimiento de un registro que desea solucionar y generará los seguimientos por usted.

Ejecución de una aplicación de demostración en Tempo

Es hora de ejecutar un ejemplo de demostración proporcionado por Grafana Tempo. Ejecutaré un ejemplo de docker-compose, por lo que si está intentando lo mismo, debe tener instalado docker-compose en su máquina.

Descarga el archivo zip de Grafana Tempo: https://github.com/grafana/tempo

Extráigalo a la carpeta de inicio y vaya al directorio docker-compose. Encontrará múltiples ejemplos de docker-compose; Estoy usando el ejemplo donde los datos de una aplicación se almacenan localmente.

[[email protected] ~]$ cd tempo-master/example/docker-compose/
[[email protected] 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.

[[email protected] docker-compose]$ docker-compose up -d
Starting docker-compose_prometheus_1 ... done
Starting docker-compose_tempo_1 ... done
Starting docker-compose_grafana_1 ... done
Starting docker-compose_tempo-query_1 ... done
Starting docker-compose_synthetic-load-generator_1 ... done

Puede ver, ha iniciado contenedores para Grafana, Loki, Tempo, Tempo-query y Prometheus.

[[email protected] docker-compose]$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS         PORTS                                                                                                      NAMES
84cd557ce07b   grafana/tempo-query:latest                 "/go/bin/query-linux…"   10 minutes ago   Up 4 seconds   0.0.0.0:16686->16686/tcp                                                                                   docker-compose_tempo-query_1
f7cd9cf460d9   omnition/synthetic-load-generator:1.0.25   "./start.sh"             10 minutes ago   Up 4 seconds                                                                                                              docker-compose_synthetic-load-generator_1
6d9d9fbdb8f1   grafana/grafana:7.3.0-beta1                "/run.sh"                10 minutes ago   Up 6 seconds   0.0.0.0:3000->3000/tcp                                                                                     docker-compose_grafana_1
d8574ea25028   grafana/tempo:latest                       "/tempo -config.file…"   10 minutes ago   Up 6 seconds   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…"   10 minutes ago   Up 6 seconds   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, el generador de carga sintética que se ejecuta dentro de un contenedor está generando identificadores de seguimiento que está poniendo dentro del tempo. Ejecute el siguiente comando y podrá ver los registros.

[[email protected] docker-compose]$ docker-compose logs -f synthetic-load-generator
Attaching to 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 ID de seguimiento que debe pasar para generar seguimientos.

Estoy copiando una de las identificaciones de seguimiento y colocándola en la barra de búsqueda de la interfaz de usuario de Jaeger.

Puede ver que ha generado con éxito los rastros relacionados con la identificación de rastro que proporcioné.

Conclusión

Así que eso fue todo sobre Grafana Tempo. Continúe y comience a usar Tempo para generar seguimientos para comprender las métricas y los problemas en sus registros en detalle.

Todo se captura en Tempo, y no se perderá ningún detalle debido a la reducción de resolución, que solía ocurrir antes. Tempo es sencillo para que un desarrollador o equipo de producción comprenda la causa raíz de los errores o advertencias que pueden ocurrir en los registros.