Grafana Tempo'ya Başlarken

Yayınlanan: 2021-04-19

Dağıtılmış bir izleme arka ucu olan Grafana Tempo'nun temellerini öğrenelim.

Dağıtılmış izleme, sistem performansı hakkında ayrıntılı bilgi almanın yoludur. Uygulamadan geçen bir isteğin yaşam döngüsünü görselleştirmenin bir yoludur. Uygulama, tek bir düğümde bulunan veya düğümler arasında dağıtılan birden çok hizmetten oluşabilir.

Böylece, dağıtılmış izlemeyi kullanarak tüm hizmetlerin birleştirilmiş bir görünümünü elde edebilirsiniz. Ve Grafana Tempo tamamen bununla ilgili.

Grafana Temposu nedir?

Bu yıl ObservabilityCon konferansında Grafana Labs'den bazı önemli güncellemeler yapıldı ve Grafana Tempo bunlardan biriydi. Grafana Labs, açık kaynak portföyüne “Grafana Tempo” adlı bir proje daha ekledi.

Grafana Tempo, yüksek düzeyde ölçeklenebilir ve kullanımı kolay, açık kaynaklı, dağıtılmış bir izleme arka ucudur. Tempo, Zipkin, Jaeger, OpenTelemetry ve OpenCensus gibi diğer izleme protokolleriyle tamamen uyumludur. Şu anda, Prometheus ve Grafana gibi platformları izleyen Loki'deki Tempo veri keşif motorunu desteklemektedir. Grafana 7.3+, Grafana ve Tempo arasında kusursuz bir deneyim sunar.

Tempo neden kullanılır?

Tempo, ölçümleri, izleri ve günlükleri ilişkilendirmek için kullanılır. Bir kullanıcının aynı türden hatayı birden çok kez aldığı durumlar vardır. Neler olduğunu anlamak istiyorsam, kesin izlere bakmam gerekecek. Ancak altörnekleme nedeniyle, aradığım bazı değerli bilgiler kaybolabilirdi. Tempo ile artık dağıtılmış izleme verilerini altörneklememize gerek yok. Tüm izlemeyi S3 veya GCS gibi nesne depolamada saklayarak Tempo'yu çok uygun maliyetli hale getirebiliriz.

Ayrıca Tempo, metriklerden bazı sorunları kaydeden belirli günlüklerin ilgili izlerine hızlı bir şekilde geçmenize izin vererek daha hızlı hata ayıklama/sorun giderme yapmanızı sağlar.

Aşağıda Tempo'da kullanılan konfigürasyon seçenekleri bulunmaktadır.

  • Distribütör : Bunlar, alma seçeneklerini, aralıkları alacak şekilde yapılandırmak ve ardından bunları alıcılara göndermek için kullanılır.
  • Ingester : Bunlar, izleme grupları oluşturmak için kullanılır ve bunları depolama için TempoDB'ye gönderir.
  • Compactor : S3 veya GCS gibi depodan blokları akar, birleştirir ve tekrar depoya yazar.
  • Depolama : TempoDB'yi yapılandırmak için kullanılır. Bu yapılandırmada diğer parametrelerle birlikte depolama arka uç adını (S3 veya GCS) belirtmeniz gerekir.
  • Üye listesi : Tempo bileşenleri arasında koordinasyon için kullanılır.
  • Kimlik Doğrulama/Sunucu : Tempo, Weaveworks/Common sunucusunu kullanır. Sunucu yapılandırmalarını ayarlamak için kullanılır.

Tempo Mimarisi

tempo mimarisi

Yukarıdaki diyagram Grafana Tempo'nun çalışma mimarisini göstermektedir.

İlk olarak, dağıtımcı Zipkin, Jaeger, OpenTelemetry, OpenCensus'tan farklı formatlardaki yayılmaları alır ve bu yayılmaları izleme kimliğini hash ederek alıcılara gönderir. Ingester daha sonra blok adı verilen izleme grupları oluşturur.

Ardından bu blokları arka uç deposuna (S3/GCS) gönderir. Sorun gidermek istediğiniz bir izleme kimliğiniz olduğunda, Grafana UI'yi kullanır ve izleme kimliğini arama çubuğuna koyarsınız. Artık sorgulayıcı, girdiğiniz izleme kimliğiyle ilgili ayrıntıları kaydediciden veya nesne deposundan almaktan sorumludur.

İlk olarak, bu izleme kimliğinin aktarıcıda olup olmadığını kontrol eder; bulamazsa, depolama arka ucunu kontrol eder. İzleri ortaya çıkarmak için basit bir HTTP uç noktası kullanır. Bu sırada sıkıştırıcı, depodaki blok sayısını azaltmak için blokları depodan alır, birleştirir ve depoya geri gönderir.

Docker kullanarak Tempo Kurulumu

Bu bölümde Docker kullanarak adım adım Grafana Tempo kurulumu yapacağım. İlk olarak, bir Tempo arka ucuna ihtiyacınız var, bu nedenle bir liman işçisi ağı kurun.

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

Tempo yapılandırma dosyasını indirin.

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

Alacağınız protokol seçeneklerinin listesi aşağıdadır:

Protokol Liman
Açık Telemetri 55680
Jaeger – Tasarruflu Kompakt 6831
Jaeger – Tasarruflu İkili Dosya 6832
Jaeger – Tasarruflu HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

Tempo yapılandırma dosyasını kullanarak bir liman işçisi konteyneri çalıştırın. Burada izleri göndermek için Jaeger – Thrift Compact formatını (port 6831) seçiyorum.

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

Şimdi bir Tempo sorgu kabı çalıştırmanız gerekiyor. Bu yüzden önce tempo sorgusu yapılandırma dosyasını indirin.

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

Tempo sorgusu yapılandırma dosyasını kullanarak bir liman işçisi kapsayıcısı çalıştırın.

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

Şimdi Jaeger kullanıcı arayüzüne aşağıda gösterildiği gibi http://localhost:16686 adresinden erişilebilir.

jaeger kullanıcı arayüzü - geekflare

Arama çubuğuna, sorun gidermek istediğiniz bir günlükten izleme kimliğini ekleyebilirsiniz; bu, sizin için izleri oluşturacaktır.

traceid - yeni

Tempoda Demo Uygulaması Çalıştırmak

Grafana Tempo tarafından verilen bir demo örneğini çalıştırmanın zamanı geldi. Bir docker-compose örneği çalıştıracağım, bu yüzden aynısını deniyorsanız, makinenizde docker-compose kurulu olmalıdır.

Grafana Tempo zip dosyasını indirin: https://github.com/grafana/tempo

Ana klasöre çıkarın ve docker-compose dizinine gidin. Docker-compose'un birden çok örneğini bulacaksınız; Bir uygulamanın verilerinin yerel olarak depolandığı örneği kullanıyorum.

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

Yığını başlatmak için aşağıdaki komutu çalıştırın.

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

Görüyorsunuz, Grafana, Loki, Tempo, Tempo-query ve Prometheus için kapsayıcıları başlattı.

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

Ayrıca tarayıcınıza gidebilir ve Grafana, Jaeger UI, Prometheus'un çalışıp çalışmadığını doğrulayabilirsiniz.

grafana

prometheus

Artık bir kap içinde çalışan sentetik yük oluşturucu, tempo içine koyduğu iz kimlikleri üretiyor. Aşağıdaki komutu çalıştırın ve günlükleri görüntüleyebilirsiniz.

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

Bunlar, izleme oluşturmak için geçmeniz gereken izleme kimlikleridir.

yeni izler

İzleme kimliklerinden birini kopyalayıp Jaeger UI arama çubuğuna koyuyorum.

iz kimliği

Sağladığım iz kimliği ile ilgili izleri başarıyla oluşturduğunu görebilirsiniz.

Çözüm

Demek hepsi Grafana Tempo ile ilgiliydi. Devam edin ve günlüklerinizdeki metrikleri ve sorunları ayrıntılı olarak anlamak için izler oluşturmak üzere Tempo'yu kullanmaya başlayın.

Her şey Tempo'da kaydediliyor ve daha önce gerçekleşen altörnekleme nedeniyle hiçbir ayrıntıyı kaçırmayacaksınız. Tempo, bir geliştirici veya üretim ekibinin günlüklerde oluşabilecek hataların veya uyarıların temel nedenini anlaması için basittir.