

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Componenti e sintassi delle query in Metrics Insights CloudWatch
<a name="cloudwatch-metrics-insights-querylanguage"></a>

CloudWatch La sintassi di Metrics Insights è la seguente.

```
SELECT FUNCTION(metricName)
FROM namespace | SCHEMA(...)
[ WHERE labelKey OPERATOR labelValue [AND ... ] ]
[ GROUP BY labelKey [ , ... ] ]
[ ORDER BY FUNCTION() [ DESC | ASC ] ]
[ LIMIT number ]
```

Le possibili clausole in una query Metrics Insights sono le seguenti. Nessuna delle parole chiave è sensibile alle maiuscole e minuscole, ma gli identificatori come i nomi dei parametri, gli spazi dei nomi e le dimensioni sono sensibili alle maiuscole e minuscole.

**SELECT**  
Obbligatorio. Specifica la funzione da utilizzare per aggregare le osservazioni in ogni bucket temporale (determinato dal periodo fornito). Specifica inoltre il nome del parametro su cui effettuare la query.  
I valori validi per **FUNCTION (FUNZIONE)** sono `AVG`, `COUNT`, `MAX`, `MIN`, e `SUM`.  
+ `AVG` calcola la media delle osservazioni corrispondenti alla query.
+ `COUNT` restituisce il conteggio delle osservazioni corrispondenti alla query.
+ `MAX` restituisce il valore massimo delle osservazioni corrispondenti alla query.
+ `MIN` restituisce il valore minimo delle osservazioni corrispondenti alla query.
+ `SUM` calcola la somma delle osservazioni corrispondenti alla query.

**FROM**  
Obbligatorio. Specifica la fonte del parametro. È possibile specificare lo spazio dei nomi del parametro che contiene il parametro che deve essere sottoposto a query o una funzione di tabella **SCHEMA**. Esempi di spazio dei nomi di parametro includono `"AWS/EC2"`, `"AWS/Lambda"` e gli spazi dei nomi dei parametri che hai creato per i parametri personalizzati.  
Gli spazi dei nomi del parametro che includono **/** o qualsiasi altro carattere che non sia una lettera, un numero o un carattere di sottolineatura devono essere racchiusi tra virgolette doppie. Per ulteriori informazioni, consulta [Cosa ha bisogno di virgolette o caratteri di escape?](#cloudwatch-metrics-insights-syntaxdetails).  
**SCHEMA**  
Una funzione di tabella opzionale che può essere utilizzata all'interno di una clausola **FROM (DA)**. Utilizza **SCHEMA** per esaminare i risultati della query solo sui parametri che corrispondono esattamente a un elenco di dimensioni o ai parametri che non hanno dimensioni.   
Se si utilizza una clausola **SCHEMA**, deve contenere almeno un argomento e questo primo argomento deve essere lo spazio dei nomi dei parametri da sottoporre a query. Se si specifica **SCHEMA** solo con questo argomento dello spazio dei nomi, i risultati vengono assegnati solo a parametri che non hanno dimensioni.  
Se si specifica **SCHEMA** con argomenti aggiuntivi, gli argomenti aggiuntivi dopo l'argomento dello spazio dei nomi devono essere chiavi di *etichetta*. Le chiavi di etichetta devono essere nomi di dimensione. Se si specificano una o più di queste chiavi di etichetta, i risultati vengono assegnati solo ai parametri che hanno quel set esatto di dimensioni. L'ordine di queste chiavi di etichetta non è importante.  
Ad esempio:  
+ **SELECT AVG(CPUUtilization) FROM "AWS/EC2"** (SELEZIONA AVG (Utilizzo della CPU) da “AWS/EC2")) corrisponde a tutti i parametri `CPUUtilization` nello spazio dei nomi `AWS/EC2`, indipendentemente dalle loro dimensioni, e restituisce una singola serie temporale aggregata. 
+ **SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2")** (SELEZIONA AVG (Utilizzo della CPU) DALLO SCHEMA ("AWS/EC2"))corrisponde solo ai parametri `CPUUtilization` nello spazio dei nomi `AWS/EC2` che non presentano alcuna dimensione definita.
+ **SELECT AVG (CPUUtilization) FROM SCHEMA («AWS/EC2", InstanceId)** corrisponde solo alle `CPUUtilization` metriche riportate con esattamente una dimensione,. CloudWatch `InstanceId`
+ **SELECT SUM (RequestCount) FROM SCHEMA («AWS/ApplicationElb» LoadBalancer, AvailabilityZone)** corrisponde solo alle `RequestCount` metriche riportate CloudWatch da from `AWS/ApplicationELB` con esattamente due dimensioni e. `LoadBalancer` `AvailabilityZone`

**WHERE**  
Opzionale. Filtra i risultati solo con i parametri che corrispondono all'espressione specificata utilizzando valori di etichetta specifici per una o più chiavi di etichetta. **Ad esempio, **WHERE InstanceType = 'c3.4xlarge'** filtra i risultati solo in base ai tipi di istanza e WHERE\$1 `c3.4xlarge` InstanceType = 'c3.4xlarge'** filtra i risultati per tutti i tipi di istanze tranne. `c3.4xlarge`  
Quando esegui una query in un account di monitoraggio, puoi utilizzare `WHERE AWS.AccountId` per limitare i risultati solo all'account specificato. Ad esempio, `WHERE AWS.AccountId=444455556666` interroga i parametri solo dall'account `444455556666`. Per limitare la tua query ai soli parametri dell'account di monitoraggio stesso, usa `WHERE AWS.AccountId=CURRENT_ACCOUNT_ID()`.  
I valori delle etichette devono sempre essere racchiusi con virgolette singole.  
**Utilizzo dei tag nelle clausole WHERE**  
È possibile filtrare i risultati in base ai tag AWS delle risorse utilizzando la sintassi. `tag.keyName` I filtri di tag seguono le stesse regole operative dei filtri di dimensione. Esempio:  
+ WHERE `tag.env = 'prod'` filtra in base alle metriche delle risorse contrassegnate con *env=prod*
+ WHERE `tag.department != 'test'` esclude le metriche dalle risorse contrassegnate con *department=test*
I filtri di tag possono essere combinati con i filtri di dimensione:  
`WHERE tag.env = 'prod' AND InstanceType = 'm5.large'`  
**Operatori supportati**  
La clausola **WHERE** (DOVE) supporta i seguenti operatori:  
+ **=** Il valore dell'etichetta deve corrispondere alla stringa specificata.
+ **\$1 =** Il valore dell'etichetta non deve corrispondere alla stringa specificata.
+ **E** Entrambe le condizioni specificate devono essere vere per corrispondere. È possibile utilizzare più parole chiave **AND** (E) per specificare due o più condizioni.

**GROUP BY**  
Opzionale. Raggruppa i risultati della query in più serie temporali, ognuna corrispondente a un valore diverso per la chiave o le chiavi dell'etichetta specificate. Ad esempio, l'utilizzo di `GROUP BY InstanceId` restituisce una serie temporale diversa per ogni valore di `InstanceId`. L'utilizzo di `GROUP BY ServiceName, Operation` crea una serie temporale diversa per ogni possibile combinazione dei valori di `ServiceName` e `Operation`.  
Con una clausola **GROUP BY** (RAGGRUPPA PER), per impostazione predefinita, i risultati sono ordinati in ordine alfabetico crescente, utilizzando la sequenza di etichette specificata nella clausola **GROUP BY** (RAGGRUPPA PER). Per modificare l'ordine dei risultati, aggiungere una clausola **ODER BY** (ORDINA PER) alla tua query.   
Quando esegui una query in un account di monitoraggio, puoi utilizzare `GROUP BY AWS.AccountId` per raggruppare i risultati in base agli account da cui provengono.  
**Utilizzo dei tag nelle clausole GROUP BY**  
È possibile raggruppare i risultati in base ai valori dei tag di AWS risorsa utilizzando la sintassi`tag.keyName`. Esempio:  
+ *GROUP BY tag.environment* crea serie temporali separate per ogni valore del tag di ambiente
+ *RAGGRUPPA PER tag.team, InstanceType* raggruppa sia per tag che per valori di dimensione
+ *RAGGRUPPA PER tag.team, AWS. AccountId*raggruppa sia per tag che per account sorgente collegato IDs
Se alcune delle metriche corrispondenti non includono una chiave di etichetta specifica specificata nella clausola **GROUP BY** (RAGGRUPPA PER), viene restituito un gruppo nullo denominato `Other`. Ad esempio, se si specifica `GROUP BY ServiceName, Operation` e alcuni dei parametri restituiti non includono`ServiceName` come dimensione, quindi tali parametri vengono visualizzati come aventi `Other` come valore per `ServiceName`.

**ORDER BY**  
Opzionale. Specifica l'ordine da utilizzare per le serie temporali restituite, se la query restituisce più di una serie temporale. L'ordine è basato sui valori trovati dalla **FUNCTION** (FUNZIONE) specificata nella clausola **ORDER BY** (ORDINA PER). La **FUNCTION** (FUNZIONE) viene utilizzata per calcolare un singolo valore scalare da ogni serie temporale restituita e tale valore viene utilizzato per determinare l'ordine.  
È inoltre necessario specificare se utilizzare l'ordine crescente **ASC** o decrescente **DESC**. Se ometti questo parametro, il valore di default è crescente **ASC**.  
Ad esempio, aggiungendo una clausola `ORDER BY MAX() DESC` ordina i risultati in base al punto dati massimo osservato nell'intervallo di tempo, in ordine decrescente: il che significa che la serie temporale che ha il punto dati massimo viene restituita per prima.  
Le funzioni valide da utilizzare all'interno di una clausola **ORDER BY** (ORDINA PER) sono `AVG()`, `COUNT()`, `MAX()`, `MIN()` e `SUM()`.  
Se utilizzi una clausola **ORDER BY** (ORDINA PER) con una clausola **LIMIT** (LIMITE), la query risultante è una query "Top N". **ORDER BY** (ORDINA PER) è utile anche per le query che potrebbero restituire un numero elevato di metriche, poiché ogni query può restituire non più di 500 serie temporali. Se una query corrisponde a più di 500 serie temporali e si utilizza una clausola **ORDER BY** (ORDINA PER), le serie temporali vengono ordinate e quindi le 500 serie temporali che vengono prima nell'ordinamento sono quelle che vengono restituite.

**LIMIT**  
Opzionale. Limita il numero di serie temporali restituite dalla query al valore specificato. Il valore massimo che è possibile specificare è 500 e una query che non specifica un **LIMIT** (LIMITE) può anche restituire non più di 500 serie temporali.  
L'utilizzo di una clausola **LIMIT** (LIMITE) con una clausola **ORDER BY** (ORDINA PER) fornisce una query "Top N".

## Cosa ha bisogno di virgolette o caratteri di escape?
<a name="cloudwatch-metrics-insights-syntaxdetails"></a>

In una query, i valori delle etichette devono sempre essere racchiusi tra virgolette singole. Ad esempio, **SELECT MAX (CPUUtilization) FROM «AWS/EC2"** WHERE = ''. AutoScalingGroupName my-production-fleet 

Gli spazi dei nomi dei parametri, i nomi dei paramentri e le chiavi di etichetta contenenti caratteri diversi da lettere, numeri e trattino di sottolineatura (\$1) devono essere racchiusi tra virgolette doppie. Ad esempio: **SELECT MAX ("My.Metric")**.

Se uno di questi contiene una doppia virgoletta o una virgoletta singola (come `Bytes"Input"`), è necessario far precedere ogni virgoletta da una barra rovesciata, come in **SELECT AVG("Bytes\$1"Input\$1"")**. 

Se uno spazio dei nomi del parametro, un nome del parametro o una chiave etichetta contiene una parola che è una parola chiave riservata in Metrics Insights, queste devono anche essere racchiuse tra virgolette doppie. Ad esempio, se si dispone di un parametro denominato `LIMIT`, si utilizza `SELECT AVG("LIMIT")`. È inoltre valido racchiudere qualsiasi spazio dei nomi, nome del parametro o etichetta tra virgolette doppie anche se non include una parola chiave riservata.

Per un elenco completo delle parole chiave riservate, consulta [Parole chiave riservate](cloudwatch-metrics-insights-reserved-keywords.md).

## Creazione dettagliata di una query approfondita
<a name="cloudwatch-metrics-insights-syntaxexample"></a>

Questa sezione illustra la creazione di un esempio completo che utilizza tutte le possibili clausole, in maniera dettagliata.

Puoi iniziare con la seguente query, che aggrega tutte le metriche `RequestCount` di Application Load Balancer raccolte con entrambe le dimensioni `LoadBalancer` e `AvailabilityZone`.

```
SELECT SUM(RequestCount) 
FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
```

Per vedere le metriche solo da uno specifico bilanciatore del carico, puoi aggiungere una clausola **WHERE** per limitare le metriche restituite alle sole metriche in cui il valore della dimensione `LoadBalancer` è `app/load-balancer-1`.

```
SELECT SUM(RequestCount) 
FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
WHERE LoadBalancer = 'app/load-balancer-1'
```

La query precedente aggrega i parametri `RequestCount` provenienti da tutte le zone di disponibilità per questo load balancer in una serie temporale. Se desideri vedere diverse serie temporali per ciascuna zona di disponibilità, puoi aggiungere una clausola **GROUP BY**.

```
SELECT SUM(RequestCount) 
FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
WHERE LoadBalancer = 'app/load-balancer-1'
GROUP BY AvailabilityZone
```

Successivamente, puoi ordinare questi risultati per vedere prima i valori più alti. La seguente clausola **ORDER BY** (ORDINA PER) ordina le serie temporali in ordine decrescente, in base al valore massimo riportato da ogni serie temporale durante l'intervallo di tempo della query:

```
SELECT SUM(RequestCount) 
FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
WHERE LoadBalancer = 'app/load-balancer-1'
GROUP BY AvailabilityZone
ORDER BY MAX() DESC
```

Puoi inoltre utilizzare i tag per filtrare ulteriormente i risultati. Ad esempio, se desideri visualizzare i risultati solo per i bilanciatori del carico etichettati con un ambiente specifico, puoi aggiungere il filtro dei tag alla clausola WHERE:

```
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' AND tag.Environment = 'prod' GROUP BY AvailabilityZone ORDER BY MAX() DESC
```

Puoi anche raggruppare i risultati in base ai valori dei tag anziché alle dimensioni (o in aggiunta alle stesse). Ad esempio, raggruppando in base al tag dell'applicazione:

```
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE tag.Environment = 'prod' GROUP BY tag.Application ORDER BY MAX() DESC
```

Infine, se siamo principalmente interessati a un tipo di query "Top N", possiamo utilizzare una clausola **LIMIT** (LIMITE). Questo esempio finale limita i risultati solo alle serie temporali con i cinque valori `MAX` più alti.

```
SELECT SUM(RequestCount) 
FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
WHERE LoadBalancer = 'app/load-balancer-1'
GROUP BY AvailabilityZone
ORDER BY MAX() DESC
LIMIT 5
```

## Esempi di query tra account
<a name="cloudwatch-metrics-insights-crossaccount"></a>

Questi esempi sono validi se eseguiti in un account configurato come account di monitoraggio nell'osservabilità tra account. CloudWatch 

Il seguente esempio cerca tutte le istanze Amazon EC2 nell'account di origine 123456789012 e restituisce la media.

```
SELECT AVG(CpuUtilization) 
FROM "AWS/EC2" 
WHERE AWS.AccountId ='123456789012'
```

L'esempio seguente interroga il parametro `CPUUtilization` in `AWS/EC2` in tutti gli account di origine collegati e raggruppa i risultati per ID account e tipo di istanza.

```
SELECT AVG(CpuUtilization) 
FROM "AWS/EC2" 
GROUP BY AWS.AccountId, InstanceType
```

L'esempio seguente interroga `CPUUtilization` nell'account di monitoraggio stesso.

```
SELECT AVG(CpuUtilization) 
FROM "AWS/EC2" 
WHERE AWS.AccountId = CURRENT_ACCOUNT_ID()
```