OpenTelemetry
OpenTelemetry (OTel) — це незалежна від постачальника платформа з відкритим вихідним кодом для вимірювання, генерації, збору та експорту телеметричних даних. Трейси OpenTelemetry Protocol (OTLP) можна надсилати до Jaeger, а також до багатьох комерційних сервісів.
Щоб дізнатися, як Istio обробляє трейсинг, відвідайте огляд цього завдання.
Після завершення цього завдання ви зможете зрозуміти, як ваш застосунок може брати участь у трейсингу з OpenTelemetry, незалежно від мови, фреймворка або платформи, який ви використовуєте для створення застосунку.
Це завдання використовує Bookinfo як демонстраційний застосунок та OpenTelemetry Collector як приймач трейсів. Приклад надсилання трейсів безпосередньо до OTLP-сумісного бекенду наведено у завданні Jaeger.
Розгортання OpenTelemetry Collector
Створіть простір імен для OpenTelemetry Collector:
$ kubectl create namespace observability
Розгорніть OpenTelemetry Collector. Ви можете використовувати цей приклад конфігурації як відправну точку.
$ kubectl apply -f @samples/open-telemetry/otel.yaml@ -n observability
Встановлення
Всі параметри трейсингу можна налаштувати глобально через MeshConfig
. Щоб спростити конфігурацію, рекомендується створити один YAML файл, який можна передати команді istioctl install -f
.
Вибір експортеру
Istio можна налаштувати для експорту трейсів OpenTelemetry Protocol (OTLP) через gRPC або HTTP. Можна налаштувати лише один експортер одночасно (або gRPC, або HTTP).
Експорт через gRPC
У цьому прикладі трейс буде експортуватися через OTLP/gRPC до OpenTelemetry Collector. Приклад також активує детектор ресурсів середовища. Детектор середовища додає атрибути зі змінної середовища OTEL_RESOURCE_ATTRIBUTES
до експортованого ресурсу OpenTelemetry.
$ 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
Експорт через HTTP
У цьому прикладі трейс буде експортуватися через OTLP/HTTP до OpenTelemetry Collector. Приклад також активує детектор ресурсів середовища. Детектор середовища додає атрибути зі змінної середовища OTEL_RESOURCE_ATTRIBUTES
до експортованого ресурсу OpenTelemetry.
$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
extensionProviders:
- name: otel-tracing
opentelemetry:
port: 4318
service: opentelemetry-collector.observability.svc.cluster.local
http:
path: "/v1/traces"
timeout: 5s
headers:
- name: "custom-header"
value: "custom value"
resource_detectors:
environment: {}
EOF
Увімкнення трейсингу для mesh через Telemetry API
Увімкніть трейсинг, застосувавши наступну конфігурацію:
$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: otel-demo
spec:
tracing:
- providers:
- name: otel-tracing
randomSamplingPercentage: 100
customTags:
"my-attribute":
literal:
value: "default-value"
EOF
Розгортання 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
Використовуйте OpenTelemetry Collector, сконфігурований для експорту трейсів у консоль, щоб перевірити, що трейс надходять, переглянувши логи Колектора. Логи повинні містити щось подібне до:
Resource SchemaURL: Resource labels: -> service.name: STRING(productpage.default) ScopeSpans #0 ScopeSpans SchemaURL: InstrumentationScope Span #0 Trace ID : 79fb7b59c1c3a518750a5d6dad7cd2d1 Parent ID : 0cf792b061f0ad51 ID : 2dff26f3b4d6d20f Name : egress reviews:9080 Kind : SPAN_KIND_CLIENT Start time : 2024-01-30 15:57:58.588041 +0000 UTC End time : 2024-01-30 15:57:59.451116 +0000 UTC Status code : STATUS_CODE_UNSET Status message : Attributes: -> node_id: STRING(sidecar~10.244.0.8~productpage-v1-564d4686f-t6s4m.default~default.svc.cluster.local) -> zone: STRING() -> guid:x-request-id: STRING(da543297-0dd6-998b-bd29-fdb184134c8c) -> http.url: STRING(http://reviews:9080/reviews/0) -> http.method: STRING(GET) -> downstream_cluster: STRING(-) -> user_agent: STRING(curl/7.74.0) -> http.protocol: STRING(HTTP/1.1) -> peer.address: STRING(10.244.0.8) -> request_size: STRING(0) -> response_size: STRING(441) -> component: STRING(proxy) -> upstream_cluster: STRING(outbound|9080||reviews.default.svc.cluster.local) -> upstream_cluster.name: STRING(outbound|9080||reviews.default.svc.cluster.local) -> http.status_code: STRING(200) -> response_flags: STRING(-) -> istio.namespace: STRING(default) -> istio.canonical_service: STRING(productpage) -> istio.mesh_id: STRING(cluster.local) -> istio.canonical_revision: STRING(v1) -> istio.cluster_id: STRING(Kubernetes) -> my-attribute: STRING(default-value)
Очищення
Видаліть ресурс Telemetry:
$ kubectl delete telemetry otel-demo
Видаліть будь-які процеси
istioctl
, які можуть все ще працювати, використовуючи control-C або:$ killall istioctl
Видаліть OpenTelemetry Collector:
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability $ kubectl delete namespace observability
Якщо ви не плануєте досліджувати жодних подальших завдань, зверніться до інструкцій з очищення Bookinfo, щоб завершити роботу з застосунком.