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
curlcon el siguiente comando:$ kubectl apply -f <(istioctl kube-inject -f @samples/curl/curl.yaml@)Establece la variable de entorno
SOURCE_PODcon 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-systemEmpezar 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 EOFEl ejemplo anterior utiliza el proveedor de registro de acceso
envoyincorporado, 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
curlcon 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 EOFFiltrar el registro de acceso con el modo de workload
Puede deshabilitar el registro de acceso de entrada para el service
httpbincon 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 EOFFiltrar 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 EOFEstablecer 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_namesolo 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' " EOFFiltrar 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.useragentes 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"))" EOFPara 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 -AEliminar
loki:$ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-systemDesinstalar Istio del cluster:
$ istioctl uninstall --purge --skip-confirmation