• Русский
  • Мониторинг производительности сервисов (SPM)

    Service Performance Monitoring отображается в Jaeger UI как вкладка "Monitor" и помогает находить интересные trace без необходимости заранее знать имена service или operation. Эта функция агрегирует данные span, чтобы формировать метрики RED (Request, Error, Duration).

    Обзор функции UI

    Вкладка Monitor предоставляет агрегацию на уровне service и operation для:

    • Частоты запросов
    • Частоты ошибок
    • Длительностей (P95, P75, P50)

    Метрика "Impact" вычисляется как произведение latency и частоты запросов, что помогает выявлять operation с высоким бизнес-эффектом, несмотря на различающиеся профили latency.

    Архитектура

    SpanMetrics Connector принимает span и генерирует метрики, которые экспортируются в backend, совместимый с PromQL. Затем Jaeger Query получает эти предварительно вычисленные метрики. Такой подход требует:

    • В pipeline вводится SpanMetrics Connector, который принимает trace data (spans) и генерирует метрики RED.
    • Внешнего Metrics Store, поддерживающего запросы PromQL.
    • Конфигурации в расширении jaeger_query для ссылки на внешний Metrics Store.

    Производные временные ряды

    SpanMetrics Connector генерирует два имени метрик:

    traces_span_metrics_calls (тип counter)

    • Считает общее количество span, включая span с ошибками
    • Подсчеты вызовов отделяются от ошибок с помощью метки status_code
    • Ошибки определяются как временные ряды с меткой status_code = "STATUS_CODE_ERROR"

    traces_span_metrics_duration (тип histogram)

    • Histogram длительностей/latency span
    • Создает дополнительные временные ряды:
      • traces_span_metrics_duration_count: Общее количество точек данных по всем bucket
      • traces_span_metrics_duration_sum: Сумма всех значений точек данных
      • traces_span_metrics_duration_bucket: Набор временных рядов для каждого bucket

    Расчет оценочного количества временных рядов:

    num_status_codes * num_span_kinds * (1 + num_latency_buckets) * num_operations
    
    Typical: 72 * num_operations
    Max: 324 * num_operations

    Конфигурация

    Включите SpanMetrics Connector в pipeline вашего OpenTelemetry Collector:

    exporters:
      prometheus:
        endpoint: "0.0.0.0:8889"
        # other prometheus options
    
    connectors:
      spanmetrics:
        # connector configuration options
    
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [memory_limiter, batch]
          exporters: [debug, spanmetrics]
        metrics/spanmetrics:
          receivers: [spanmetrics]
          exporters: [prometheus]

    Определите удаленное хранилище, совместимое с PromQL, в Jaeger:

    extensions:
      jaeger_storage:
        backends:
          some_trace_storage:
            ...
        metric_backends:
          some_metrics_storage:
            prometheus:
              endpoint: http://prometheus:9090

    Укажите это хранилище метрик в расширении jaeger_query:

    extensions:
      jaeger_query:
        traces: some_trace_storage
        metrics: some_metrics_storage