Questa pagina fornisce istruzioni dettagliate su come eseguire query e visualizzare i log utilizzando sia l'interfaccia utente di Grafana sia l'API Log Query per ottenere approfondimenti sugli eventi e sull'attività del servizio.
Dopo aver raccolto i log dai workload e dai servizi di cui è stato eseguito il deployment in Google Distributed Cloud (GDC) con air gap, puoi iniziare ad analizzarli. Per analizzare i log, puoi visualizzarli e filtrarli in pannelli Grafana informativi oppure accedervi direttamente dall'API Log Query utilizzando chiamate HTTP o gRPC per l'accesso programmatico.
Puoi accedere ai log in uno dei due modi seguenti:
- Pannelli Grafana: ottieni approfondimenti sul record delle attività del tuo progetto tramite il pannello Log della tua istanza Grafana. Questo pannello ti consente di eseguire query e individuare log specifici, fornendo una visibilità granulare dei dati in base alle tue esigenze. Grafana fornisce un'interfaccia facile da usare per filtrare e analizzare i dati dei workload, creando dashboard e pannelli personalizzati per una visualizzazione completa.
- API Log Query: per l'accesso programmatico, esegui query sui log direttamente dall' API Log Query del tuo progetto. L' API Log Query è un' API non Kubernetes che supporta HTTP e gRPC, esponendo i propri endpoint a te. Accedi a questa API solo all'interno di un'organizzazione specifica in Distributed Cloud seguendo i metodi di accesso API standard.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per eseguire query e visualizzare i log nell'interfaccia utente di Grafana, chiedi all'amministratore IAM dell'organizzazione o all'amministratore IAM del progetto di concederti uno dei ruoli predefiniti Grafana Viewer o Project Grafana Viewer. A seconda del livello di accesso e delle autorizzazioni di cui hai bisogno, potresti ottenere ruoli Grafana in un'organizzazione o un progetto.
In alternativa, per ottenere le autorizzazioni necessarie per eseguire query sui log dall'API Log Query, chiedi all'amministratore IAM del progetto di concederti il ruolo Log Query API Querier nello spazio dei nomi del progetto.
Per saperne di più su questi ruoli, consulta Prepara le autorizzazioni IAM.
Esegui query sui log e filtrali
Seleziona uno dei seguenti metodi per creare query e filtrare i log dai workload del progetto:
Pannello Log di Grafana
Questa sezione descrive come accedere ai log utilizzando il pannello Log in Grafana.
Identifica l'endpoint Grafana
Il seguente URL è l'endpoint dell'istanza Grafana del tuo progetto:
https://GDC_URL/PROJECT_NAMESPACE/grafana
Sostituisci quanto segue:
GDC_URL: l'URL della tua organizzazione in GDC.PROJECT_NAMESPACE: lo spazio dei nomi del progetto.Ad esempio, l'endpoint Grafana per il
platform-obsprogetto nell'org-1organizzazione èhttps://org-1/platform-obs/grafana.
Visualizza i log nell'interfaccia utente di Grafana
Esegui query sui log nell'interfaccia utente di Grafana:
- Nella console GDC, seleziona il progetto.
- Nel menu di navigazione, seleziona Operazioni > Logging.
Fai clic su Visualizza tutto in Grafana Loki.
Una nuova pagina apre l'endpoint Grafana e visualizza l'interfaccia utente.
Nell'interfaccia utente, fai clic su esplora Esplora dal menu di navigazione per aprire la pagina Esplora.
Dal menu nella barra Esplora, seleziona un'origine dati per recuperare i log, in base al tipo di universo:
Universi a zona singola: seleziona una delle seguenti origini dati per visualizzare i dati di logging della singola zona del tuo universo:
- Log operativi: visualizza i log operativi.
- Log di controllo: visualizza i log di controllo.
Universi multizona: Grafana può connettersi a zone diverse e mostrare i dati tra le zone. Seleziona una delle seguenti origini dati per visualizzare i dati di logging di qualsiasi zona del tuo universo, indipendentemente dalla zona in cui hai eseguito l'accesso:
- Log operativi ZONE_NAME: visualizza i log operativi di una zona specifica.
- Log di controllo ZONE_NAME: visualizza i log di controllo di una zona specifica.
Inoltre, per visualizzare i dati tra le zone in un'unica dashboard e aggiungere più zone alla query, seleziona Misto come origine dati.
Inserisci una query per cercare i log dal pannello Log utilizzando LogQL (Log Query Language) espressioni. Puoi eseguire questo passaggio in uno dei seguenti modi:
- Utilizza l'interfaccia interattiva di Query Builder. Quindi, fai clic su Esegui query.
- Inserisci la query direttamente nel campo di testo e premi Maiusc+Invio per eseguirla.
La pagina mostra i log che corrispondono alla query. Dopo aver eseguito query sui log, puoi esportarli. Fai clic su Esporta per scaricare i log in formato di testo normale o CSV. Puoi anche selezionare un intervallo di tempo per i log.

Figura 1. Opzione di menu per eseguire query sui log di controllo dall'interfaccia utente di Grafana.
Nella figura 1, l'opzione Log di controllo mostra l'interfaccia che ti consente di creare query da Grafana per recuperare i log di controllo.
Per esempi di etichette e valori per eseguire query su log diversi, vedi Query ed etichette di esempio.
Seleziona un intervallo di tempo per i log
Per eseguire query sui log in un intervallo di tempo:
Fai clic sul menu Selettore di tempo in Grafana.
Dal menu, esegui una delle seguenti azioni:
- Seleziona le opzioni relative all'intervallo di tempo, ad esempio gli ultimi 30 minuti.
- Imposta intervalli di tempo assoluti personalizzati scegliendo date e orari specifici dal calendario e facendo clic su Applica intervallo di tempo.
(Facoltativo) Fai clic su Modifica impostazioni ora per modificare le impostazioni Fuso orario e Anno fiscale dai controlli dell'intervallo di tempo.
Le impostazioni dell'ora vengono salvate per ogni dashboard. Per saperne di più sulle query su un intervallo di tempo, vedi https://grafana.com/docs/loki/latest/reference/api/#query-loki-over-a-range-of-time.
API Log Query
Questa sezione descrive come accedere ai log utilizzando l'API Log Query.
Identifica endpoint API Log Query
L'API Log Query espone i seguenti due endpoint per eseguire query sui log di controllo e operativi:
Endpoint dei log di controllo:
audit-log-query-api.ORG_DOMAINEndpoint dei log operativi:
operational-log-query-api.ORG_DOMAIN
Sostituisci ORG_DOMAIN con il nome di dominio dell'organizzazione. Puoi visualizzare questa proprietà utilizzando il comando gdcloud config list. Il nome di dominio deve seguire la sintassi org-name.zone.google.gdch.com. Ad esempio, un'organizzazione denominata org-1,
nella zona zone1 e in un ambiente di test ha un dominio come
org-1.zone1.google.gdch.test.
L'API Log Query ha le seguenti tre opzioni di endpoint:
- labels: elenca tutte le etichette per un progetto.
- labels/labels/LABEL/values: elenca i valori di etichetta specifici per un progetto.
- logs: elenca i log per un progetto specifico.
Per saperne di più, consulta la documentazione dell'API.
Invia una query
Invia una query all'endpoint dell'API Log Query utilizzando client HTTP o gRPC.
HTTP
Segui le istruzioni per
accedere direttamente all'API con un client HTTP.
Puoi fare affidamento su kubectl per gestire l'autenticazione o gestirla autonomamente.
Esegui query sull'API Log Query utilizzando client HTTP come curl, wget o un client HTTP che crei e gestisci. L'esempio seguente utilizza lo strumento curl per eseguire query sull'API e puoi utilizzare un formato simile per i comandi wget:
Autentica la richiesta cURL:
- Scarica e installa l'interfaccia a riga di comando gcloud.
Imposta la proprietà
core/organization_console_urldi gdcloud:gdcloud config set core/organization_console_url https://GDC_URLSostituisci
GDC_URLcon l'URL di un'organizzazione in GDC.Accedi con il provider di identità configurato:
gdcloud auth loginUtilizza il nome utente e la password per autenticare ed eseguire l'accesso.
Esporta il token ID per l'account specificato in una variabile di ambiente:
export TOKEN="$($HOME/gdcloud auth print-identity-token --audiences=https://LOG_QUERY_API_ENDPOINT)"Sostituisci
LOG_QUERY_API_ENDPOINTcon l' endpoint dell'API Log Query da cui vuoi eseguire query sui log e il dominio a cui vuoi connetterti. Pertanto, il valore del flagaudiencespuò essere, ad esempio,https://operational-log-query-api.org-1.zone1.google.gdch.test.Quando l'accesso è riuscito, puoi utilizzare l'intestazione di autorizzazione nella richiesta cURL tramite il comando
gdcloud auth print-identity-token. Per saperne di più, vedi gdcloud auth print-identity-token.
Se vuoi elencare tutte le etichette per un progetto, invia la seguente query:
curl -H "Authorization: Bearer ${TOKEN}" \ https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/labels \ -H "Content-Type: application/json" -vSostituisci quanto segue:
LOG_QUERY_API_ENDPOINT: l' endpoint dell'API Log Query da cui vuoi eseguire query sui log.PROJECT_NAMESPACE: lo spazio dei nomi del progetto.
Se vuoi elencare valori di etichetta specifici per un progetto, invia la seguente query:
curl -H "Authorization: Bearer ${TOKEN}" \ https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/labels/labels/LABEL/values \ -H "Content-Type: application/json" -vSostituisci quanto segue:
LOG_QUERY_API_ENDPOINT: l' endpoint dell'API Log Query da cui vuoi eseguire query sui log.PROJECT_NAMESPACE: lo spazio dei nomi del progetto.LABEL: l'etichetta specifica di cui vuoi eseguire query sul valore.
Se vuoi eseguire query sui log per un progetto specifico, crea una query
logs_filtere includila nel corpo della richiesta:curl -X GET -H "Authorization: Bearer ${TOKEN}" \ https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/logs \ -H "Content-Type: application/json" -d \ '{"logs_filter": {"labels_equal": {"LABEL": "LABEL_VALUE"}}}' -vSostituisci quanto segue:
LOG_QUERY_API_ENDPOINT: l' endpoint dell'API Log Query da cui vuoi eseguire query sui log.PROJECT_NAMESPACE: lo spazio dei nomi del progetto.LABEL: l'etichetta specifica per cui vuoi eseguire query sui log.LABEL_VALUE: il valore dell'etichetta per cui vuoi eseguire query sui log.
Consulta la documentazione dell'API per visualizzare tutte le opzioni per creare una query
logs_filter.
gRPC
gRPC è ampiamente supportato in tutti i linguaggi di programmazione e fornisce un metodo di comunicazione più efficiente rispetto ai client HTTP.
Per eseguire query sui log utilizzando gRPC, devi soddisfare i seguenti prerequisiti:
- Crea la tua libreria client basata sui buffer di protocollo forniti da Google.
- Implementa l'autenticazione nel client.
- Implementa i tentativi.
Per informazioni sui buffer di protocollo, consulta la documentazione dell'API.
L'esempio seguente mostra come eseguire query sui log da un programma Go utilizzando un client gRPC non autenticato. L'esempio presuppone che tu abbia creato un pacchetto golang che include un file di build Bazel per importare le dipendenze del codice:
Salva il seguente codice in un programma Go denominato
client.go:package main import ( "context" "crypto/tls" "flag" "fmt" "google.golang.org/grpc/credentials" "google.golang.org/grpc/metadata" pb "<import path to generated log query api protos>/pkg/apis/public/logging/v1/proto" "google.golang.org/grpc" ) var serverAddr = flag.String("server", "localhost:8080", "server address") func main() { flag.Parse() tc := credentials.NewTLS(&tls.Config{InsecureSkipVerify: true}) conn, err := grpc.Dial(*serverAddr, grpc.WithTransportCredentials(tc)) if err != nil { panic(error.Error(fmt.Errorf("create client connection failed: %v", err))) } defer conn.Close() c := pb.NewLogsClient(conn) md := metadata.Pairs("clienttest", "test") ctx := metadata.NewOutgoingContext(context.Background(), md) err = listLabels(ctx, c, "project-foo") if err != nil { panic(error.Error(err)) } if err := listLabelValues(ctx, c, "project-foo", "resource-bar"); err != nil { panic(error.Error(err)) } if err := listLogs(ctx, c, "project-foo", &pb.ListLogsFilter{ LabelsEqual: map[string]string{"resource-bar": "resource-bar-value"}, OrderAscending: true, }); err != nil { panic(error.Error(err)) } } // List all labels for a project. func listLabels(ctx context.Context, c pb.LogsClient, project string) error { lbr := &pb.ListLabelsRequest{ Parent: project, PageSize: 1000, // PageSize can be configured to limit the number of responses per page. } resp, err := c.ListLabels(ctx, lbr) if err != nil { return fmt.Errorf("list labels: %v", err) } fmt.Printf("%v", resp) return nil } // List specific label values for a project. func listLabelValues(ctx context.Context, c pb.LogsClient, project string, label string) error { lbr := &pb.ListLabelValuesRequest{ Parent: project, Label: label, PageSize: 1000, // PageSize can be configured to limit the number of responses per page. } resp, err := c.ListLabelValues(ctx, lbr) if err != nil { return fmt.Errorf("list label values: %v", err) } fmt.Printf("%v", resp) return nil } // List logs for a specific project. func listLogs(ctx context.Context, c pb.LogsClient, project string, lf *pb.ListLogsFilter) error { lbr := &pb.ListLogsRequest{ Parent: project, LogsFilter: lf, PageSize: 5, // PageSize can be configured to limit the number of responses per page. } resp, err := c.ListLogs(ctx, lbr) if err != nil { return fmt.Errorf("list logs: %v", err) } fmt.Printf("logs: %v", resp) return nil }Esegui il programma Go:
go run PATH_TO_API/client.go -server=LOG_QUERY_API_ENDPOINT:443Sostituisci quanto segue:
PATH_TO_API: il percorso del file API.LOG_QUERY_API_ENDPOINT: l' endpoint dell'API Log Query da cui vuoi eseguire query sui log.
Se il flag del server non è specificato, la richiesta predefinita viene inviata a
localhost.
Query ed etichette di esempio
Di seguito sono riportate alcune delle etichette predefinite che puoi utilizzare per eseguire query sui log:
cluster: il nome del cluster.namespace: lo spazio dei nomi del progetto.node: il nome del nodo.pod: il nome del pod.container: il nome del container.
I seguenti esempi di codice mostrano l'utilizzo di etichette e valori per eseguire query su log diversi:
Seleziona i log del server:
{cluster="admin", namespace="kube-system", resources="k8s_container", container="kube-apiserver"}Seleziona i log di controllo del cluster:
{cluster="admin", resources="k8s_audit"}