9.0 KiB
| title | description | weight | keywords | aliases | owner | test | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Логи доступу Envoy | Це завдання показує, як налаштувати проксі Envoy для виведення логів доступу на стандартний вихід. | 20 |
|
|
istio/wg-policies-and-telemetry-maintainers | так |
Найпростіший тип логування в Istio — це логи доступу Envoy. Проксі Envoy виводять інформацію про доступ на свій стандартний вихід. Стандартний вихід контейнерів Envoy можна вивести за допомогою команди kubectl logs.
{{< boilerplate before-you-begin-egress >}}
{{< boilerplate start-httpbin-service >}}
Увімкнення логів доступу Envoy
Istio пропонує декілька способів увімкнення логів доступу. Рекомендується використовувати Telemetry API.
Використання Telemetry API
Telemetry API можна використовувати для увімкнення або вимкнення логів доступу:
{{< text yaml >}} apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: mesh-default namespace: istio-system spec: accessLogging: - providers: - name: envoy {{< /text >}}
У прикладі вище використовується стандартний провайдер логів доступу envoy, і ми не налаштовуємо нічого, окрім стандартних параметрів.
Подібну конфігурацію можна також застосувати на рівні окремого простору імен або конкретного навантаження для детальнішого контролю логування.
Більше інформації про використання Telemetry API дивіться в огляді Telemetry API.
Використання конфігурації Mesh
Якщо ви використовували конфігурацію IstioOperator для встановлення Istio, додайте наступне поле до вашої конфігурації:
{{< text yaml >}} spec: meshConfig: accessLogFile: /dev/stdout {{< /text >}}
В іншому випадку, додайте еквівалентне налаштування до вашої початкової команди istioctl install, наприклад:
{{< text syntax=bash snip_id=none >}} $ istioctl install --set meshConfig.accessLogFile=/dev/stdout {{< /text >}}
Ви також можете вибрати між JSON і текстом, встановивши accessLogEncoding на JSON або TEXT.
Ви також можете налаштувати формат логів доступу, редагуючи accessLogFormat.
Дивіться глобальні параметри mesh для отримання додаткової інформації про ці три налаштування:
meshConfig.accessLogFilemeshConfig.accessLogEncodingmeshConfig.accessLogFormat
Формат логів доступу за замовчуванням
Якщо не вказано accessLogFormat, Istio використовуватиме наступний стандартний формат логів доступу:
{{< text plain >}} [%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS% "%UPSTREAM_TRANSPORT_FAILURE_REASON%" %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n {{< /text >}}
У таблиці нижче наведено приклад використання формату стандартних логів доступу для запиту від 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:{{< text bash >}} $ kubectl exec "$SOURCE_POD" -c curl -- curl -sS -v httpbin:8000/status/418 ... < HTTP/1.1 418 Unknown ... < server: envoy ... I'm a teapot! ... {{< /text >}}
-
Перевірте логи
curl:{{< text bash >}} $ kubectl logs -l app=curl -c istio-proxy [2020-11-25T21:26:18.409Z] "GET /status/418 HTTP/1.1" 418 - via_upstream - "-" 0 135 4 4 "-" "curl/7.73.0-DEV" "84961386-6d84-929d-98bd-c5aee93b5c88" "httpbin:8000" "10.44.1.27:80" outbound|8000||httpbin.foo.svc.cluster.local 10.44.1.23:37652 10.0.45.184:8000 10.44.1.23:46520 - default {{< /text >}}
-
Перевірте логи
httpbin:{{< text bash >}} $ kubectl logs -l app=httpbin -c istio-proxy [2020-11-25T21:26:18.409Z] "GET /status/418 HTTP/1.1" 418 - via_upstream - "-" 0 135 3 1 "-" "curl/7.73.0-DEV" "84961386-6d84-929d-98bd-c5aee93b5c88" "httpbin:8000" "127.0.0.1:80" inbound|8000|| 127.0.0.1:41854 10.44.1.27:80 10.44.1.23:37652 outbound_.8000_._.httpbin.foo.svc.cluster.local default {{< /text >}}
Зверніть увагу, що повідомлення, повʼязані із запитом, зʼявляються в логах Istio-проксі як на джерелі, так і на пункті призначення — відповідно, curl і httpbin. Ви можете побачити в логах HTTP-метод (GET), HTTP-шлях (/status/418), код відповіді (418) та іншу інформацію про запит.
Очищення
Завершіть роботу сервісів [curl]({{< github_tree >}}/samples/curl) та [httpbin]({{< github_tree >}}/samples/httpbin):
{{< text bash >}} $ kubectl delete -f @samples/curl/curl.yaml@ $ kubectl delete -f @samples/httpbin/httpbin.yaml@ {{< /text >}}
Вимкнення логування доступу Envoy
Видаліть або встановіть значення meshConfig.accessLogFile у вашу конфігурацію встановлення Istio на "".
{{< tip >}}
У прикладі нижче замініть default на назву профілю, який ви використовували під час встановлення Istio.
{{< /tip >}}
{{< text bash >}} $ istioctl install --set profile=default ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ Installation complete {{< /text >}}