Налаштування журналів доступу з 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