Dati di configurazione
I dati di configurazione trovati nelle variabili di ambiente sono definiti nella tabella 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 l'ID progetto dalle variabili di ambiente o dalle credenziali predefinite. Se non viene trovata, le funzioni di inizializzazione dell'osservabilità restituiscono un errore. |
cloud_logging |
Oggetto Le opzioni di registrazione sono classificate in questa tabella. Se non è presente, il logging è disattivato. |
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 client_rpc_events vengono valutate in ordine di testo e viene utilizzata la prima corrispondenza. Se un RPC non corrisponde a una voce, procede alla voce successiva nell'elenco. |
cloud_logging.client_rpc_events[].methods[] |
List [String] Un elenco di identificatori di metodi. Per impostazione predefinita, l'elenco è vuoto e non corrisponde a nessun metodo. Il valore del metodo è nella forma di [service]/[method] .* è accettato come carattere jolly per:
Il nome del servizio, se specificato, deve essere il nome completo del servizio, incluso il nome del pacchetto. Esempi:
|
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, il che significa che i metodi indicati da client_rpc_events[].methods[] sono inclusi nel record del 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 le dimensioni dei metadati sono superiori al limite definito, le coppie chiave-valore che superano il limite non vengono registrate. 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 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_logging.server_rpc_events[] |
Elenco Un elenco di configurazioni server_rpc_events , che rappresenta la configurazione per RPC in arrivo al file binario.Le configurazioni server_rpc_events vengono valutate in ordine di testo e viene utilizzata la prima corrispondenza. Se un RPC non corrisponde a una voce, procede alla voce successiva nell'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 è nella forma di [service]/[method] .* è accettato come carattere jolly per:
Il nome del servizio, se specificato, deve essere il nome completo del servizio, incluso il nome del pacchetto. Esempi:
|
cloud_logging.server_rpc_events[].exclude |
Bool Indica se i metodi indicati da server_rpc_events[].methods[] devono essere esclusi dal logging.Il valore predefinito è false, il che significa che i metodi indicati da server_rpc_events[].methods[] vengono registrati.Se il valore è true, il carattere jolly (*) non può essere utilizzato come valore intero in nessuna voce di server_rpc_events[].methods[] . |
cloud_logging.server_rpc_events[].max_metadata_bytes |
Int Numero massimo di byte di metadati da registrare. Se le dimensioni dei metadati sono superiori al limite definito, le coppie chiave-valore che superano il limite non vengono registrate. 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 fornisci un oggetto di configurazione, il monitoraggio viene disattivato. 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 monitoraggio è attivato, anche con una frequenza di campionamento pari a "0", la decisione di campionare una determinata traccia viene propagata. |
cloud_trace.sampling_rate |
Numero L'impostazione globale che controlla la probabilità che un RPC venga tracciato. Ad esempio:
Per impostazione predefinita, sampling_rate è 0 .Il plug-in rispetta la decisione di campionamento a monte. Se viene scelto un RPC per il campionamento a monte, il plug-in raccoglie gli span e carica i dati nel backend, indipendentemente dall'impostazione della frequenza di campionamento per il plug-in. |
labels |
Oggetto Un oggetto JSON contenente un insieme di coppie chiave-valore. Sia la chiave sia 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 del contesto della traccia
Affinché il monitoraggio tra servizi funzioni, il proprietario del servizio deve supportare la propagazione del contesto della traccia ricevuto dall'upstream (o avviato autonomamente) al downstream. Il contesto Trace viene propagato tra i servizi tramite i metadati gRPC. Assicurati di abilitare le API Cloud Monitoring, Cloud Logging, Cloud Trace e Microservices, che consentono ai servizi in questa configurazione di 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 slash di 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
|
Aggancia un prefisso Attempt. davanti al nome completo del metodo. |
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 chiamata RPC è stata avviata da un nuovo tentativo trasparente. |
Definizioni delle metriche
Le seguenti metriche sono disponibili e vengono visualizzate in una dashboard denominata Monitoraggio dei microservizi (gRPC) per i percorsi utente comuni.
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. | Cumulativo, Int64, 1 | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/roundtrip_latency |
Tempo end-to-end necessario per completare un tentativo RPC, incluso il tempo impiegato per scegliere un sottocanale. | Cumulativo, Distribuzione, ms | grpc_client_method |
custom.googleapis.com/opencensus/grpc.io/client/api_latency |
Il tempo totale impiegato dalla libreria gRPC per completare un'RPC dal punto di vista dell'applicazione. | Cumulativo, 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 |
La quantità totale di byte (compressi, non criptati) ricevuti in tutti i 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 conteggio delle RPC mai ricevute sul server, incluse le RPC non completate. |
Cumulativo, 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 |
Il numero totale di byte (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 |
I byte totali (compressi e non criptati) ricevuti in tutti i messaggi di richiesta 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 un'RPC dal punto di vista del trasporto del server (HTTP2 / inproc / cronet). |
Cumulativo, Distribuzione, ms | grpc_server_method |
Ogni distribuzione nella tabella sopra contiene un istogramma con 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 esempiogoogle.bigtable.v2.Bigtable/CheckAndMutateRow
grpc_client_status
: codice di stato del server gRPC ricevuto, ad esempioOK
,CANCELLED
,DEADLINE_EXCEEDED
grpc_server_method
: nome completo del metodo gRPC, inclusi pacchetto, servizio e metodo, ad esempiocom.exampleapi.v4.BookshelfService/Checkout
grpc_server_status
: codice di stato del server gRPC restituito, ad esempioOK
,CANCELLED
,DEADLINE_EXCEEDED
Definizioni dei record dei log
I log di osservabilità dei microservizi vengono caricati in Cloud Logging
utilizzando il nome del log (PROJECT_ID
è il segnaposto per la stringa che rappresenta
il tuo progetto):
logName=projects/[PROJECT_ID]/logs/microservices.googleapis.com%2Fobservability%2Fgrpc
Di seguito è riportata la rappresentazione JSON del record del 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 è una parte 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 |
logger | Stringa Il tipo di logger degli 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 peer. Sul lato client, il peer è registrato per gli eventi di intestazione del server e gli eventi trailer. Sul lato server, il peer viene sempre registrato nell'evento dell'intestazione del client. |
peer.type | Stringa Il tipo di indirizzo, che si tratti di IPv4, IPv6 o UNIX. |
peer.address | Stringa Il contenuto dell'indirizzo. |
peer.ip_port | Int Il numero di porta per l'indirizzo. Disponibile solo per gli indirizzi IPv4 e IPv6. |
payload | Object Il payload può includere una combinazione di metadati, timeout, messaggio e stato, a seconda dell'evento.
|
payload.timeout | Stringa Una stringa che rappresenta google.protobuf.Duration , ad esempio "1,2 s".Il valore di timeout RPC. |
payload.metadata | Mapping[String, String] Utilizzato dall'evento intestazione o dall'evento 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 Vero se il campo del messaggio o dei metadati viene troncato o omesso a causa delle 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 le metriche e il monitoraggio nei deployment GKE, le etichette delle risorse vengono compilate per impostazione predefinita, ad eccezione del nome del contenitore e del 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 nei dati di osservabilità. Le etichette sono costituite da una chiave e un valore. La coppia chiave-valore viene associata ai dati di monitoraggio come etichette di intervallo, ai dati delle metriche come etichette delle metriche e ai dati di logging come etichette di voce di log. Tutte le etichette personalizzate sono di tipo STRING.
Puoi fornire etichette personalizzate nella configurazione specificando un elenco di coppie chiave-valore 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
- Per informazioni sui tipi e sui generi di metriche, consulta Tipi di valore e tipi di metriche.
- Per informazioni sulle distribuzioni, consulta la pagina di riferimento sulle distribuzioni.
- Per informazioni sulla visualizzazione delle metriche di distribuzione sotto forma di grafici, consulta Metriche di distribuzione.
- Per informazioni sulle unità (ad es.
1
,ms
eBy
), consulta il campo unit nel riferimentoMetricDescriptor
.