Налаштування журналів доступу з Telemetry API

Telemetry API є першокласним API в Istio вже певний час. Раніше користувачам потрібно було налаштовувати телеметрію в розділі MeshConfig конфігурації Istio.

Перш ніж розпочати

  • Налаштуйте Istio, дотримуючися інструкцій у посібнику з встановлення.

  • Розгорніть демонстраційний застосунок curl для використання як джерело тестових запитів. Якщо у вас увімкнено автоматичне додавання sidecar, виконайте наступну команду для розгортання демонстраційного застосунку:

    Zip
    $ kubectl apply -f @samples/curl/curl.yaml@

    Інакше, вручну додайте sidecar перед розгортанням застосунку curl за допомогою наступної команди:

    Zip
    $ 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:

    Zip
    $ kubectl apply -f @samples/httpbin/httpbin.yaml@

    В іншому випадку вам потрібно вручну додати sidecar перед розгортанням застосунку httpbin:

    Zip
    $ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@)

Встановлення

У цьому прикладі ми будемо надсилати журнали до Grafana Loki, тому переконайтеся, що він встановлений:

ZipZipZip
$ 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

  1. Увімкніть ведення журналу доступу

    $ 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, і ми не налаштовуємо нічого, крім стандартних параметрів.

  2. Вимкніть журнал доступу для конкретного робочого навантаження

    Ви можете вимкнути журнал доступу для служби 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
  3. Фільтруйте журнал доступу за режимом робочого навантаження

    Ви можете вимкнути вхідний журнал доступу для служби 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
  4. Фільтруйте журнал доступу за виразом 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
  5. Встановіть стандартний фільтр журналу доступу з виразом 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
  6. Фільтруйте журнали доступу для перевірки стану за допомогою виразу 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, як пояснено тут.

Очищення

  1. Видаліть усі Telemetry API:

    $ kubectl delete telemetry --all -A
  2. Видаліть loki:

    ZipZip
    $ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system
    $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
  3. Видаліть Istio з кластера:

    $ istioctl uninstall --purge --skip-confirmation
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!