Налаштування вибірки трейсів
Istio надає кілька способів налаштування вибірки трейсів. На цій сторінці ви дізнаєтеся і зрозумієте всі різні способи налаштування вибірки.
Перед початком
- Переконайтеся, що ваші застосунки передають заголовки трейсингу, як описано тут.
Доступні конфігурації вибірки трейсів
Вибірка за відсотком: випадкова швидкість вибірки для відсотка запитів, які будуть вибрані для генерації трейсів.
Власний 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. Ви можете використовувати цей приклад конфігурації як відправну точку.
$ kubectl apply -f @samples/open-telemetry/otel.yaml@ -n observability
Розгортання Bookinfo
Розгорніть Bookinfo як демонстраційний застосунок.
Генерація трейсів за допомогою Bookinfo
Коли 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
Очищення
Видаліть ресурс Telemetry:
$ kubectl delete telemetry otel-demo
Видаліть будь-які процеси
istioctl
, які можуть ще працювати, використовуючи control-C або:$ istioctl uninstall --purge -y
Видаліть OpenTelemetry Collector:
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability $ kubectl delete namespace observability