OpenTelemetry и Grafana Tempo
OpenTelemetry поддерживает Grafana Tempo в качестве бэкенда для трассировок. Tempo интегрируется с OpenTelemetry Collector или другими клиентами OpenTelemetry, позволяя собирать, агрегировать и сохранять трассировки.
Как Tempo интегрируется с OpenTelemetry?
Grafana Tempo — это хранилище трассировок, которое специально разработано для хранения данных о трассировках, полученных из OpenTelemetry, Jaeger, Zipkin и других инструментов. OpenTelemetry может экспортировать трассировки в Tempo с помощью OpenTelemetry Protocol (OTLP) или Jaeger/Zipkin-протоколов.
Настройка интеграции OpenTelemetry и Grafana Tempo
1. Установка Tempo
Убедитесь, что Tempo установлен. Его можно развернуть через Docker Compose, Kubernetes или как бинарный файл. Пример через Docker Compose:
1 2 3 4 5 6 7 8 9 |
version: "3.7" services: tempo: image: grafana/tempo:latest ports: - "14268:14268" # Jaeger ingest - "4317:4317" # OTLP ingest - "9411:9411" # Zipkin ingest |
2. Настройка OpenTelemetry Collector
OpenTelemetry Collector может отправлять данные трассировки в Tempo через OTLP, Jaeger или Zipkin-протоколы.
Пример конфигурации OpenTelemetry Collector:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
receivers: otlp: protocols: grpc: http: exporters: otlp: endpoint: "tempo:4317" # OTLP Endpoint Tempo logging: loglevel: debug service: pipelines: traces: receivers: [otlp] exporters: [otlp, logging] |
receivers.otlp
: Collector принимает трассировки через OTLP.exporters.otlp
: Отправляет трассировки в Tempo через OTLP.service.pipelines
: Определяет, как обрабатываются трассировки (получение через OTLP и экспорт в Tempo).
3. Инструментирование приложения
Используйте SDK OpenTelemetry для вашего языка, чтобы собирать трассировки. Экспорт трассировок нужно настроить через OTLP:
Пример для Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/semconv/v1.7.0" "context" ) func initTracer() (*trace.TracerProvider, error) { ctx := context.Background() exporter, err := otlptracegrpc.New(ctx) if err != nil { return nil, err } tp := trace.NewTracerProvider( trace.WithBatcher(exporter), trace.WithResource(resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceNameKey.String("example-service"), )), ) otel.SetTracerProvider(tp) return tp, nil } |
4. Просмотр трассировок в Grafana
- Добавьте Tempo как источник данных в Grafana.
- Используйте
tempo
как хранилище трассировок в Explore или связывайте трассировки с метриками через метки.
Функциональность Tempo с OpenTelemetry
- Сбор трассировок: Получает данные через OTLP, Jaeger, или Zipkin.
- Хранение: Tempo оптимизирован для дешёвого хранения трассировок.
- Поиск: Поиск трассировок осуществляется через метки (например, Trace ID).
- Интеграция с Grafana: Позволяет визуализировать трассировки в едином интерфейсе.
Заключение
OpenTelemetry отлично поддерживает Grafana Tempo, предоставляя простой способ сбора и анализа трассировок. Для интеграции используйте OTLP, Jaeger, или Zipkin протоколы, а Tempo станет надёжным и масштабируемым хранилищем трассировок.
Recommended Posts
Golang Sarama: настройка Partitioner
20.03.2024