Configurar registros de acceso con la API de Telemetría
La API de Telemetría ha estado en Istio como una API de primera clase desde hace algún tiempo.
Anteriormente, los usuarios tenían que configurar la telemetría en la sección MeshConfig
de la configuración de Istio.
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@)
Instalación
En este ejemplo, enviaremos registros a Grafana Loki, así que asegúrese de que esté instalado:
$ 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
Empezar con la API de Telemetría
Habilitar el registro de acceso
$ 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
El ejemplo anterior utiliza el proveedor de registro de acceso
envoy
incorporado, y no configuramos nada más que la configuración predeterminada.Deshabilitar el registro de acceso para un workload específico
Puede deshabilitar el registro de acceso para el service
curl
con la siguiente configuración:$ 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
Filtrar el registro de acceso con el modo de workload
Puede deshabilitar el registro de acceso de entrada para el service
httpbin
con la siguiente configuración:$ 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
Filtrar el registro de acceso con expresión CEL
La siguiente configuración muestra el registro de acceso solo cuando el código de respuesta es mayor o igual a 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
Establecer el registro de acceso de filtro predeterminado con expresión CEL
La siguiente configuración muestra los registros de acceso solo cuando el código de respuesta es mayor o igual a 400 o la solicitud fue a BlackHoleCluster o PassthroughCluster: Nota:
xds.cluster_name
solo está disponible con Istio versión 1.16.2 y superior$ 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
Filtrar registros de acceso de verificación de salud con expresión CEL
La siguiente configuración muestra los registros de acceso solo cuando los registros no son generados por el Servicio de Verificación de Salud de Amazon Route 53. Nota:
request.useragent
es específico del tráfico HTTP, por lo tanto, para evitar romper el tráfico TCP, necesitamos verificar la existencia del campo. Para obtener más información, consulte Comprobación de tipos de 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
Para obtener más información, consulte Usar expresiones para valores
Trabajar con el proveedor de OpenTelemetry
Istio admite el envío de registros de acceso con el protocolo OpenTelemetry, como se explica aquí.
Limpieza
Eliminar toda la API de Telemetría:
$ kubectl delete telemetry --all -A
Eliminar
loki
:$ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
Desinstalar Istio del cluster:
$ istioctl uninstall --purge --skip-confirmation