Налаштування журналів доступу з Telemetry API
Telemetry API є першокласним API в Istio вже певний час. Раніше користувачам потрібно було налаштовувати телеметрію в розділі MeshConfig
конфігурації Istio.
Перш ніж розпочати
Налаштуйте Istio, дотримуючися інструкцій у посібнику з встановлення.
Розгорніть демонстраційний застосунок curl для використання як джерело тестових запитів. Якщо у вас увімкнено автоматичне додавання sidecar, виконайте наступну команду для розгортання демонстраційного застосунку:
$ kubectl apply -f @samples/curl/curl.yaml@
Інакше, вручну додайте sidecar перед розгортанням застосунку
curl
за допомогою наступної команди:$ kubectl apply -f <(istioctl kube-inject -f @samples/curl/curl.yaml@)
Встановіть змінну середовища
SOURCE_POD
на імʼя вашого podʼа:$ export SOURCE_POD=$(kubectl get pod -l app=curl -o jsonpath={.items..metadata.name})
Запустіть зразок httpbin.
Якщо ви увімкнули автоматичну інʼєкцію sidecar, розгорніть сервіс
httpbin
:$ kubectl apply -f @samples/httpbin/httpbin.yaml@
В іншому випадку вам потрібно вручну додати sidecar перед розгортанням застосунку
httpbin
:$ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@)
Встановлення
У цьому прикладі ми будемо надсилати журнали до Grafana Loki, тому переконайтеся, що він встановлений:
$ istioctl install -f @samples/open-telemetry/loki/iop.yaml@ --skip-confirmation
$ kubectl apply -f @samples/addons/loki.yaml@ -n istio-system
$ kubectl apply -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
Початок роботи з Telemetry API
Увімкніть ведення журналу доступу
$ cat <<EOF | kubectl apply -n istio-system -f - apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: mesh-logging-default spec: accessLogging: - providers: - name: otel EOF
Наведений вище приклад використовує вбудованого постачальника журналу доступу
envoy
, і ми не налаштовуємо нічого, крім стандартних параметрів.Вимкніть журнал доступу для конкретного робочого навантаження
Ви можете вимкнути журнал доступу для служби
curl
за допомогою наступної конфігурації:$ cat <<EOF | kubectl apply -n default -f - apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: disable-curl-logging namespace: default spec: selector: matchLabels: app: curl accessLogging: - providers: - name: otel disabled: true EOF
Фільтруйте журнал доступу за режимом робочого навантаження
Ви можете вимкнути вхідний журнал доступу для служби
httpbin
за допомогою наступної конфігурації:$ cat <<EOF | kubectl apply -n default -f - apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: disable-httpbin-logging spec: selector: matchLabels: app: httpbin accessLogging: - providers: - name: otel match: mode: SERVER disabled: true EOF
Фільтруйте журнал доступу за виразом CEL
Наступна конфігурація показує журнал доступу лише тоді, коли код відповіді більший або дорівнює 500:
$ cat <<EOF | kubectl apply -n default -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: filter-curl-logging spec: selector: matchLabels: app: curl accessLogging: - providers: - name: otel filter: expression: response.code >= 500 EOF
Встановіть стандартний фільтр журналу доступу з виразом CEL
Наступна конфігурація показує журнали доступу лише тоді, коли код відповіді більший або дорівнює 400, або запит було надіслано до BlackHoleCluster чи PassthroughCluster: Примітка:
xds.cluster_name
доступний лише з випуску Istio 1.16.2 і вище$ cat <<EOF | kubectl apply -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: default-exception-logging namespace: istio-system spec: accessLogging: - providers: - name: otel filter: expression: "response.code >= 400 || xds.cluster_name == 'BlackHoleCluster' || xds.cluster_name == 'PassthroughCluster' " EOF
Фільтруйте журнали доступу для перевірки стану за допомогою виразу CEL
Наступна конфігурація показує журнали доступу лише тоді, коли вони не згенеровані службою перевірки стану Amazon Route 53. Примітка:
request.useragent
специфічний для HTTP-трафіку, тому, щоб не порушувати роботу TCP-трафіку, потрібно перевірити наявність цього поля. Для отримання додаткової інформації див. Перевірка типів CEL$ cat <<EOF | kubectl apply -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: filter-health-check-logging spec: accessLogging: - providers: - name: otel filter: expression: "!has(request.useragent) || !(request.useragent.startsWith("Amazon-Route53-Health-Check-Service"))" EOF
Для отримання додаткової інформації див. Використання виразів для значень
Робота з постачальником OpenTelemetry
Istio підтримує надсилання журналів доступу з протоколом OpenTelemetry, як пояснено тут.
Очищення
Видаліть усі Telemetry API:
$ kubectl delete telemetry --all -A
Видаліть
loki
:$ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
Видаліть Istio з кластера:
$ istioctl uninstall --purge --skip-confirmation