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:

    Zip
    $ 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:

    Zip
    $ 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:

    Zip
    $ kubectl apply -f @samples/httpbin/httpbin.yaml@

    De lo contrario, tienes que inyectar manualmente el sidecar antes de desplegar la aplicación httpbin:

    Zip
    $ 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:

ZipZipZip
$ 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

  1. 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.

  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. Eliminar toda la API de Telemetría:

    $ kubectl delete telemetry --all -A
  2. Eliminar loki:

    ZipZip
    $ kubectl delete -f @samples/addons/loki.yaml@ -n istio-system
    $ kubectl delete -f @samples/open-telemetry/loki/otel.yaml@ -n istio-system
  3. Desinstalar Istio del cluster:

    $ istioctl uninstall --purge --skip-confirmation
¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!