OpenTelemetry
Проксі Envoy можна налаштувати для експорту логів доступу6 у форматі OpenTelemetry7. У цьому прикладі проксі надсилають логи доступу до OpenTelemetry collector8, який налаштований для виведення логів у стандартний вивід. Стандартний вивід OpenTelemetry collector можна переглянути за допомогою команди kubectl logs
.
Перш ніж розпочати
Налаштуйте Istio, дотримуючися інструкцій у посібнику з встановлення9.
Розгорніть демонстраційний застосунок curl11 для використання як джерело тестових запитів. Якщо у вас увімкнено автоматичне додавання sidecar, виконайте наступну команду для розгортання демонстраційного застосунку:
Інакше, вручну додайте sidecar перед розгортанням застосунку
curl
за допомогою наступної команди:Встановіть змінну середовища
SOURCE_POD
на імʼя вашого podʼа:
Запустіть зразок httpbin13.
Якщо ви увімкнули автоматичну інʼєкцію sidecar, розгорніть сервіс
httpbin
:В іншому випадку вам потрібно вручну додати sidecar перед розгортанням застосунку
httpbin
:
Створіть простір імен для OpenTelemetry Collector:
Розгорніть OpenTelemetry Collector. Ви можете використовувати цей приклад конфігурації15 як відправну точку.
Увімкнення логування доступу Envoy
Щоб увімкнути логування доступу, використовуйте Telemetry API17.
Редагуйте MeshConfig
, щоб додати постачальника OpenTelemetry з іменем otel
. Це передбачає додавання розширення:
Кінцева конфігурація виглядатиме приблизно так:
Додайте ресурс Telemetry, який вказує Istio надсилати логи доступу до OpenTelemetry collector.
Наведений приклад використовує постачальника логів otel
, і ми не налаштовуємо нічого, крім стандартних параметрів.
Подібну конфігурацію можна також застосувати до окремого простору імен або робочого навантаження для точного контролю логування.
Детальнішу інформацію про використання Telemetry API можна знайти в огляді Telemetry API17.
Використання Mesh Config
Якщо ви використовували конфігурацію IstioOperator
для встановлення Istio, додайте наступне поле до вашої конфігурації:
Інакше додайте відповідне налаштування до вашої оригінальної команди istioctl install
, наприклад:
Стандартний формат логу доступу
Istio використовуватиме наступний стандартний формат логу доступу, якщо параметр accessLogFormat
не вказаний:
У таблиці нижче наведено приклад використання стандартного формату логів для запиту від curl
до httpbin
:
Оператор логів | лог доступу у curl | лог доступу у httpbin |
---|---|---|
[%START_TIME%] | [2020-11-25T21:26:18.409Z] | [2020-11-25T21:26:18.409Z] |
\"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" | "GET /status/418 HTTP/1.1" | "GET /status/418 HTTP/1.1" |
%RESPONSE_CODE% | 418 | 418 |
%RESPONSE_FLAGS% | - | - |
%RESPONSE_CODE_DETAILS% | via_upstream | via_upstream |
%CONNECTION_TERMINATION_DETAILS% | - | - |
\"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" | "-" | "-" |
%BYTES_RECEIVED% | 0 | 0 |
%BYTES_SENT% | 135 | 135 |
%DURATION% | 4 | 3 |
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% | 4 | 1 |
\"%REQ(X-FORWARDED-FOR)%\" | "-" | "-" |
\"%REQ(USER-AGENT)%\" | "curl/7.73.0-DEV" | "curl/7.73.0-DEV" |
\"%REQ(X-REQUEST-ID)%\" | "84961386-6d84-929d-98bd-c5aee93b5c88" | "84961386-6d84-929d-98bd-c5aee93b5c88" |
\"%REQ(:AUTHORITY)%\" | "httpbin:8000" | "httpbin:8000" |
\"%UPSTREAM_HOST%\" | "10.44.1.27:80" | "127.0.0.1:80" |
%UPSTREAM_CLUSTER% | outbound|8000||httpbin.foo.svc.cluster.local | inbound|8000|| |
%UPSTREAM_LOCAL_ADDRESS% | 10.44.1.23:37652 | 127.0.0.1:41854 |
%DOWNSTREAM_LOCAL_ADDRESS% | 10.0.45.184:8000 | 10.44.1.27:80 |
%DOWNSTREAM_REMOTE_ADDRESS% | 10.44.1.23:46520 | 10.44.1.23:37652 |
%REQUESTED_SERVER_NAME% | - | outbound_.8000_._.httpbin.foo.svc.cluster.local |
%ROUTE_NAME% | default | default |
Тестування журналу доступу
Надішліть запит з
curl
доhttpbin
:Перевірте журнал
otel-collector
:
Зверніть увагу, що повідомлення, що відповідають запиту, з’являються в журналах Istio проксі як для джерела, так і для місця призначення, відповідно curl
і httpbin
. Ви можете побачити в журналі HTTP-дієслово (GET
), HTTP-шлях (/status/418
), код відповіді (418
) та іншу інформацію про запит18.
Очищення
Зупиніть сервіси curl11 і httpbin13:
Вимкнення журналу доступу Envoy
Видаліть або встановіть значення ""
для налаштувань meshConfig.extensionProviders
і meshConfig.defaultProviders
у конфігурації встановлення Istio.