Налаштування вибірки трейсів

Istio надає кілька способів налаштування вибірки трейсів. На цій сторінці ви дізнаєтеся і зрозумієте всі різні способи налаштування вибірки.

Перед початком

  1. Переконайтеся, що ваші застосунки передають заголовки трейсингу, як описано тут.

Доступні конфігурації вибірки трейсів

  1. Вибірка за відсотком: випадкова швидкість вибірки для відсотка запитів, які будуть вибрані для генерації трейсів.

  2. Власний OpenTelemetry Sampler: реалізація власного семплера, яка повинна бути поєднана з OpenTelemetryTracingProvider.

Вибірка за відсотком

Випадкова швидкість вибірки за відсотком використовує зазначене значення відсотка для вибору запитів для вибірки.

Швидкість вибірки повинна бути в діапазоні від 0.0 до 100.0 з точністю 0.01. Наприклад, щоб трейсити 5 запитів з кожних 10000, використовуйте значення 0.05.

Є три способи налаштування випадкової швидкості вибірки:

Telemetry API

Вибірку можна налаштувати для різних масштабів: для всієї mesh-мережі, для простору імен або для конкретного навантаження, що забезпечує велику гнучкість. Щоб дізнатися більше, будь ласка, ознайомтеся з документацією Telemetry API.

Встановіть Istio без налаштування sampling всередині defaultConfig:

$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 4317
        service: opentelemetry-collector.observability.svc.cluster.local
        resource_detectors:
          environment: {}
EOF

Увімкніть провайдера трейсингу через Telemetry API та задайте randomSamplingPercentage.

$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
   name: otel-demo
spec:
  tracing:
  - providers:
    - name: otel-tracing
    randomSamplingPercentage: 10
EOF

Використання MeshConfig

Випадкова вибірка за відсотком може бути налаштована глобально через MeshConfig.

$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing:
        sampling: 10
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 4317
        service: opentelemetry-collector.observability.svc.cluster.local
        resource_detectors:
          environment: {}
EOF

Потім увімкніть провайдера трейсингу через Telemetry API. Зверніть увагу, що ми не задаємо randomSamplingPercentage тут.

$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: otel-tracing
EOF

Використання анотації proxy.istio.io/config

Ви можете додати анотацію proxy.istio.io/config до метаданих вашого Pod, щоб перевизначити будь-які налаштування вибірки на рівні мережі.

Наприклад, щоб перевизначити вибірку на рівні мережі вище, ви додасте наступне до вашого manifest файлу pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: curl
spec:
  ...
  template:
    metadata:
      ...
      annotations:
        ...
        proxy.istio.io/config: |
          tracing:
            sampling: 20
    spec:
      ...

Власний OpenTelemetry Sampler

Специфікація OpenTelemetry визначає Sampler API. Sampler API дозволяє створювати власний семплер, який може здійснювати більш інтелектуальні та ефективні рішення для вибірки, такі як Probability Sampling.

Такі семплери потім можна поєднати з OpenTelemetryTracingProvider.

Поточні конфігурації семплера в Istio:

Власні семплери налаштовуються через MeshConfig. Ось приклад конфігурації семплера Dynatrace:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 443
        service: abc.live.dynatrace.com/api/v2/otlp
        http:
          path: "/api/v2/otlp/v1/traces"
          timeout: 10s
          headers:
            - name: "Authorization"
              value: "Api-Token dt0c01."
        dynatrace_sampler:
          tenant: "abc"
          cluster_id: 123

Порядок пріоритету

З кількома способами налаштування вибірки важливо розуміти порядок пріоритету кожного методу.

При використанні випадкової вибірки за відсотком порядок пріоритету є:

Telemetry API > Анотація Pod > MeshConfig

Це означає, що якщо значення визначено в усіх з зазначених, вибирається значення з Telemetry API.

Коли налаштований власний OpenTelemetry семплер, порядок пріоритету є:

Custom OTel Sampler > (Telemetry API | Анотація Pod | MeshConfig)

Це означає, що якщо налаштований власний OpenTelemetry семплер, він перевизначить усі інші методи. Крім того, значення випадкової вибірки встановлено на 100 і не може бути змінене. Це важливо, оскільки власний семплер має отримувати 100% відрізків для правильного прийняття рішень.

Розгортання OpenTelemetry Collector

Створіть простір імен для OpenTelemetry Collector:

$ kubectl create namespace observability

Розгорніть OpenTelemetry Collector. Ви можете використовувати цей приклад конфігурації як відправну точку.

Zip
$ kubectl apply -f @samples/open-telemetry/otel.yaml@ -n observability

Розгортання Bookinfo

Розгорніть Bookinfo як демонстраційний застосунок.

Генерація трейсів за допомогою Bookinfo

  1. Коли Bookinfo запущено і працює, відвідайте http://$GATEWAY_URL/productpage один або кілька разів, щоб згенерувати інформацію про трейси.

    Щоб побачити дані трасування, потрібно надіслати запити до вашої служби. Кількість запитів залежить від коефіцієнта відбору Istio і може бути налаштована за допомогою Telemetry API. При стандартному значенні для коефіцієнта відбору в 1% вам потрібно надіслати принаймні 100 запитів, перш ніж перші трейси стануть видимими.

    Щоб надіслати 100 запитів до служби productpage, використовуйте наступну команду:

    $ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

Очищення

  1. Видаліть ресурс Telemetry:

    $ kubectl delete telemetry otel-demo
  2. Видаліть будь-які процеси istioctl, які можуть ще працювати, використовуючи control-C або:

    $ istioctl uninstall --purge -y
  3. Видаліть OpenTelemetry Collector:

    Zip
    $ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability
    $ kubectl delete namespace observability
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!