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
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
Pour les espaces de travail Grafana compatibles avec la version 8.x de Grafana, voir. Travailler dans la version 8 de Grafana
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
É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. %}
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 unrange
. 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 seraittest
.
{{ range $k, $v := $labels }} {{ $k }}={{ $v }} {{ end }}
Les labels, les valeurs et les variables de valeurs
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
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
etB1
.
The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}
Fonctions
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 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 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