# Tempo Distributed tracing backend от Grafana. Принимает трейсы через OTLP, Jaeger, Zipkin. Grafana автоматически настраивается как datasource при `addon_prometheus_stack: true`. ## Быстрый старт ```yaml # group_vars/all/addons.yml addon_tempo: true addon_prometheus_stack: true # Grafana datasource настраивается автоматически ``` ```bash make addon-tempo ``` ## Параметры | Переменная | Умолч. | Описание | |---|---|---| | `tempo_storage_size` | `10Gi` | PVC для трейсов | | `tempo_retention_period` | `720h` | Срок хранения (30 дней) | | `tempo_receivers_otlp_enabled` | `true` | OTLP (gRPC 4317, HTTP 4318) | | `tempo_receivers_jaeger_enabled` | `true` | Jaeger (gRPC 14250, HTTP 14268) | | `tempo_receivers_zipkin_enabled` | `false` | Zipkin (9411) | ## Endpoints ``` OTLP gRPC: tempo.tempo.svc.cluster.local:4317 OTLP HTTP: tempo.tempo.svc.cluster.local:4318 Jaeger HTTP: tempo.tempo.svc.cluster.local:14268 Jaeger gRPC: tempo.tempo.svc.cluster.local:14250 Zipkin: tempo.tempo.svc.cluster.local:9411 ``` ## Инструментирование приложений ### Python (OpenTelemetry) ```python from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter # Настройка provider = TracerProvider() exporter = OTLPSpanExporter( endpoint="tempo.tempo.svc.cluster.local:4317", insecure=True ) provider.add_span_processor(BatchSpanProcessor(exporter)) trace.set_tracer_provider(provider) tracer = trace.get_tracer(__name__) # Использование with tracer.start_as_current_span("my-operation") as span: span.set_attribute("user.id", "123") result = do_something() span.set_attribute("result", result) ``` ### Go (OpenTelemetry) ```go import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" ) exporter, _ := otlptracegrpc.New(ctx, otlptracegrpc.WithEndpoint("tempo.tempo.svc.cluster.local:4317"), otlptracegrpc.WithInsecure(), ) ``` ### Через переменные окружения (авто-инструментирование) ```yaml env: - name: OTEL_EXPORTER_OTLP_ENDPOINT value: "http://tempo.tempo.svc.cluster.local:4318" - name: OTEL_SERVICE_NAME value: "my-service" - name: OTEL_TRACES_SAMPLER value: "parentbased_traceidratio" - name: OTEL_TRACES_SAMPLER_ARG value: "0.1" # 10% трейсов ``` ## Grafana Explore — просмотр трейсов 1. Grafana → Explore 2. Выбери datasource: Tempo 3. Введи Trace ID или используй поиск по тегам 4. Для корреляции логов и трейсов: в Loki логе кликни на Trace ID ## Интеграция Loki ↔ Tempo (корреляция) В Grafana → Datasources → Loki → Derived Fields: - Name: `TraceID` - Regex: `trace_id=(\w+)` - URL: `${__value.raw}` (с datasource Tempo) ## Официальные ресурсы - Официальный сайт: [https://grafana.com/oss/tempo/](https://grafana.com/oss/tempo/) - Официальная документация: [https://grafana.com/docs/tempo/latest/](https://grafana.com/docs/tempo/latest/) - Версии Helm chart / ПО: [https://artifacthub.io/packages/helm/grafana/tempo](https://artifacthub.io/packages/helm/grafana/tempo)