Risoluzione dei problemi di osservabilità

Questa pagina descrive come risolvere i problemi nelle pagine Anthos Service Mesh nella console Google Cloud.

Nell'elenco dei servizi manca un servizio specifico

Se un servizio non è presente nell'elenco, verifica che nel cluster esista una configurazione del servizio Kubernetes.

Per ottenere un elenco di tutti i servizi Kubernetes:

 kubectl get services --all-namespaces

Per ottenere un elenco dei servizi Kubernetes in uno spazio dei nomi specifico:

kubectl get services -n YOUR_NAMESPACE

Dati di telemetria mancanti o errati per i servizi

Per impostazione predefinita, Cloud Monitoring e Cloud Logging sono abilitati nel progetto Google Cloud quando installi Anthos Service Mesh. Per segnalare i dati di telemetria, ogni proxy sidecar inserito nei pod di servizio chiama l'API Cloud Monitoring e l'API Cloud Logging. Dopo il deployment dei carichi di lavoro, sono necessari circa uno o due minuti per visualizzare i dati di telemetria nella console Google Cloud. Anthos Service Mesh mantiene automaticamente aggiornate le dashboard dei servizi:

  • Per le metriche, i proxy sidecar chiamano l'API Cloud Monitoring all'incirca ogni minuto.

  • Per aggiornare il grafico della topologia, i proxy sidecar inviano report incrementali circa ogni minuto e report completi ogni dieci minuti.

  • Per il logging, i proxy sidecar chiamano l'API Cloud Logging circa ogni dieci secondi.

  • Per il tracciamento, devi abilitare Cloud Trace. Le tracce vengono segnalate in base alla frequenza di campionamento configurata (in genere una su 100 richieste).

Le metriche vengono visualizzate solo per i servizi HTTP nella pagina Metriche di Anthos Service Mesh. Se non vedi metriche, verifica quanto segue:

Verifica che i proxy sidecar siano stati inseriti

Verifica che in tutti i pod nello spazio dei nomi per i servizi della tua applicazione siano stati inseriti proxy sidecar:

kubectl get pod -n YOUR_NAMESPACE --all

Nel seguente esempio di output del comando precedente, puoi notare che la colonna READY indica che esistono due container per ciascuno dei tuoi carichi di lavoro: il container principale e il container per il proxy sidecar.

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

Se non vedi due container, controlla se lo spazio dei nomi ha l'etichetta istio-injection=enabled, che indica che l'inserimento automatico di file collaterali è abilitato:

  kubectl get ns --show-labels

Output di esempio:

NAME              STATUS   AGE   LABELS
default           Active   35m   istio-injection=enabled
istio-system      Active   34m   istio-injection=disabled,istio-operator-managed=Reconcile
  • Se non vedi l'etichetta istio-injection=enabled, esegui questo comando per abilitare l'inserimento automatico di file collaterali:

    kubectl label namespace YOUR_NAMESPACE istio-injection=enabled --overwrite
  • Se vedi l'etichetta istio-injection=enabled e hai installato Anthos Service Mesh su un cluster Google Kubernetes Engine esistente su cui erano presenti carichi di lavoro, devi riavviare tutti i pod in esecuzione per inserire o aggiornare il proxy sidecar con la versione attuale di Anthos Service Mesh. Per ulteriori informazioni, consulta Aggiornamento di file collaterali per i pod esistenti.

Verificare i nomi delle porte di servizio Kubernetes

Controlla i nomi delle porte del servizio Kubernetes per verificare che Anthos Service Mesh consideri il servizio un servizio HTTP. Per essere incluse in Anthos Service Mesh, è necessario assegnare un nome alle porte dei servizi, che devono includere il protocollo della porta, ad esempio:

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

Il nome della porta del servizio può includere un suffisso nella seguente sintassi: name: protocol[-suffix] dove le parentesi quadre indicano un suffisso facoltativo che deve iniziare con un trattino, ad esempio:

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

Affinché le metriche vengano visualizzate nella console Google Cloud, le porte di servizio devono essere denominate con uno dei seguenti protocolli: http, http2 o grpc. Le porte di servizio denominate con il protocollo https vengono trattate come tcp e le metriche per questi servizi non vengono visualizzate.

Verifica che le API richieste siano abilitate

Anthos Service Mesh richiede diverse API per la generazione di report e la visualizzazione della telemetria. Puoi vedere quali API sono abilitate per il tuo progetto utilizzando il comando gcloud services list oppure puoi semplicemente abilitare tutte le API richieste per assicurarti di riceverle tutte.

  1. Imposta il progetto predefinito per Google Cloud CLI:

    gcloud config set project YOUR_PROJECT_ID
  2. Abilita tutte le API richieste:

    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

Verifica che l'account di servizio del piano dati mesh ASM esista

  1. Nella console Google Cloud, apri la pagina IAM:

    Apri la pagina IAM

  2. Seleziona il progetto.

  3. Nell'elenco dei membri, cerca un account di servizio con il nome ASM Mesh Data Plane Service Account.

  4. Se manca l'account di servizio, crealo:

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

Verifica che i carichi di lavoro siano in esecuzione

  1. Nella console Google Cloud, apri la pagina Carichi di lavoro di GKE:

    Carichi di lavoro GKE aperti

  2. Seleziona il progetto.

  3. Aggiungi un filtro per il cluster. Verifica che tutti i carichi di lavoro per la tua applicazione e Anthos Service Mesh siano in esecuzione con stato OK. Un carico di lavoro potrebbe non riuscire a causa delle risorse limitate (CPU, memoria e così via), nel qual caso devi eseguire l'upgrade del cluster con più risorse. Consulta Ridimensionamento di un cluster per ulteriori informazioni.

Verificare che l'applicazione stia gestendo le richieste

Verifica che la tua applicazione stia gestendo effettivamente le richieste. Il valore QPS può essere basso, ma dovrebbe ricevere traffico.

Il grafico della topologia è vuoto

Se il grafico della topologia non mostra i tuoi servizi e mostra il messaggio di errore No data available to graph. Check your filters and try again, verifica quanto segue:

Verificare l'ID mesh

Verifica che il cluster abbia l'etichetta mesh_id corretta:

  1. Recupera il numero di progetto, ovvero un numero univoco generato automaticamente quando crei il progetto.

  2. Assicurati che il cluster abbia un'etichetta mesh_id nel seguente formato: mesh_id: proj-PROJECT_NUMBER

    Correggi l'etichetta mesh_id se mancante o errata. Per maggiori informazioni, consulta Aggiunta o aggiornamento di etichette per i cluster esistenti.

  3. Imposta le seguenti variabili di ambiente:

    • Imposta l'ID progetto:

      export PROJECT_ID=YOUR_PROJECT_ID
    • Imposta il numero del progetto:

      export PROJECT_NUMBER=YOUR_PROJECT_NUMBER
    • Imposta il nome del cluster:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Imposta CLUSTER_LOCATION sulla zona o sulla regione del cluster:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
    • Imposta il pool di carichi di lavoro:

      export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
    • Imposta l'ID mesh:

      export MESH_ID="proj-${PROJECT_NUMBER}"
  4. Esegui di nuovo il deployment di Anthos Service Mesh con le stesse opzioni che hai utilizzato in precedenza.

  5. Tutti i carichi di lavoro in esecuzione sul tuo cluster prima dell'installazione di Anthos Service Mesh devono avere il proxy sidecar aggiornato in modo che abbiano l'attuale Anthos Service Mesh.

    kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE