

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# stats
<a name="CWL_QuerySyntax-Stats"></a>

 Utilisez `stats` pour créer des visualisations les données de vos journaux, telles que des diagrammes à barres, des graphiques linéaires et des diagrammes à aires empilées. Cela vous permet d'identifier plus efficacement les modèles dans vos données de journal. CloudWatch Logs Insights génère des visualisations pour les requêtes qui utilisent la `stats` fonction et une ou plusieurs fonctions d'agrégation. 

Par exemple, la requête suivante dans un groupe de journaux Route 53 renvoie des visualisations présentant la distribution des enregistrements Route 53 par heure, par type de requête.

```
stats count(*) by queryType, bin(1h)
```

Toutes ces requêtes peuvent produire des graphiques à barres. En outre, si votre requête utilise la fonction `bin()` pour regrouper les données en fonction d'un seul champ au fil du temps, vous pouvez également voir des graphiques linéaires et des graphiques en aires empilées.

les unités de temps et les abréviations suivantes sont prises en charge par la fonction `bin`. Pour toutes les unités et abréviations qui incluent plus d'un caractère, l'ajout de s au pluriel est pris en charge. Donc, les deux `hr` et `hrs` travaillent pour spécifier les heures.
+ `millisecond` `ms` `msec`
+ `second` `s` `sec`
+ `minute` `m` `min`
+ `hour` `h` `hr`
+ `day` `d` 
+ `week` `w` 
+ `month` `mo` `mon`
+ `quarter` `q` `qtr`
+ `year` `y` `yr`

**Topics**
+ [Visualisation des données de séries temporelles](#CWL_Insights-Visualizing-TimeSeries)
+ [Visualisation des données de journal regroupées par champs](#CWL_Insights-Visualizing-ByFields)
+ [Utiliser plusieurs commandes stats dans une seule requête](#CWL_QuerySyntax-stats-multi)
+ [Fonctions à utiliser avec stats](#CWL_QuerySyntax-stats-functions)

## Visualisation des données de séries temporelles
<a name="CWL_Insights-Visualizing-TimeSeries"></a>

Les visualisations chronologiques fonctionnent pour les requêtes présentant les caractéristiques suivantes :
+ La requête contient une ou plusieurs fonctions d'agrégation. Pour plus d'informations, consultez [Aggregation Functions in the Stats Command](#CWL_Insights_Aggregation_Functions).
+ La requête utilise la fonction `bin()` pour regrouper les données en un champ. 

Ces requêtes peuvent produire des graphiques linéaires, des graphiques en aires empilées et des graphiques à barres et des graphiques circulaires. 

**Exemples**

Pour un didacticiel complet, consultez [Didacticiel : Exécuter une requête qui produit des séries temporelles](CWL_AnalyzeLogData_VisualizationQuery.md). 

Voici d'autres exemples de requêtes qui fonctionnent pour la visualisation chronologiques.

La requête suivante génère une visualisation des valeurs moyennes du champ `myfield1`, avec un point de données créé toutes les cinq minutes. Chaque point de données correspond à l'agrégation des moyennes des valeurs `myfield1` des journaux des cinq minutes précédentes.

```
stats avg(myfield1) by bin(5m)
```

La requête suivante génère une visualisation des trois valeurs basées sur différents champs, avec un point de données créé toutes les cinq minutes. La visualisation est générée, car la requête contient des fonctions d'agrégation et utilise `bin()` comme champ de regroupement.

```
stats avg(myfield1), min(myfield2), max(myfield3) by bin(5m)
```

**Restrictions pour les graphiques linéaires et les graphiques en aires empilées**

Les requêtes qui regroupent les informations d'entrée de journal sans utiliser la fonction `bin()` peuvent générer des graphiques à barres. Toutefois, les requêtes ne peuvent pas générer de graphique linéaire ou de graphique en aires empilées. Pour plus d'informations sur ces types de requête, consultez [Visualisation des données de journal regroupées par champs](#CWL_Insights-Visualizing-ByFields).

## Visualisation des données de journal regroupées par champs
<a name="CWL_Insights-Visualizing-ByFields"></a>

Vous pouvez produire des graphiques à barres pour les requêtes qui utilisent la fonction `stats` et une ou plusieurs fonctions d'agrégation. Pour plus d'informations, consultez [Aggregation Functions in the Stats Command](#CWL_Insights_Aggregation_Functions).

Pour afficher la visualisation, exécutez votre requête. Choisissez ensuite l'onglet **Visualization (Visualisation)**, sélectionnez la flèche en regard de **Line (Ligne)**, puis choisissez **Bar (Barre)**. Les visualisations sont limitées à 100 barres dans le graphique à barres.

**Exemples**

Pour un didacticiel complet, consultez [Didacticiel : Exécuter une requête qui génère une visualisation groupée par champs de journal](CWL_AnalyzeLogData_VisualizationFieldQuery.md). Les paragraphes suivants incluent d'autres exemples de requête pour la visualisation par champs.

La requête de journal de flux VPC suivante recherche le nombre moyen d'octets transférés par session pour chaque adresse de destination.

```
stats avg(bytes) by dstAddr
```

Vous pouvez également produire un graphique qui comprend plus d'une barre pour chaque valeur résultante. Par exemple, la requête de journal de flux VPC suivante recherche le nombre moyen et le nombre maximal d'octets transférés par session pour chaque adresse de destination.

```
stats avg(bytes), max(bytes) by dstAddr
```

La requête suivante recherche le nombre de journaux de requêtes Amazon Route 53 pour chaque type de requête.

```
stats count(*) by queryType
```

## Utiliser plusieurs commandes stats dans une seule requête
<a name="CWL_QuerySyntax-stats-multi"></a>

Vous pouvez utiliser jusqu'à deux commandes `stats` dans une seule requête. Cela vous permet d'effectuer une agrégation supplémentaire sur la sortie de la première agrégation.

**Exemple : requête avec deux commandes `stats`**

Par exemple, la requête suivante trouve d'abord le volume de trafic total par tranches de 5 minutes, puis calcule le volume de trafic le plus élevé, le plus bas et le volume de trafic moyen parmi ces tranches de 5 minutes.

```
FIELDS strlen(@message) AS message_length
| STATS sum(message_length)/1024/1024 as logs_mb BY bin(5m)
| STATS max(logs_mb) AS peak_ingest_mb, 
        min(logs_mb) AS min_ingest_mb, 
        avg(logs_mb) AS avg_ingest_mb
```

**Exemple : combiner plusieurs commandes stats avec d'autres fonctions telles que `filter`, `fields`, `bin`**

Vous pouvez combiner deux commandes `stats` avec d'autres commandes, telles que `filter` et `fields` dans une seule requête. Par exemple, la requête suivante trouve le nombre d'adresses IP distinctes dans les sessions et le nombre de sessions par plateforme client, filtre ces adresses IP et enfin trouve la moyenne des demandes de session par plateforme client.

```
STATS count_distinct(client_ip) AS session_ips, 
      count(*) AS requests BY session_id, client_platform
| FILTER session_ips > 1
| STATS count(*) AS multiple_ip_sessions, 
        sum(requests) / count(*) AS avg_session_requests BY client_platform
```

Vous pouvez utiliser les fonctions `bin` et `dateceil` dans des requêtes comportant plusieurs commandes `stats`. Par exemple, la requête suivante combine d'abord les messages en blocs de 5 minutes, puis agrège ces blocs de 5 minutes en blocs de 10 minutes et calcule les volumes de trafic les plus élevés, les plus bas et la moyenne dans chaque bloc de 10 minutes.

```
FIELDS strlen(@message) AS message_length
| STATS sum(message_length) / 1024 / 1024 AS logs_mb BY BIN(5m) as @t
| STATS max(logs_mb) AS peak_ingest_mb, 
        min(logs_mb) AS min_ingest_mb,
        avg(logs_mb) AS avg_ingest_mb BY dateceil(@t, 10m)
```

**Remarques et limitations**

Une requête peut avoir un maximum de deux commandes `stats`. Ce quota ne peut pas être modifié. 

Si vous utilisez une commande `sort` ou `limit`, elle doit apparaître après la deuxième commande `stats`. Si elle est antérieure à la deuxième commande `stats`, la requête n'est pas valide.

Lorsqu'une requête comporte deux commandes `stats`, les résultats partiels de la requête ne commencent pas à s'afficher tant que la première agrégation `stats` n'est pas terminée.

Dans la deuxième commande `stats` d'une seule requête, vous ne pouvez faire référence qu'aux champs définis dans la première commande `stats`. Par exemple, la requête suivante n'est pas valide, car le champ `@message` ne sera plus disponible après la première agrégation `stats`.

```
FIELDS @message
| STATS SUM(Fault) by Operation
# You can only reference `SUM(Fault)` or Operation at this point
| STATS MAX(strlen(@message)) AS MaxMessageSize # Invalid reference to @message
```

Tous les champs auxquels vous faites référence après la première commande `stats` doivent être définis dans cette première commande `stats`.

```
STATS sum(x) as sum_x by y, z
| STATS max(sum_x) as max_x by z
# You can only reference `max(sum_x)`, max_x or z at this point
```

**Important**  
La fonction `bin` utilise toujours implicitement le champ `@timestamp`. Cela signifie que vous ne pouvez pas utiliser `bin` dans la deuxième commande `stats` sans utiliser la première commande `stats` pour propager le champ `timestamp`. Par exemple, la requête suivante n'est pas valide.  

```
FIELDS strlen(@message) AS message_length
 | STATS sum(message_length) AS ingested_bytes BY @logStream
 | STATS avg(ingested_bytes) BY bin(5m) # Invalid reference to @timestamp field
```
Définissez plutôt le champ `@timestamp` dans la première commande `stats`, puis utilisez-le avec `dateceil` dans la deuxième commande `stats`, comme dans l'exemple suivant.  

```
FIELDS strlen(@message) AS message_length
 | STATS sum(message_length) AS ingested_bytes, max(@timestamp) as @t BY @logStream
 | STATS avg(ingested_bytes) BY dateceil(@t, 5m)
```

## Fonctions à utiliser avec stats
<a name="CWL_QuerySyntax-stats-functions"></a><a name="CWL_Insights_Aggregation_Functions"></a>

CloudWatch Logs Insights prend en charge à la fois les fonctions d'agrégation des statistiques et les fonctions de non-agrégation des statistiques.

 Utilisez des fonctions statistiques d'agrégation dans la commande `stats` et en tant qu'arguments pour d'autres fonctions. 


| Fonction | Type de résultat | Description | 
| --- | --- | --- | 
|  `avg(fieldName: NumericLogField)` |  nombre |  Moyenne des valeurs dans le champ spécifié.  | 
|  `count()` `count(fieldName: LogField)` |  number |  Compte les événements du journal. `count()`(ou `count(*)`) compte tous les événements renvoyés par la requête, tandis que `count(fieldName)` compte tous les enregistrements qui incluent le nom du champ spécifié.  | 
|  `count_distinct(fieldName: LogField)` |  number |  Renvoie le nombre de valeurs uniques pour le champ. Si le champ a une cardinalité très élevée (contient de nombreuses valeurs uniques), la valeur renvoyée par `count_distinct` n'est qu'une approximation.  | 
|  `max(fieldName: LogField)` |  LogFieldValue |  Valeur maximale des valeurs pour ce journal dans le champ interrogé.  | 
|  `min(fieldName: LogField)` |  LogFieldValue |  Valeur minimale des valeurs pour ce journal dans le champ interrogé.  | 
|  `pct(fieldName: LogFieldValue, percent: number)` |  LogFieldValue |  Un centile indique la position relative d'une valeur dans un ensemble de données. Par exemple, `pct(@duration, 95)` renvoie la valeur `@duration` à laquelle 95 % des valeurs de `@duration` sont inférieures à cette valeur et 5 % des valeurs lui sont supérieures.  | 
|  `stddev(fieldName: NumericLogField)` |  number |  Déviation standard des valeurs dans le champ spécifié.  | 
|  `sum(fieldName: NumericLogField)` |  number |  Somme des valeurs dans le champ spécifié.  | 

 **Fonctions statiques de non-agrégation** <a name="CWL_Insights_Non-Aggregation_Functions"></a>

 Utilisez des fonctions de non-agrégation dans la commande `stats` et en tant qu'arguments d'autres fonctions. 


| Fonction | Type de résultat | Description | 
| --- | --- | --- | 
|  `earliest(fieldName: LogField)` |  LogField |  Renvoie la valeur de `fieldName` à partir de l'événement de journal qui a l'horodatage le plus récent dans les journaux interrogés.  | 
|  `latest(fieldName: LogField)` |  LogField |  Renvoie la valeur de `fieldName` à partir de l'événement de journal qui a l'horodatage le plus ancien dans les journaux interrogés.  | 
|  `sortsFirst(fieldName: LogField)` |  LogField |  Renvoie la valeur de `fieldName` triée la première dans les journaux interrogés.  | 
|  `sortsLast(fieldName: LogField)` |  LogField |  Renvoie la valeur de `fieldName` triée la dernière dans les journaux interrogés.  | 