Registros de Acceso de Envoy
El tipo más simple de registro de Istio es el registro de acceso de Envoy.
Los proxies de Envoy imprimen información de acceso en su salida estándar.
La salida estándar de los contenedores de Envoy se puede imprimir con el comando kubectl logs
.
Antes de empezar
Configura Istio siguiendo las instrucciones de la Guía de instalación.
Despliega la aplicación de ejemplo curl para usarla como fuente de prueba para enviar solicitudes. Si tienes habilitada la inyección automática de sidecar , ejecuta el siguiente comando para desplegar la aplicación de ejemplo:
$ kubectl apply -f @samples/curl/curl.yaml@
De lo contrario, inyecta manualmente el sidecar antes de desplegar la aplicación
curl
con el siguiente comando:$ kubectl apply -f <(istioctl kube-inject -f @samples/curl/curl.yaml@)
Establece la variable de entorno
SOURCE_POD
con el nombre de tu pod de origen:$ export SOURCE_POD=$(kubectl get pod -l app=curl -o jsonpath={.items..metadata.name})
Inicia el ejemplo httpbin.
Si has habilitado la inyección automática de sidecar, despliega el servicio
httpbin
:$ kubectl apply -f @samples/httpbin/httpbin.yaml@
De lo contrario, tienes que inyectar manualmente el sidecar antes de desplegar la aplicación
httpbin
:$ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@)
Habilitar el registro de acceso de Envoy
Istio ofrece varias formas de habilitar los registros de acceso. Se recomienda el uso de la API de Telemetría.
Usando la API de Telemetría
La API de Telemetría se puede usar para habilitar o deshabilitar los registros de acceso:
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: mesh-default
namespace: istio-system
spec:
accessLogging:
- providers:
- name: envoy
El ejemplo anterior utiliza el proveedor de registro de acceso envoy
predeterminado, y no configuramos nada más que la configuración predeterminada.
Una configuración similar también se puede aplicar a un namespace individual, o a un workload individual, para controlar el registro a un nivel granular.
Para obtener más información sobre el uso de la API de Telemetría, consulte la descripción general de la API de Telemetría.
Usando Mesh Config
Si utilizó una configuración de IstioOperator
para instalar Istio, agregue el siguiente campo a su configuración:
spec:
meshConfig:
accessLogFile: /dev/stdout
De lo contrario, agregue la configuración equivalente a su comando istioctl install
original, por ejemplo:
$ istioctl install <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout
También puede elegir entre JSON y texto configurando accessLogEncoding
en JSON
o TEXT
.
También es posible que desee personalizar el formato del registro de acceso editando accessLogFormat
.
Consulte las opciones de malla global para obtener más información sobre estas tres configuraciones:
meshConfig.accessLogFile
meshConfig.accessLogEncoding
meshConfig.accessLogFormat
Formato de registro de acceso predeterminado
Istio utilizará el siguiente formato de registro de acceso predeterminado si no se especifica accessLogFormat
:
[%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_RAW% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n
La siguiente tabla muestra un ejemplo utilizando el formato de registro de acceso predeterminado para una solicitud enviada desde curl
a httpbin
:
Operador de registro | registro de acceso en curl | registro de acceso en 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_RAW% | 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 |
Probar el registro de acceso
Envíe una solicitud de
curl
ahttpbin
:$ kubectl exec "$SOURCE_POD" -c curl -- curl -sS -v httpbin:8000/status/418 ... < HTTP/1.1 418 Unknown ... < server: envoy ... I'm a teapot! ...
Verifique el registro de
curl
:$ 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
Verifique el registro de
httpbin
:$ 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
Tenga en cuenta que los mensajes correspondientes a la solicitud aparecen en los registros de los proxies de Istio tanto del origen como del destino, curl
y httpbin
, respectivamente. Puede ver en el registro el verbo HTTP (GET
), la ruta HTTP (/status/418
), el código de respuesta (418
) y otra información relacionada con la solicitud.
Limpieza
Apague los services curl y httpbin:
$ kubectl delete -f @samples/curl/curl.yaml@
$ kubectl delete -f @samples/httpbin/httpbin.yaml@
Deshabilitar el registro de acceso de Envoy
Elimine, o establezca en ""
, la configuración meshConfig.accessLogFile
en su configuración de instalación de Istio.
$ istioctl install --set profile=default
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete