Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Computación en nube Última actualización: 24 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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

arquitectura del tempo

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

jaeger ui - geekflare

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

traceid - nuevo

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

grafana

prometheus

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

traza nuevos

Copio uno de los ids de traza y lo pongo en la barra de búsqueda de Jaeger UI

traceid

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
    Autor
    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
Gracias a nuestros patrocinadores
Más lecturas sobre computación en nube
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder