Работали ли вы с Jaeger?

«Работали ли вы с Jaeger?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я внедрял Jaeger для распределенного трейсинга в микросервисной среде на основе Kubernetes. Это было ключевым инструментом для понимания потоков запросов и диагностики проблем с производительностью.

Моя практика работы с Jaeger:

  1. Развертывание: Устанавливал стэк Jaeger (Agent, Collector, Query, UI) в кластер Kubernetes с помощью оператора Jaeger. В качестве бэкенда для хранения использовал Elasticsearch для работы с большими объемами трейсов.
  2. Инструментирование приложений: Интегрировал OpenTelemetry SDK в сервисы (написанные на Go и Java). Конфигурация включала отправку трейсов через Jaeger Agent (по протоколу gRPC) и добавление кастомных тегов (например, deployment.environment=prod).
  3. Конфигурация в Kubernetes: В манифестах развертывания (Deployment) добавлял sidecar-контейнер с Jaeger Agent для приема трейсов:
    spec:
    template:
    spec:
      containers:
      - name: my-app
        # ...
        env:
        - name: OTEL_EXPORTER_JAEGER_AGENT_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: OTEL_EXPORTER_JAEGER_AGENT_PORT
          value: "6831"
      - name: jaeger-agent
        image: jaegertracing/jaeger-agent:latest
        args: ["--reporter.grpc.host-port=jaeger-collector-headless.observability.svc:14250"]
        ports:
        - containerPort: 6831
          protocol: UDP
  4. Анализ и использование: Использовал UI Jaeger для поиска медленных трейсов, анализа зависимостей между сервисами и выявления узких мест (например, медленного запроса к БД). Интегрировал Jaeger с Grafana для создания дашбордов, отображающих p99 latency и частоту ошибок по сервисам.