

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.

# Création de modèles d'étiquettes et d'annotations
<a name="v9-alerting-explore-labels-templating"></a>

****  
**Cette rubrique de documentation est conçue pour les espaces de travail Grafana compatibles avec la version 9.x de Grafana.**  
Pour les espaces de travail Grafana compatibles avec la version 10.x de Grafana, voir. [Travailler dans la version 10 de Grafana](using-grafana-v10.md)  
Pour les espaces de travail Grafana compatibles avec la version 8.x de Grafana, voir. [Travailler dans la version 8 de Grafana](using-grafana-v8.md)

Dans Grafana, vous modélisez des étiquettes et des annotations comme vous le feriez dans Prometheus. Si vous avez déjà utilisé Prometheus, vous devez connaître les variables `$value` et, qui contiennent `$labels` les libellés et la valeur de l'alerte. Vous pouvez utiliser les mêmes variables dans Grafana, même si l'alerte n'utilise pas de source de données Prometheus. Si vous n'avez jamais utilisé Prometheus auparavant, ne vous inquiétez pas, car chacune de ces variables et la façon de les modéliser seront expliquées dans le reste de cette page.

## Le langage de modélisation de Go
<a name="v9-alerting-explore-labels-templating-go"></a>

[Les modèles d'étiquettes et d'annotations sont écrits dans le langage de création de modèles de Go, texte/modèle.](https://pkg.go.dev/text/template)

**Étiquettes d'ouverture et de fermeture**

Dans le texte/le modèle, les modèles commencent par `{{` et se terminent par`}}`, qu'ils impriment une variable ou exécutent des structures de contrôle telles que des instructions if. Ceci est différent des autres langages de modélisation tels que Jinja où l'impression d'une variable utilise `{{` et et où les structures de contrôle utilisent `}}` `{%` et. `%}`

**Print**

Pour imprimer la valeur d'un élément, utilisez `{{` et`}}`. Vous pouvez imprimer le résultat d'une fonction ou la valeur d'une variable. Par exemple, pour imprimer la `$labels` variable, vous devez écrire ce qui suit :

```
{{ $labels }}
```

**Répéter sur les étiquettes**

Pour effectuer une itération sur chaque étiquette, `$labels` vous pouvez utiliser un`range`. Ici `$k` fait référence au nom et `$v` à la valeur de l'étiquette actuelle. Par exemple, si votre requête renvoyait une `instance=test` étiquette, `$k` elle `$v` serait `instance` et serait`test`.

```
{{ range $k, $v := $labels }}
{{ $k }}={{ $v }}
{{ end }}
```

## Les labels, les valeurs et les variables de valeurs
<a name="v9-alerting-explore-labels-templating-variables"></a>

**La variable labels**

La `$labels` variable contient les libellés de la requête. Par exemple, une requête qui vérifie si une instance est en panne peut renvoyer une étiquette d'instance avec le nom de l'instance indisponible. Supposons, par exemple, que vous disposiez d'une règle d'alerte qui se déclenche lorsque l'une de vos instances est en panne depuis plus de 5 minutes. Vous souhaitez ajouter un résumé à l'alerte indiquant quelle instance est hors service. Avec la `$labels` variable, vous pouvez créer un résumé qui imprime l'étiquette de l'instance dans le résumé :

```
Instance {{ $labels.instance }} has been down for more than 5 minutes
```

**Étiquettes à points**

Si l'étiquette que vous souhaitez imprimer contient un point (point ou point) dans son nom, l'utilisation du même point dans le modèle ne fonctionnera pas :

```
Instance {{ $labels.instance.name }} has been down for more than 5 minutes
```

Cela est dû au fait que le modèle tente d'utiliser un champ inexistant appelé `name` in`$labels.instance`. Vous devriez plutôt utiliser la `index` fonction qui imprime l'étiquette `instance.name` dans la `$labels` variable :

```
Instance {{ index $labels "instance.name" }} has been down for more than 5 minutes
```

**La variable de valeur**

La `$value` variable fonctionne différemment de Prometheus. Dans `$value` Prometheus, un nombre à virgule flottante contient la valeur de l'expression, mais dans Grafana, il s'agit d'une chaîne contenant les libellés et les valeurs de toutes les expressions Threshold, Reduce et Math, ainsi que les conditions classiques pour cette règle d'alerte. Il ne contient pas les résultats des requêtes, car celles-ci peuvent renvoyer entre 10 et 10 000 lignes ou métriques.

Si vous deviez utiliser la `$value` variable dans le résumé d'une alerte :

```
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $value }})
```

Le résumé peut ressembler à ce qui suit :

```
api has an over 5% of responses with 5xx errors: [ var='B' labels={service=api} value=6.789 ]
```

Ici, il `var='B'` fait référence à l'expression avec le RefID B. Dans Grafana, toutes les requêtes et expressions sont identifiées par un RefID qui identifie chaque requête et expression dans une règle d'alerte. `labels={service=api}`Fait également référence aux étiquettes et `value=6.789` à la valeur.

Vous avez peut-être remarqué qu'il n'existe pas de RefID A. Cela est dû au fait que dans la plupart des règles d'alerte, le RefID A fait référence à une requête et que les requêtes peuvent renvoyer de nombreuses lignes ou séries chronologiques auxquelles elles ne sont pas incluses. `$value`

**La variable de valeurs**

Si la `$value` variable contient plus d'informations que ce dont vous avez besoin, vous pouvez plutôt imprimer les étiquettes et la valeur des expressions individuelles à l'aide de`$values`. À la différence`$value`, la `$values` variable est une table d'objets contenant les étiquettes et les valeurs à virgule flottante de chaque expression, indexées par leur RefID.

Si vous deviez imprimer la valeur de l'expression avec RefID `B` dans le résumé de l'alerte :

```
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $values.B }}%
```

Le résumé contiendra uniquement la valeur :

```
api has an over 5% of responses with 5xx errors: 6.789%
```

Cependant, lors de l'`{{ $values.B }}`impression du numéro 6,789, il s'agit en fait d'une chaîne lorsque vous imprimez l'objet qui contient à la fois les étiquettes et la valeur du RefID B, et non la valeur à virgule flottante de B. Pour utiliser la valeur à virgule flottante du RefID B, vous devez utiliser le champ de. `Value` `$values.B` Si vous deviez humaniser la valeur à virgule flottante dans le résumé d'une alerte :

```
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanize $values.B.Value }}%
```

**Aucune donnée, aucune erreur d'exécution et aucun délai d'attente**

Si la requête de votre règle d'alerte ne renvoie aucune donnée ou échoue en raison d'une erreur de source de données ou d'un délai d'attente, les expressions Threshold, Reduce ou Math qui utilisent cette requête ne renverront également aucune donnée ou une erreur. Lorsque cela se produit, ces expressions seront absentes de`$values`. Il est recommandé de vérifier la présence d'un RefID avant de l'utiliser, sinon votre modèle se cassera si votre requête ne renvoie aucune donnée ou une erreur. Vous pouvez le faire à l'aide d'une instruction if :

```
{{ if $values.B }}{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanizePercentage $values.B.Value }}{{ end }}
```

## Conditions classiques
<a name="v9-alerting-explore-labels-templating-classic"></a>

Si la règle utilise des conditions classiques au lieu des expressions Threshold, Reduce et Math, la `$values` variable est indexée à la fois par l'ID de référence et par la position de la condition dans la condition classique. Par exemple, si vous avez une condition classique dont le RefID B contient deux conditions, elle `$values` contiendra deux conditions `B0` et`B1`.

```
The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}
```

## Fonctions
<a name="v9-alerting-explore-labels-templating-functions"></a>

Les fonctions suivantes sont également disponibles lors de l'extension d'étiquettes et d'annotations :

**args**

La `args` fonction traduit une liste d'objets en une carte avec les clés arg0, arg1, etc. Cela a pour but de permettre la transmission de plusieurs arguments aux modèles.

**Exemple**

```
{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
```

```
1 2
```

**URL externe**

La `externalURL` fonction renvoie l'URL externe du serveur Grafana telle que configurée dans le ou les fichiers ini.

**Exemple**

```
{{ externalURL }}
```

```
https://example.com/grafana
```

**GraphLink**

La `graphLink` fonction renvoie le chemin d'accès à la vue graphique [Explorez dans la version 9 de Grafana](v9-explore.md) pour l'expression et la source de données données.

**Exemple**

```
{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
```

```
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]
```

**humaniser**

La `humanize` fonction humanise les nombres décimaux.

**Exemple**

```
{{ humanize 1000.0 }}
```

```
1k
```

**humaniser 1024**

Il `humanize1024` fonctionne de manière similaire `humanize` mais utilise 1024 comme base au lieu de 1000.

**Exemple**

```
{{ humanize1024 1024.0 }}
```

```
1ki
```

**Humaniser la durée**

La `humanizeDuration` fonction humanise une durée en secondes.

**Exemple**

```
{{ humanizeDuration 60.0 }}
```

```
1m 0s
```

**Pourcentage d'humanisation**

La `humanizePercentage` fonction humanise une valeur de ratio par rapport à un pourcentage.

**Exemple**

```
{{ humanizePercentage 0.2 }}
```

```
20%
```

**Humaniser l'horodatage**

La `humanizeTimestamp` fonction humanise un horodatage Unix.

**Exemple**

```
{{ humanizeTimestamp 1577836800.0 }}
```

```
2020-01-01 00:00:00 +0000 UTC
```

**match**

La `match` fonction compare le texte à un modèle d'expression régulière.

**Exemple**

```
{{ match "a.*" "abc" }}
```

```
true
```

**Préfixe de chemin**

La `pathPrefix` fonction renvoie le chemin du serveur Grafana tel que configuré dans le ou les fichiers ini.

**Exemple**

```
{{ pathPrefix }}
```

```
/grafana
```

**Tableau Link**

La `tableLink` fonction renvoie le chemin d'accès à la vue tabulaire [Explorez dans la version 9 de Grafana](v9-explore.md) pour l'expression et la source de données données.

**Exemple**

```
{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
```

```
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]
```

**title**

La `title` fonction met en majuscule le premier caractère de chaque mot.

**Exemple**

```
{{ title "hello, world!" }}
```

```
Hello, World!
```

**ToLower**

La `toLower` fonction renvoie tout le texte en minuscules.

**Exemple**

```
{{ toLower "Hello, world!" }}
```

```
hello, world!
```

**ToupPper**

La `toUpper` fonction renvoie tout le texte en majuscules.

**Exemple**

```
{{ toUpper "Hello, world!" }}
```

```
HELLO, WORLD!
```

**reReplaceAll**

La `reReplaceAll` fonction remplace le texte correspondant à l'expression régulière.

**Exemple**

```
{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
```

```
example.com:8080
```