Iniziare con Grafana Tempo

Pubblicato: 2021-04-19

Impariamo i fondamenti di Grafana Tempo, un backend di tracciamento distribuito.

La traccia distribuita è il modo per ottenere informazioni dettagliate sulle prestazioni del sistema. È un modo per visualizzare il ciclo di vita di una richiesta che passa attraverso l'applicazione. L'applicazione potrebbe essere costituita da più servizi presenti su un singolo nodo o distribuiti tra i nodi.

Quindi, utilizzando la traccia distribuita, puoi ottenere una visione consolidata di tutti i servizi. E Grafana Tempo è tutto questo.

Cos'è Grafana Tempo?

Ci sono stati alcuni importanti aggiornamenti da Grafana Labs alla conferenza ObservabilityCon di quest'anno e Grafana Tempo è stato uno di questi. Grafana Labs ha aggiunto un altro progetto, "Grafana Tempo", al proprio portfolio open source.

Grafana Tempo è un backend di tracciamento distribuito open source altamente scalabile e facile da usare. Tempo è completamente compatibile con altri protocolli di tracciamento come Zipkin, Jaeger, OpenTelemetry e OpenCensus. Attualmente, supporta il motore di rilevamento dei dati Tempo in Loki, piattaforme di monitoraggio come Prometheus e Grafana. Grafana 7.3+ offre un'esperienza senza soluzione di continuità tra Grafana e Tempo.

Perché usare Tempo?

Tempo viene utilizzato per correlare le metriche, le tracce e i log. Ci sono situazioni in cui un utente riceve lo stesso tipo di errore più volte. Se voglio capire cosa sta succedendo, dovrò guardare le tracce esatte. Ma a causa del downsampling, alcune informazioni preziose che potrei cercare sarebbero andate perse. Con Tempo, ora non è necessario eseguire il downsampling dei dati di traccia distribuiti. Possiamo memorizzare la traccia completa nell'archiviazione di oggetti come S3 o GCS, rendendo Tempo molto efficiente in termini di costi.

Inoltre, Tempo consente un debugging/risoluzione dei problemi più rapido consentendo di passare rapidamente dalle metriche alle tracce pertinenti dei registri specifici che hanno registrato alcuni problemi.

Di seguito sono riportate le opzioni di configurazione utilizzate in Tempo.

  • Distributore : vengono utilizzati per configurare le opzioni di ricezione per ricevere gli span e quindi inviarli agli ingestori.
  • Ingester : vengono utilizzati per creare batch di tracce e inviarli a TempoDB per l'archiviazione.
  • Compattatore : trasmette i blocchi dallo storage come S3 o GCS, li combina e li riscrive nello storage.
  • Archiviazione : serve per configurare TempoDB. È necessario menzionare il nome del backend di archiviazione (S3 o GCS) con altri parametri in questa configurazione.
  • Elenco membri : viene utilizzato per il coordinamento tra i componenti di Tempo.
  • Autenticazione/Server : Tempo utilizza il server Weaveworks/Common. Viene utilizzato per impostare le configurazioni del server.

Architettura del tempo

architettura del tempo

Il diagramma sopra mostra l'architettura di lavoro di Grafana Tempo.

In primo luogo, il distributore riceve span in diversi formati da Zipkin, Jaeger, OpenTelemetry, OpenCensus e invia questi span agli ingestori mediante hashing dell'ID di traccia. Ingester crea quindi batch di tracce denominati blocchi.

Quindi invia quei blocchi allo storage back-end (S3/GCS). Quando si dispone di un ID di traccia che si desidera risolvere, si utilizzerà l'interfaccia utente di Grafana e si inserirà l'ID di traccia nella barra di ricerca. Ora l'interrogante è responsabile di ottenere i dettagli da ingester o dall'archiviazione oggetti sull'ID di traccia immesso.

In primo luogo, controlla se quell'ID di traccia è presente nell'ingestore; se non lo trova, controlla il backend di archiviazione. Utilizza un semplice endpoint HTTP per esporre le tracce. Nel frattempo, il compattatore prende i blocchi dal magazzino, li combina e li rimanda al magazzino per ridurre il numero di blocchi nel magazzino.

Imposta il tempo usando Docker

In questa sezione, configurerò Grafana Tempo passo dopo passo usando Docker. Innanzitutto, hai bisogno di un backend Tempo, quindi imposta una rete docker.

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

Scarica il file di configurazione di Tempo.

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

Di seguito è riportato l'elenco delle opzioni di protocollo che ottieni:

Protocollo Porta
Telemetria aperta 55680
Jaeger – Compatto dell'usato 6831
Jaeger – Binario dell'usato 6832
Jaeger – HTTP di parsimonia 14268
Jaeger – GRPC 14250
Zipkin 9411

Usando il file di configurazione del tempo, esegui un container docker. Qui sto scegliendo il formato Jaeger – Thrift Compact (porta 6831) per inviare le tracce.

 [[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

Ora devi eseguire un contenitore di query Tempo. Quindi, per prima cosa, scarica il file di configurazione della query del tempo.

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

Utilizzando il file di configurazione della query tempo, eseguire un contenitore 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

Ora l'interfaccia utente di Jaeger sarà accessibile all'indirizzo http://localhost:16686 , come mostrato di seguito.

jaeger ui - geekflare

Nella barra di ricerca, puoi aggiungere l'ID di traccia da un registro che desideri risolvere e questo genererà le tracce per te.

traceid - nuovo

Esecuzione di un'applicazione demo su Tempo

È ora di eseguire un esempio demo fornito da Grafana Tempo. Eseguirò un esempio di docker-compose, quindi se stai provando lo stesso, devi avere installato docker-compose sul tuo computer.

Scarica il file zip Grafana Tempo: https://github.com/grafana/tempo

Estrailo nella cartella home e vai alla directory docker-compose. Troverai più esempi di docker-compose; Sto usando l'esempio in cui i dati di un'applicazione sono archiviati 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

Esegui il comando seguente per avviare lo stack.

 [[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

Come puoi vedere, ha avviato i contenitori per Grafana, Loki, Tempo, Tempo-query e 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

Puoi anche accedere al tuo browser e verificare se Grafana, Jaeger UI, Prometheus sono in esecuzione.

grafana

Prometeo

Ora il generatore di carico sintetico in esecuzione all'interno di un contenitore sta generando ID di traccia che sta inserendo nel tempo. Esegui il comando seguente e puoi visualizzare i registri.

 [[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

Questi sono gli ID di traccia che devi passare per generare le tracce.

tracce nuove

Sto copiando uno degli ID di traccia e lo inserisco nella barra di ricerca dell'interfaccia utente di Jaeger.

traceid

Puoi vedere che ha generato correttamente le tracce relative all'ID traccia che ho fornito.

Conclusione

Quindi era tutto merito di Grafana Tempo. Vai avanti e inizia a utilizzare Tempo per generare tracce per comprendere in dettaglio le metriche e i problemi nei tuoi log.

Tutto viene catturato in Tempo e non ti perderai nessun dettaglio a causa del downsampling, che avveniva in precedenza. Tempo è semplice per uno sviluppatore o un team di produzione per comprendere la causa principale degli errori o degli avvisi che potrebbero verificarsi nei log.