Informazioni di riferimento sull'osservabilità dei microservizi

Dati di configurazione

I dati di configurazione trovati nelle variabili di ambiente sono definiti nella sezione seguente.

Campi Specifiche
project_id Stringa

L'identificatore del progetto a cui vengono inviati i dati di osservabilità. Se vuoto, il plug-in di osservabilità gRPC tenta di recuperare dell'ID progetto dalle variabili di ambiente o e credenziali.

Se non viene trovata, le funzioni init di osservabilità restituiscono un .
cloud_logging Oggetto

Le opzioni di logging sono categorizzate in questa tabella.
Se non è presente, il logging è disabilitato.
cloud_logging.client_rpc_events[] Elenco

Un elenco di configurazioni client_rpc_events che rappresentano la configurazione per RPC in uscita dal file binario.

Le configurazioni di client_rpc_events vengono valutate in ordine di testo, viene usato il primo. Se una RPC non corrisponde a una voce, passa alla voce successiva dell'elenco.
cloud_logging.client_rpc_events[].methods[] List [String]

Un elenco di identificatori di metodi.

Per impostazione predefinita, l'elenco è vuoto e non corrisponde ad alcun metodo.

Il valore del metodo è nella forma di [service]/[method].

* è accettato come carattere jolly per:
  • Il nome del metodo. Se il valore è [service]/*, corrisponde a tutti i metodi nel servizio specificato.
  • L'intero valore del campo che corrisponde a qualsiasi [service]/[method]. Non è supportato quando client_rpc_events[].exclude è true.
  • Il carattere jolly * non può essere utilizzato in modo indipendente nel nome del servizio, */[method] non supportato.

Il nome del servizio, se specificato, deve corrispondere al nome completo nome del servizio, incluso il nome del pacchetto.

Esempi:
  • goo.Foo/Bar seleziona solo il metodo Bar dal servizio goo.Foo, qui goo è il nome del pacchetto.
  • goo.Foo/* seleziona tutti i metodi del servizio goo.Foo
  • * seleziona tutti i metodi da tutti i servizi.
cloud_logging.client_rpc_events[].exclude Bool

Indica se i metodi indicati da client_rpc_events[].methods[] devono essere esclusi dal logging.

Il valore predefinito è false, ovvero i metodi indicati dal client_rpc_events[].methods[] sono inclusi nel record di log.

Se il valore è true, il carattere jolly (*) non può essere utilizzato come valore intero in client_rpc_events[].methods[].
cloud_logging.client_rpc_events[].max_metadata_bytes Int

Numero massimo di byte di metadati da registrare. Se la dimensione del superiore al limite definito, le coppie chiave/valore che superano il limite il limite non viene registrato.

Il valore predefinito è 0, il che significa che non vengono registrati metadati.
cloud_logging.client_rpc_events[].max_message_bytes Int

Numero massimo di byte di ogni messaggio da registrare. Se la dimensione del messaggio supera il limite definito, i contenuti superano è troncato.

Il valore predefinito è 0, il che significa che nessun payload dei messaggi è registrato.
cloud_logging.server_rpc_events[] Elenco

Un elenco di configurazioni server_rpc_events, che rappresenta la configurazione per le RPC in entrata nel file binario.

Le configurazioni server_rpc_events vengono valutate in ordine di testo e viene utilizzata la prima corrispondenza. Se una RPC non corrisponde a una voce, continua con il prossimo

voce dell'elenco.
cloud_logging.server_rpc_events[].methods[] List [String]

Un elenco di stringhe che può selezionare un gruppo di metodi.

Per impostazione predefinita, l'elenco è vuoto e non corrisponde a nessun metodo.

Il valore del metodo è sotto forma di [service]/[method].

* è accettato come carattere jolly per:
  • Il nome del metodo. Se il valore è [service]/*, corrisponde a tutti i metodi nel servizio specificato.
  • L'intero valore del metodo che corrisponde a qualsiasi [service]/[method]. Non è supportata se server_rpc_events[].exclude è vero.
  • Il carattere jolly * non può essere utilizzato in modo indipendente nel nome del servizio, */[method] non supportato.

Il nome del servizio, se specificato, deve corrispondere al nome completo nome del servizio, incluso il nome del pacchetto.

Esempi:
  • goo.Foo/Bar seleziona solo il metodo Bar dal servizio goo.Foo, dove goo è il nome del pacchetto.
  • goo.Foo/* seleziona tutti i metodi dal servizio goo.Foo
  • * seleziona tutti i metodi da tutti i servizi.
cloud_logging.server_rpc_events[].exclude Bool

Indica se i metodi indicati da server_rpc_events[].methods[] deve essere escluso dal logging.

Il valore predefinito è false, vale a dire che i metodi indicati dal server_rpc_events[].methods[] vengono registrati.

Se il valore è true, il carattere jolly (*) non può essere utilizzato come valore intero in una voce qualsiasi di server_rpc_events[].methods[].
cloud_logging.server_rpc_events[].max_metadata_bytes Int

Numero massimo di byte di metadati da registrare. Se la dimensione del superiore al limite definito, le coppie chiave/valore che superano il limite il limite non viene registrato.

Il valore predefinito è 0, il che significa che non vengono registrati metadati.
cloud_logging.server_rpc_events[].max_message_bytes Int

Numero massimo di byte di ogni messaggio da registrare. Se le dimensioni del messaggio sono superiori al limite definito, i contenuti che superano il limite vengono troncati.

Il valore predefinito è 0, il che significa che il payload del messaggio non viene registrato.
cloud_monitoring Oggetto

Abilita Cloud Monitoring. Non sono disponibili opzioni di configurazione. Se fornisci un'obiezione di configurazione vuota, il monitoraggio è abilitato. Se non fornisci un oggetto di configurazione, il monitoraggio viene disattivato.

Ad esempio, quando non vengono specificate altre opzioni, una sezione di configurazione vuota attiva il monitoraggio.
export GRPC_GCP_OBSERVABILITY_CONFIG='{
    "project_id": "your-project-here",
    "cloud_monitoring": {
    }
}'
cloud_trace Oggetto

Una sezione di configurazione vuota attiva il monitoraggio con le opzioni di configurazione predefinite. Se non specifichi un oggetto di configurazione, il tracciamento viene disabilitato.

Ad esempio, una sezione di configurazione vuota attiva il monitoraggio con le opzioni di configurazione predefinite.
export GRPC_GCP_OBSERVABILITY_CONFIG='{
    "project_id": "your-project-here",
    "cloud_trace": {
    }
}'


Quando il tracciamento è abilitato, anche con una frequenza di campionamento pari a "0", la decisione di campionare quando viene propagata una particolare traccia.
cloud_trace.sampling_rate Numero

L'impostazione globale che controlla la probabilità che una RPC sia tracciato. Ad esempio:
  • Il valore 0.05 indica che esiste una probabilità del 5% che un RPC venga tracciato.
  • Il valore 1.0 indica che viene tracciata ogni chiamata.
  • Il valore 0 significa che non avviare nuove tracce.

Per impostazione predefinita, il valore sample_rate è 0.

Il plug-in rispetta la decisione di campionamento a monte. Se una RPC è scelto per il campionamento a monte, il plug-in raccoglie intervalli e caricamenti i dati al backend, indipendentemente dalla frequenza di campionamento relativa al plug-in.
labels Oggetto

Un oggetto JSON contenente un insieme di coppie chiave/valore. Sia la chiave che il valore sono stringhe.

Le etichette vengono applicate a Cloud Logging, Cloud Monitoring e Cloud Trace.

Definizioni Trace

Questa sezione fornisce informazioni sul monitoraggio.

Propagazione contesto traccia

Affinché il tracciamento tra servizi funzioni, il proprietario del servizio deve supportare propagazione del contesto della traccia ricevuto da upstream (o avviato da solo) a a valle. Il contesto di Trace viene propagato tra i servizi tramite i metadati gRPC. Assicurati di abilitare Cloud Monitoring, Cloud Logging le API Cloud Trace e le API dei microservizi, che consentono ai servizi configurazione per segnalare i dati di telemetria al servizio appropriato.

Senza il supporto della propagazione, i servizi a valle non possono generare span per una traccia. Gli intervalli esistenti non sono interessati. I plug-in di osservabilità dei microservizi supportano il formato binario OpenCensus per la codifica e il contesto della traccia di codifica.

Intervalli

Il nome di un intervallo è formattato come segue:

Tipo Valore di esempio Utilizzo
Periodo RPC [Sent|Recv].helloworld.Greeter.SayHello Il nome dell'intervallo è il nome completo del metodo, collegato da punti, senza prefisso.
I nomi degli span sono preceduti da Sent. per gli span RPC CLIENT e da Recv. per gli span RPC SERVER davanti al nome completo del metodo.
Intervallo di tentativi Attempt.helloworld.Greeter.SayHello Aggiunta di un prefisso Attempt. davanti al metodo completo nome.

Etichette di intervallo

Le integrazioni forniscono etichette di intervallo diverse.

Per gli intervalli di tentativi, vengono aggiunti altri due attributi correlati ai tentativi di ripetizione (etichette di intervallo):

Etichetta Valore di esempio Utilizzo
previous-rpc-attempts 0 Il numero di tentativi di ripetizione prima di questa RPC.
transparent-retry True/False Indica se questa RPC viene avviata da un nuovo tentativo trasparente.

Definizioni delle metriche

Le seguenti metriche sono disponibili e vengono visualizzate in una dashboard denominata Monitoraggio di microservizi (gRPC) per i percorsi più comuni degli utenti.

Di seguito sono riportate le metriche lato client gRPC:

Nome metrica Descrizione Tipo, tipo, unità Etichette
custom.googleapis.com/opencensus/grpc.io/client/started_rpcs Il conteggio dei tentativi di RPC client avviati, inclusi quelli che non sono stati completati. Cumulativo, Int64, 1 grpc_client_method
custom.googleapis.com/opencensus/grpc.io/client/completed_rpcs Il conteggio delle RPC client completate, ad esempio quando una risposta viene ricevuta o inviata dal server. Cumulativa, Int64, 1 grpc_client_method, grpc_client_status
custom.googleapis.com/opencensus/grpc.io/client/roundtrip_latency Tempo end-to-end impiegato per completare un tentativo RPC, compreso il tempo per scegliere un canale secondario. Cumulativa, Distribuzione, ms grpc_client_method
custom.googleapis.com/opencensus/grpc.io/client/api_latency Il tempo totale impiegato dalla libreria gRPC per completare una RPC dal dal punto di vista dell'applicazione. Cumulativa, Distribuzione, ms grpc_client_method, grpc_client_status
custom.googleapis.com/opencensus/grpc.io/client/sent_compressed_message_bytes_per_rpc I byte totali (compressi, non criptati) inviati in tutti i messaggi di richiesta per tentativo RPC. Cumulativa, Distribuzione, Per grpc_client_method, grpc_client_status
custom.googleapis.com/opencensus/grpc.io/client/received_compressed_message_bytes_per_rpc Il totale dei byte (compressi, non criptati) ricevuti su tutti messaggi di risposta per tentativo RPC. Cumulativa, Distribuzione, Per grpc_client_method, grpc_client_status

Sono disponibili le seguenti metriche lato server gRPC:

Nome metrica Descrizione Tipo, tipo, unità Etichette
custom.googleapis.com/opencensus/grpc.io/server/started_rpcs
Il numero di RPC ricevute sul server, inclusi RPC non completate.
Cumulativa, Int64, 1 grpc_server_method
custom.googleapis.com/opencensus/grpc.io/server/completed_rpcs
Il conteggio totale delle RPC completate, ad esempio quando viene inviata una risposta dal server.
Cumulativo, Int64, 1 grpc_server_method, grpc_server_status
custom.googleapis.com/opencensus/grpc.io/server/sent_compressed_message_bytes_per_rpc
I byte totali (compressi e non criptati) inviati in tutti i messaggi di risposta per RPC.
Cumulativa, Distribuzione, Per grpc_server_method, grpc_server_status
custom.googleapis.com/opencensus/grpc.io/server/received_compressed_message_bytes_per_rpc
Il totale dei byte (compressi, non criptati) ricevuti su tutti di richiesta di messaggi per RPC.
Cumulativa, Distribuzione, Per grpc_server_method, grpc_server_status
custom.googleapis.com/opencensus/grpc.io/server/server_latency
Il tempo totale impiegato da una RPC dal traffico del server (HTTP2 / inproc / cronet).
Cumulativa, Distribuzione, ms grpc_server_method

Ogni distribuzione nella tabella precedente contiene un istogramma con i bucket come segue:

  • Dimensioni in byte: 0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864, 268435456, 1073741824, 4294967296

  • Latenza in ms: 0, 0,01, 0,05, 0,1, 0,3, 0,6, 0,8, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000

Descrizione del tag:

  • grpc_client_method: nome completo del metodo gRPC, inclusi pacchetto, servizio e metodo, ad esempio google.bigtable.v2.Bigtable/CheckAndMutateRow
  • grpc_client_status: codice di stato del server gRPC ricevuto, ad esempio OK, CANCELLED DEADLINE_EXCEEDED
  • grpc_server_method: nome completo del metodo gRPC, inclusi pacchetto, servizio e , ad esempio com.exampleapi.v4.BookshelfService/Checkout
  • grpc_server_status: codice di stato del server gRPC restituito, ad esempio OK, CANCELLED, DEADLINE_EXCEEDED

Definizioni dei record di log

I log di osservabilità dei microservizi vengono caricati in Cloud Logging utilizzando il nome log (PROJECT_ID è il segnaposto per la stringa che rappresenta tuo progetto):

logName=projects/[PROJECT_ID]/logs/microservices.googleapis.com%2Fobservability%2Fgrpc

Di seguito è riportata la rappresentazione JSON del record di log generato:

{
    "authority": string,
    "callId": string,
    "type": string,
    "logger": string,
    "serviceName": string,
    "methodName": string,
    "peer": {
        "type": string,
        "address": string,
        "ipPort": int
    },
    "payload": {
        "timeout": string,
        "metadata":
            {
                string: string,
                string: string
            },
        "statusCode": string,
        "statusMessage": string,
        "statusDetails": string,
        "message": string,
        "messageLength": int,
    },
    "sequenceId": int
}

La tabella seguente descrive i campi della voce di log:

Campi Specifiche
autorità Stringa

È possibile utilizzare un singolo processo per eseguire più server virtuali con identità diverse.

L'autorità è il nome di un'identità server di questo tipo. In genere è un dell'URI sotto forma di host o host:porta.
callId Stringa

Identifica in modo univoco una chiamata [client/server] che è un UUID. Ogni chiamata può avere più voci di log. Hanno tutti lo stesso callId.
tipo Stringa

Il tipo di evento del log.

I tipi di eventi sono:
EVENT_TYPE_UNKNOWN
CLIENT_HEADER
SERVER_HEADER
CLIENT_MESSAGE
SERVER_MESSAGE
CLIENT_HALF_CLOSE
SERVER_TRAILER
CANCEL
registratore Stringa

Il tipo di logger eventi.

I tipi di logger eventi sono:
LOGGER_UNKNOWN, CLIENT, SERVER
serviceName Stringa

Il nome del servizio.
methodName Stringa

Il nome del metodo RPC.
peer Oggetto

Informazioni sull'indirizzo dei compagni. Sul lato client, il peer è connesso eventi intestazione server ed eventi trailer. Sul lato server, il peer viene sempre registrato nell'evento dell'intestazione del client.
peer.type Stringa

Il tipo di indirizzo (IPv4, IPv6 o UNIX).
peer.address Stringa

I contenuti dell'indirizzo.
peer.ip_port Int

Il numero di porta per l'indirizzo. Disponibile solo per gli indirizzi IPv4 e IPv6.
payload Oggetto

Il payload può includere una combinazione di metadati, timeout, messaggio a seconda dell'evento.

  • Per gli eventi di messaggio, il payload è costituito dai dati effettivi trasmessi come messaggi client/server e dalla lunghezza del messaggio.
  • Per gli eventi di intestazione, il payload include il nome e il valore dell'intestazione.
  • Per gli eventi trailer, il payload include dettagli sullo stato e metadati trailer (se presenti).
  • Per gli eventi di intestazione client, se è impostato il timeout, il payload include anche il timeout.
payload.timeout Stringa

Una stringa che rappresenta google.protobuf.Duration, ad esempio "1,2 sec".

Il valore di timeout RPC.
payload.metadata Mappatura[String, String]

Utilizzato dall'evento dell'intestazione o dall'evento del trailer.
payload.message Stringa (byte)

Il payload del messaggio.
payload.messageLength Int

Dimensioni del messaggio, indipendentemente dal fatto che il messaggio completo venga registrato (ad esempio, potrebbe essere troncato o omesso).
payload.statusCode Stringa

Il codice di stato gRPC.
payload.statusMessage Stringa

Il messaggio di stato gRPC.
payload.statusDetails Stringa

Il valore della chiave dei metadati grpc-status-details-bin, se esistente. Si tratta sempre di un messaggio google.rpc.Status codificato.
payloadTruncated Bool

True se il campo del messaggio o dei metadati è troncato o omesso grazie alle opzioni di configurazione.
sequenceId Int

L'ID sequenza del messaggio per questa chiamata. Il primo messaggio ha un valore di 1 per distinguere un valore non impostato. Lo scopo di questo campo è rilevare le voci mancanti in ambienti in cui la durata o l'ordinamento non sono garantiti.

Etichette risorse

Le etichette delle risorse identificano l'origine che genera i dati di osservabilità. Ogni etichetta della risorsa è una coppia chiave-valore, in cui le chiavi sono valori predefiniti specifici per l'ambiente di origine (ad esempio GKE o Compute Engine).

Per metriche e tracciamento su GKE i deployment, le etichette delle risorse vengono compilate per impostazione predefinita, ad eccezione del container e il nome dello spazio dei nomi. I valori mancanti possono essere inseriti utilizzando l'API Downward.

Di seguito sono riportate le chiavi variabile di ambiente:

  • CONTAINER_NAME
  • NAMESPACE

Ad esempio, la sezione env riportata di seguito include due etichette delle risorse:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: app1
  name: app1
spec:
  replicas: 2
  selector:
    matchLabels:
      run: app1
  template:
    metadata:
      labels:
        run: app1
    spec:
      containers:
        - image: 'o11y-examples:1.00'
          name: container1
          ports:
            - protocol: TCP
              containerPort: 50051
          env:
            - name: CONTAINER_NAME
              value: container1
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace

Etichette personalizzate

Le etichette personalizzate rappresentano informazioni aggiuntive fornite dall'utente nel di osservabilità dei dati. Le etichette sono composte da una chiave e un valore. La coppia chiave-valore è collegati al tracciamento dei dati come etichette di intervallo, ai dati delle metriche come etichette delle metriche e ai dati nel logging come etichette voce di log. Tutte le etichette personalizzate sono di tipo STRING.

Puoi fornire etichette personalizzate nella configurazione specificando un elenco di valori-chiave coppie di valori per labels. L'implementazione legge la configurazione e crea un'etichetta separata per ogni coppia chiave/valore, quindi la associa ai dati di osservabilità. Ad esempio:

"labels": {
    "DATACENTER": "SAN_JOSE_DC",
    "APP_ID": "24512"
  }

Ogni voce di log contiene le seguenti etichette aggiuntive:

{
   "DATACENTER": "SAN_JOSE_DC"
   "APP_ID": "24512"
}

Passaggi successivi