Налаштування вибірки трейсів
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