Soluciona problemas de observabilidad

En esta página, se describe cómo solucionar problemas en las páginas de Anthos Service Mesh en la consola de Google Cloud.

Falta un servicio específico en la lista de servicios

Si falta un servicio de la lista, verifica que exista una configuración del servicio de Kubernetes en tu clúster.

Para obtener una lista de todos los servicios de Kubernetes, ingresa este comando:

 kubectl get services --all-namespaces

Para obtener una lista de los servicios de Kubernetes en un espacio de nombres específico, ingresa este comando:

kubectl get services -n YOUR_NAMESPACE

Faltan datos de telemetría de los servicios o los datos son incorrectos

De forma predeterminada, Cloud Monitoring y Cloud Logging están habilitados en tu proyecto de Google Cloud cuando instalas Anthos Service Mesh. Para informar datos de telemetría, cada proxy de sidecar que se incorpora en tus pods de servicio llama a la API de Cloud Monitoring y a la API de Cloud Logging. Después de implementar las cargas de trabajo, se necesitan alrededor de uno o dos minutos para que los datos de telemetría se muestren en la consola de Google Cloud. Anthos Service Mesh mantiene los paneles del servicio actualizados de forma automática:

  • Para las métricas, los proxies de sidecar llaman a la API de Cloud Monitoring cada alrededor de un minuto.

  • Para actualizar el gráfico de topología, los proxies de sidecar envían informes incrementales cada alrededor de un minuto e informes completos cada diez minutos.

  • Para el registro, los proxies de sidecar llaman a la API de Cloud Logging cada alrededor de diez segundos.

  • Para el seguimiento, debes habilitar Cloud Trace. Los seguimientos se informan según la frecuencia de muestreo configurada (en general, en una de cada 100 solicitudes).

Las métricas se muestran solo para los servicios HTTP en la página Métricas de Anthos Service Mesh. Si no ves ninguna métrica, revisa los siguientes aspectos:

Verifica que se hayan insertado proxies de sidecar

Verifica que todos los pods en el espacio de nombres de los servicios de tu aplicación tengan proxies de sidecar incorporados:

kubectl get pod -n YOUR_NAMESPACE --all

En el siguiente resultado de ejemplo del comando anterior, observa que la columna READY indica que hay dos contenedores para cada una de tus cargas de trabajo: el contenedor principal y el contenedor del proxy de sidecar.

NAME                    READY   STATUS    RESTARTS   AGE
YOUR_WORKLOAD           2/2     Running   0          20s
...

Si no ves dos contenedores, verifica si tu espacio de nombres tiene la etiqueta istio-injection=enabled, que indica que la inserción automática de sidecar está habilitada:

  kubectl get ns --show-labels

Resultado de ejemplo:

NAME              STATUS   AGE   LABELS
default           Active   35m   istio-injection=enabled
istio-system      Active   34m   istio-injection=disabled,istio-operator-managed=Reconcile
  • Si no ves la etiqueta istio-injection=enabled, ejecuta el siguiente comando para habilitar la inserción automática de sidecar:

    kubectl label namespace YOUR_NAMESPACE istio-injection=enabled --overwrite
  • Si ves la etiqueta istio-injection=enabled e instalaste Anthos Service Mesh en un clúster existente de Google Kubernetes Engine que tenía cargas de trabajo, debes reiniciar cualquier pod en ejecución para que se inserte o actualice el proxy de sidecar con la versión actual de Anthos Service Mesh. Consulta Actualiza sidecars para pods existentes a fin de obtener más información.

Verifica los nombres de los puertos del servicio de Kubernetes

Comprueba los nombres de los puertos del servicio de Kubernetes para verificar que Anthos Service Mesh considere el servicio como HTTP. Para que se los incluya en Anthos Service Mesh, los puertos del servicio deben tener un nombre, y este debe incluir el protocolo del puerto, por ejemplo:

apiVersion: v1
kind: Service
metadata:
  name: ratings
  labels:
    app: ratings
    service: ratings
spec:
  ports:
  - port: 9080
    name: http

El nombre del puerto del servicio puede incluir un sufijo en la sintaxis name: protocol[-suffix], en la que los corchetes indican un sufijo opcional que debe comenzar con un guion, por ejemplo:

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - number: 3306
    name: mysql
  - number: 80
    name: http-web

Para que las métricas se muestren en la consola de Google Cloud, los puertos del servicio deben tener nombres con alguno de los siguientes protocolos: http, http2 o grpc. Los puertos del servicio con el protocolo https se tratan como tcp, y no se muestran las métricas de esos servicios.

Verifica que las API necesarias estén habilitadas

Anthos Service Mesh requiere varias API para informar y mostrar telemetría. Puedes ver qué API están habilitadas para tu proyecto mediante el comando gcloud services list, o bien puedes habilitar todas las API requeridas con el fin de asegurarte de que tienes todas.

  1. Configura el proyecto predeterminado para Google Cloud CLI:

    gcloud config set project YOUR_PROJECT_ID
  2. Habilita todas las API requeridas:

    gcloud services enable \
       container.googleapis.com \
       compute.googleapis.com \
       monitoring.googleapis.com \
       logging.googleapis.com \
       meshca.googleapis.com \
       meshtelemetry.googleapis.com \
       meshconfig.googleapis.com \
       iamcredentials.googleapis.com \
       anthos.googleapis.com \
       gkeconnect.googleapis.com \
       gkehub.googleapis.com \
       cloudresourcemanager.googleapis.com

Verifica que exista cuenta de servicio del plano de datos de la malla ASM

  1. En la consola de Google Cloud, abre la página IAM:

    Abrir la página IAM

  2. Selecciona tu proyecto.

  3. En la lista de miembros, busca una cuenta de servicio con el nombre Cuenta de servicio del plano de datos de la malla ASM.

  4. Si falta la cuenta de servicio, créala:

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      https://meshconfig.googleapis.com/v1alpha1/projects/YOUR_PROJECT_ID:initialize

Verifica que las cargas de trabajo estén en ejecución

  1. En la consola de Google Cloud, abre la página Cargas de trabajo de GKE:

    Abre Cargas de trabajo de GKE.

  2. Selecciona tu proyecto.

  3. Agrega un filtro para tu clúster. Verifica que todas las cargas de trabajo de tu aplicación y Anthos Service Mesh funcionen de forma correcta con el estado OK. Una carga de trabajo puede fallar debido a recursos limitados (CPU, memoria, etc.), en cuyo caso debes actualizar tu clúster con más recursos. Consulta Cambia el tamaño de un clúster para obtener más información.

Verifica que la aplicación esté entregando solicitudes

Verifica que la aplicación esté entregando solicitudes de manera activa. Es posible que el valor de QPS sea bajo, pero la aplicación debe recibir tráfico.

El gráfico de topología está vacío

Si el gráfico de topología no muestra tus servicios y muestra el mensaje de error No data available to graph. Check your filters and try again, verifica lo siguiente:

Verifica el ID de la malla

Verifica que el clúster tenga la etiqueta mesh_id correcta:

  1. Obtén el número de proyecto, que es un número único que se genera de forma automática cuando creas tu proyecto.

  2. Asegúrate de que el clúster tenga una etiqueta mesh_id en el siguiente formato: mesh_id: proj-PROJECT_NUMBER

    Corrige la etiqueta mesh_id si falta o es incorrecta. Si deseas obtener más información, consulta Agrega o actualiza etiquetas en clústeres existentes.

  3. Configura las siguientes variables de entorno:

    • Configura el nombre del clúster:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Establece CLUSTER_LOCATION en la zona o en la región del clúster:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
  4. Vuelve a implementar Anthos Service Mesh con las mismas opciones que usaste antes.

  5. Cualquier carga de trabajo que ya estaba en ejecución en tu clúster antes de instalar Anthos Service Mesh debe tener el proxy de sidecar actualizado, de modo que tenga la versión actual de Anthos Service Mesh.

    kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE