I filtri nell'API Cloud Monitoring ti consentono di selezionare serie temporali, tipi di metriche, risorse monitorate e gruppi di risorse specifici in richieste API, grafici e policy di avviso. Per conteggiare i processi in esecuzione sulle tue macchine virtuali in una criterio di avviso o in un grafico, utilizza invece i filtri di integrità dei processi.
Prima di iniziare
Se non hai familiarità con metriche, serie temporali e risorse monitorate, consulta Metriche, serie temporali e risorse.
Se non hai dimestichezza con le etichette, consulta Etichette per un'introduzione.
Utilizzo dei filtri
Puoi utilizzare i filtri nell'API Monitoring per:
- Seleziona i dati delle serie temporali specifici restituiti da una richiesta API
list. Il filtro può selezionare le serie temporali in base al progetto, al gruppo, alle proprietà risorsa monitorata e alle proprietà delle metriche dei dati. Per ulteriori informazioni ed esempi, consulta Recupero dei dati delle serie temporali.
Assegna le risorse a un
Groupin base alle proprietà delle risorse e al progetto a cui appartengono. Per ulteriori informazioni ed esempi, consulta Definizione dell'appartenenza ai gruppi.Seleziona le risorse all'interno di un gruppo in base alle relative proprietà. Per ulteriori informazioni ed esempi, consulta Elenco dei membri del gruppo.
Elenca tipi di metriche particolari. Per ulteriori informazioni ed esempi, consulta Elenco dei descrittori delle metriche.
Elencare tipi di risorsa monitorata specifici. Per ulteriori informazioni ed esempi, consulta Elenco risorsa monitorata monitorate.
Selettori filtri
Un filtro è costituito da almeno un selettore, ovvero una parola chiave del filtro. I seguenti esempi illustrano i diversi selettori:
-
project: corrisponde quando le metriche dei progetti specificati sono visibili al progetto di definizione dell'ambito di un ambito delle metriche menzionato nel parametroname.Utilizza il selettore
projectquando un progetto Google Cloud può visualizzare le metriche di più progetti Google Cloud o account AWS e vuoi solo le metriche per un sottoinsieme di questi progetti. Ad esempio, se l'ambito delle metriche perProject-AincludeProject-B, si verifica una corrispondenza quandonameha un valore diProject-Ae utilizzi il seguente filtro:project = "Project-B"
Il seguente filtro corrisponde a qualsiasi ID progetto che inizia con
Project-:project = monitoring.regex.full_match("Project-.*") -
group: corrisponde alle risorse appartenenti a unGroup.Il seguente filtro corrisponde al gruppo con l'identificatore
group-id:group.id = "group-id" -
resource: corrisponde alle risorse monitorate di un tipo specifico o con valori di etichetta specifici.-
Il seguente filtro corrisponde a tutte le risorse monitorate che sono istanze di macchine virtuali (VM) Compute Engine:
resource.type = "gce_instance"
-
Il seguente filtro corrisponde a tutte le risorse la cui zona inizia con
europe-:resource.labels.zone = starts_with("europe-")
-
-
metric: corrisponde a un tipo di metrica o a una serie temporale con un'etichetta particolare che corrisponde a un valore specifico.-
Il seguente filtro corrisponde a un tipo di metrica specifico:
metric.type = "compute.googleapis.com/instance/cpu/usage_time"
-
Il seguente filtro corrisponde alle serie temporali con un'etichetta denominata
instance_name, il cui valore inizia congke-hipsterogke-nginx:metric.labels.instance_name = monitoring.regex.full_match("gke-(hipster|nginx).*")
-
La tabella seguente mostra quali selettori sono consentiti nei filtri in base alla chiamata all'API Monitoring:
| Scopo del filtro | Selettore project |
Selettore group |
Selettore resource |
Selettore metric |
|---|---|---|---|---|
| Definisci i gruppi | sì | yes* | ||
| Elenca membri di gruppi | sì | sì | ||
| Elenca serie temporali | sì | sì | sì | sì † |
| Elenca descrittori della metrica | sì | sì | ||
| Elenca i descrittori risorsa monitorata | sì |
† Quando elenchi le serie temporali, devi specificare esattamente un tipo di metrica.
Le sezioni seguenti mostrano esempi di utilizzi tipici dei filtri di monitoraggio. Consulta la sezione Sintassi dei filtri per una discussione completa degli oggetti e degli operatori di filtro disponibili.
Recupero dei dati delle serie temporali
Metodo:
projects.timeSeries.list
Filtra oggetti:
project, group.id, resource.type, resource.labels.[KEY], metric.type,
metric.labels.[KEY]
Una serie temporale è un elenco di punti dati con timestamp di un tipo di metrica proveniente da una risorsa monitorata specifica. Per maggiori dettagli, consulta Il modello di metrica. Il tipo di metrica è specificato da un descrittore della metrica e la risorsa monitorata è specificata da un descrittore della risorsa monitorata.
Il filtro specificato per il metodo timeSeries.list deve includere un selettore metric, che deve specificare esattamente un tipo di metrica:
- Per restituire tutte le serie temporali per un determinato tipo di metrica, utilizza il seguente filtro:
metric.type = "compute.googleapis.com/instance/cpu/usage_time"
Per restituire tutte le serie temporali per un gruppo specifico, utilizza il seguente filtro. Il selettore
groupfunziona solo con i dati delle serie temporali allineate; per ulteriori informazioni, consulta Selettore di gruppi:metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND group.id = "2468013579"
Per restituire tutte le serie temporali di un'istanza Compute Engine specifica, utilizza il seguente filtro:
metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND metric.labels.instance_name = "my-instance-name"
Per restituire tutte le serie temporali delle istanze Compute Engine i cui nomi iniziano con
frontend-, utilizza il seguente filtro:metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND metric.labels.instance_name = starts_with("frontend-")Per restituire tutte le serie temporali delle istanze Compute Engine i cui nomi iniziano con
gke-hipsterogke-nginx, utilizza il seguente filtro:metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND metric.labels.instance_name = monitoring.regex.full_match("^gke-(hipster|nginx).*")
Definizione dell'appartenenza ai gruppi
Metodo:
projects.groups.create
Filtra oggetti: project, resource.type, resource.labels.key,
metadata.system_labels.[KEY], metadata.user_labels.[KEY]
Un gruppo può contenere un numero qualsiasi di risorse, come specificato da un filtro. L'appartenenza al gruppo è dinamica; un numero maggiore o minore di risorse potrebbe corrispondere al filtro ogni volta che viene valutato. Il parametro name nell'oggetto Group specifica il gruppo e il progetto di definizione dell'ambito di un ambito delle metriche.
Se nel filtro viene utilizzato il selettore project, deve specificare un progetto le cui metriche sono visibili al progetto di definizione dell'ambito.
Ad esempio, per creare un gruppo che includa solo istanze di macchine virtuali (VM) Compute Engine in Europa, utilizza il seguente filtro:
resource.type = "gce_instance" AND resource.labels.zone = starts_with("europe-")
Per informazioni sui metodi API che puoi utilizzare per eliminare, aggiornare o elencare i gruppi, consulta la pagina di riferimento dell'API projects.groups.
Membri del gruppo di schede
Metodo:
projects.groups.members.list
Filtra oggetti: project, resource.type, resource.labels.[KEY]
Il parametro name specifica un progetto di definizione dell'ambito di un ambito delle metriche e un gruppo definito in quel progetto. Se non specifichi un filtro, projects.groups.members.list restituisce un elenco dei membri del gruppo.
Puoi utilizzare un filtro per limitare i membri del gruppo che recuperi. Se il filtro include un selettore project, il valore del selettore deve specificare un progetto le cui metriche sono visibili al progetto di definizione dell'ambito. Se viene specificato un valore non valido, il selettore project viene ignorato.
Ad esempio, supponiamo che tu crei un gruppo che include tutte le risorse il cui nome contiene test. Per elencare solo i membri del gruppo che sono argomenti Pub/Sub, utilizza il seguente filtro:
resource.type = "pubsub_topic"
Elenco dei descrittori delle metriche
Metodo:
projects.metricDescriptors.list
Filtra oggetti: project, metric.type
Utilizza un filtro per limitare i descrittori delle metriche che recuperi.
Ad esempio, per restituire solo i descrittori delle metriche di Compute Engine, utilizza il seguente filtro:
metric.type = starts_with("compute.googleapis.com")
Consulta l'elenco delle metriche per un elenco completo dei tipi di metriche disponibili. Per una panoramica dei nomi delle metriche, consulta Convenzioni di denominazione delle metriche.
Elenco dei descrittori risorsa monitorata
Metodo:
projects.monitoredResourceDescriptors.list
Filtra oggetti: resource.type
Utilizza un filtro per limitare i descrittori risorsa monitorata che recuperi.
Ad esempio, per recuperare solo i descrittori risorsa monitorata di Pub/Sub, utilizza il seguente filtro:
resource.type = starts_with("pubsub")
Consulta l'elenco delle risorse monitorate per un elenco completo dei tipi di risorsa monitorata definiti da Monitoring.
Esempi
Negli esempi di filtro, utilizziamo il seguente descrittore della metrica, il descrittore della risorsa monitorata e l'istanza di macchina virtuale, semplificati per l'illustrazione:
# Metric descriptor:
{ "name": "projects/my-project-id/metricDescriptors/compute.googleapis.com%2Finstance%2Fdisk%2Fread_bytes_count",
"type": "compute.googleapis.com/instance/disk/read_bytes_count",
"labels": [ { "key": "device_name",
"description": "The name of the disk device." } ] }
# Monitored resource descriptor:
{ "name": "monitoredResourceDescriptors/gce_instance",
"type": "gce_instance",
"labels": [
{ "key": "instance_id",
"description": "The instance ID provided by Google Compute Engine." },
{ "key": "zone",
"description": "The Google Cloud Platform zone hosting the instance."
} ] }
# Resource descriptor for a virtual machine instance.
{ "type": "gce_instance",
"instance_id": "1472038649266883453",
"zone": "us-east-1b",
"disks": [ "log_partition" ],
"machine_type": "n1-standard-2",
"tags": { "environment": "bleeding-edge",
"role": "frobulator" },
"project_id": "my-project-id" }
Esempi di recupero delle metriche
Per richiedere l'utilizzo della larghezza di banda di lettura del disco per tutte le istanze e tutti i dispositivi, definisci un filtro come segue. Questo filtro restituisce, per ogni istanza, una serie temporale separata che segnala la larghezza di banda di lettura per ogni dispositivo:
metric.type = "compute.googleapis.com/instance/disk/read_bytes_count"
Per perfezionare la richiesta in modo da eseguire una query sulla larghezza di banda di lettura solo per il dispositivo disco noto come "log_partition" su ogni istanza, definisci il filtro come segue. Questo filtro restituisce, per ogni istanza, al massimo una serie temporale, a seconda che in quell'istanza esista o meno un dispositivo con quel nome:
metric.type = "compute.googleapis.com/instance/disk/read_bytes_count" AND metric.labels.device_name = "log_partition"
Per limitare la richiesta a una singola istanza, specifica l'istanza:
resource.type = "gce_instance" AND resource.labels.instance_id = "1472038649266883453" AND metric.type = "compute.googleapis.com/instance/disk/read_bytes_count" AND metric.labels.device_name = "log_partition"
Filtro con gruppi
I seguenti esempi illustrano l'utilizzo del selettore di gruppi nei filtri per limitare le risorse monitorate a quelle di un gruppo specifico. Per informazioni sui selettori utilizzati per definire l'appartenenza ai gruppi, consulta Selettore di risorse per le definizioni dei gruppi.
{ "name": "projects/my-test-project/groups/024681012",
"display_name": "My Redis Cluster",
"filter": "metadata.user_labels.role=redis" }
In una chiamata al metodo projects.timeSeries.list, il seguente filtro richiede l'utilizzo della larghezza di banda di lettura del disco per tutte le istanze di Compute Engine in un determinato gruppo. Il gruppo deve essere definito nel progetto di definizione dell'ambito di un ambito delle metriche specificato nel parametro name del metodo:
resource.type = "gce_instance" AND group.id = "024681012" AND metric.type = "compute.googleapis.com/instance/disk/read_bytes_count"
Riferimento: sintassi del filtro
Per una panoramica dei filtri con esempi, consulta Utilizzo dei filtri.
Un filtro di monitoraggio è una stringa composta da un massimo di quattro tipi di selettori:
<monitoring_filter> ::= <project_selector> AND
<group_selector> AND
<resource_selector> AND
<metric_selector>
Il filtro corrisponde a un elemento se tutti i selettori inclusi corrispondono all'elemento.
Come descritto nelle sezioni seguenti, alcuni selettori possono avere più confronti uniti da AND o OR. L'ordine dei selettori nel filtro non è importante, ma i confronti per selettori diversi non devono essere mescolati.
A seconda dello scopo del filtro, alcuni selettori potrebbero essere obbligatori, facoltativi o vietati. Ad esempio, il filtro utilizzato per elencare le serie temporali deve contenere un selettore di metriche. Tuttavia, il filtro che definisce le risorse in un gruppo non può contenere un selettore di metriche, perché i gruppi non contengono tipi di metriche o serie temporali.
Confronti
I filtri e i relativi selettori vengono creati a partire dai confronti. Ogni confronto ha il seguente formato:
-
[OBJECT]: seleziona un valore da testare; uno dei seguenti:
project group.id metric.type metric.labels.[KEY] resource.type resource.labels.[KEY] metadata.system_labels.[KEY] metadata.user_labels.[KEYSTRING][KEY] è un nome, ad esempio
zoneoinstance_id.[KEYSTRING] può essere un nome, ma se contiene caratteri speciali, deve essere racchiuso tra virgolette (
"). -
[OPERATOR]: un operatore di confronto, uno dei seguenti:
= # equality (case-sensitive) > < >= <= # numeric ordering != # not equal : # "has" substring match and test for key (case-sensitive) -
[VALUE]: un valore letterale o una chiamata di funzione integrata; uno dei seguenti:
<string> # "a Unicode string". Don't use apostrophes (`'`) to quote strings. <bool> # true or false <number> # 0, -2, 123456, 3.14156 <function> # operators on the right side of '=' or '!=': # starts_with(<string>) # ends_with(<string>) # has_substring(<string> [, ignore_case=false]) # one_of(<string>,...,<string>) for up to 100 strings # monitoring.regex.full_match(<RE2-string>)Tranne quando viene utilizzato nel metodo
timeSeries.list, il filtrohas_substringaccetta un secondo argomento facoltativo, che specifica se la corrispondenza ignora o meno le maiuscole. Il valore predefinito èfalse, quindi la corrispondenza predefinita è sensibile alle maiuscole:- Sensibile alle maiuscole:
display_name=has_substring("Demo") - Sensibile alle maiuscole:
display_name=has_substring("Demo", false) - Senza distinzione tra maiuscole e minuscole:
display_name=has_substring("Demo", true)
Se utilizzato nel metodo
timeSeries.list, è supportato solo il formatohas_substring(<string>).Il filtro
monitoring.regex.full_matchaccetta una stringa di espressione regolare nella sintassi RE2. - Sensibile alle maiuscole:
Puoi utilizzare i seguenti operatori per raggruppare o modificare i confronti. OR ha
la precedenza su AND. Gli operatori devono essere scritti in maiuscolo:
(...) # grouping comparisons AND # conjunction (optional but recommended) OR # disjunction
L'operatore AND può essere omesso tra gli operatori, ma è più chiaro e meno soggetto a errori includerlo.
Il confronto x = one_of("a", "b", "c") equivale a quanto segue:
(x = "a" OR x = "b" OR x = "c")
NOT,
prima di un confronto, ma non con un operatore exists (:) o prima di
un'espressione tra parentesi:
NOT # negates the following comparison
Selettori filtri
Utilizza i selettori per limitare le selezioni dei filtri a determinati elementi.
Nelle sezioni seguenti, le parentesi graffe vengono utilizzate per mostrare la ripetizione. Ad esempio, la notazione <x> {OR <y>} indica che puoi scrivere uno dei seguenti elementi:
<x> <x> OR <y> <x> OR <y> OR <y> <x> OR <y> OR <y> OR <y> ...
Selettore di progetti
Un selettore di progetti limita la selezione dei filtri agli elementi appartenenti a un singolo progetto o a uno qualsiasi di un insieme di progetti. Ogni progetto può essere specificato dal suo ID, dal suo numero o utilizzando un'espressione regolare:
<project_selector> ::= project '=' (<number> | <string> | monitoring.regex.full_match '(' <RE2-string> ')') {OR project '=' (<number> | <string> | monitoring.regex.full_match '(' <RE2-string> ')')}
Se il selettore di progetti ha più di un singolo confronto, racchiudi l'intero selettore tra parentesi per una migliore leggibilità. Ad esempio:
(project=12345 OR project="my-project-id" OR monitoring.regex.full_match("^6789.*") OR monitoring.regex.full_match("some-project-id.*" )) AND resource.type="gce_instance"
Selettore di gruppi
Un selettore di gruppi limita la selezione dei filtri agli elementi appartenenti a un singolo gruppo:
<group_selector> ::= group.id '=' <string>
Ad esempio, il seguente filtro può essere utilizzato per recuperare una serie temporale da ciascuna delle istanze VM di un gruppo:
group.id = 12345 AND resource.type = "gce_instance" AND metric.type = "compute.googleapis.com/instance/disk/read_bytes_count"
Il selettore di gruppi è consentito solo nei filtri passati al metodo projects.timeSeries.list. Inoltre, la selezione del gruppo richiede dati allineati, ovvero la chiamata projects.timeSeries.list deve includere i valori per i campi perSeriesAligner e alignmentPeriod. Questo perché l'appartenenza al gruppo è essa stessa un tipo di serie temporale che deve essere unita ai dati delle metriche e la fornitura di parametri di allineamento ti consente di controllare il modo in cui avviene l'unione.
Per saperne di più sui parametri di allineamento, consulta Aggregazione dei dati.
Selettore delle risorse
Un selettore di risorse limita la selezione dei filtri alle risorse o agli elementi associati alle risorse che hanno un tipo di risorsa o valori di etichetta specifici:
<resource_selector> ::= <resource_type_expression>
| <resource_label_expression>
| <resource_type_expression> AND <resource_label_expression>
<resource_type_expression> ::= resource.type '=' <string>
| resource.type ':' <string>
| resource.type '=' starts_with '(' <string> ')'
| resource.type '=' ends_with '(' <string> ')'
<r_label_comparison> ::= resource.labels.[KEY] '=' (<string> | <bool>)
| resource.labels.[KEY] ':' <string>
| resource.labels.[KEY] '=' (starts_with | ends_with) '(' <string> ')'
| resource.labels.[KEY] ('=' | '>' | '<' | '>=' | '<=') <number>
<resource_label_expression> ::= <r_label_comparison> {AND <r_label_comparison>}
| <r_label_comparison> {OR <r_label_comparison>}
Se utilizzi più di un <r_label_comparison> nel selettore, racchiudili tutti tra parentesi per una migliore leggibilità.
Ad esempio, il seguente filtro potrebbe essere utilizzato per definire un gruppo che include tutte le istanze VM di Compute Engine negli Stati Uniti e in Europa:
resource.type = "gce_instance" AND
(resource.labels.zone = starts_with("us-") OR resource.labels.zone = starts_with("europe-"))
Selettore di risorse per le definizioni dei gruppi
I selettori di risorse utilizzati per definire l'appartenenza ai gruppi utilizzano estensioni della sintassi <resource_selector>:
Puoi includere filtri basati sul valore delle etichette di sistema dei metadati,
metadata.system_labels.[KEY], e delle etichette utente dei metadati,metadata.user_labels.[KEYSTRING]. Ti consigliamo di racchiudere tra virgolette le chiavi permetadata.user_labelsperché possono contenere caratteri speciali come i trattini.Quando un selettore contiene un filtro dei metadati e un filtro delle risorse, devi combinarli con
AND; non puoi utilizzareOR. Ad esempio, un grafico con il seguente selettore mostra l'utilizzo della CPU per tutte le istanze VM con un tipo di macchinae2-mediumoe2-micro:metric.type="compute.googleapis.com/instance/cpu/utilization" resource.type="gce_instance" AND (metadata.system_labels."machine_type"="e2-medium" OR metadata.system_labels."machine_type"="e2-micro")
Puoi utilizzare l'operatore di disuguaglianza (
!=) per confrontare tipi di risorse, etichette delle risorse e metadati. L'operatore può essere utilizzato per confrontare stringhe, numeri, valori booleani o funzioni di sottostringa. Ad esempio,resource.type!=starts_with("gce")è true se il tipo di risorsa non inizia con"gce".Puoi utilizzare un singolo operatore
NOTprima di un confronto delle risorse. Ad esempio,NOT resource.labels.zone="europe"è true se la zona della risorsa non include"europe". Non puoi utilizzareNOTprima di un operatore exists (:) o di un'espressione tra parentesi.Puoi utilizzare l'operatore "exists" (
:) per verificare l'esistenza delle chiavi. Ad esempio, il confrontoresource.labels:zoneè true se la chiave di etichettazoneè presente nella risorsa.
Ad esempio, una delle chiavi dei metadati delle risorse della piattaforma per le istanze VM è
spot_instance. Il seguente selettore di filtri sceglie le istanze che sono istanze spot:
resource.type = "gce_instance" AND metadata.system_labels.spot_instance = true
Selettore delle metriche
Un selettore di metriche specifica determinate metriche o descrittori delle metriche limitando il tipo di metrica e le etichette delle metriche. Se utilizzato con il metodo projects.timeSeries.list, il selettore delle metriche deve specificare un singolo tipo di metrica:
<metric_selector> ::= <metric_name_expression> [AND <metric_label_expression>]
<metric_name_expression> ::= metric.type '=' <string>
| metric.type ':' <string>
| metric.type '=' starts_with '(' <string> ')'
| metric.type '=' ends_with '(' <string> ')'
<metric_label_comparison> ::= metric.labels.[KEY] '=' <string> | <bool>
| metric.labels.[KEY] ':' <string>
| metric.labels.[KEY] '=' starts_with '(' <string> ')'
| metric.labels.[KEY] '=' ends_with '(' <string> ')'
| metric.labels.[KEY] ('=' | '>' | '<' | '>=' | '<=') <number>
<metric_label_expression> ::= <metric_label_comparison> {[AND] <metric_label_comparison>}
| <metric_label_comparison> {OR <metric_label_comparison>}
Ad esempio, il seguente filtro potrebbe essere utilizzato per recuperare una serie temporale per un'istanza di database specifica:
metric.type = "cloudsql.googleapis.com/database/state" AND (metric.labels.resource_type = "instance" AND metric.labels.resource_id = "abc-123456")