Création de modèles d'étiquettes et d'annotations - Amazon Managed Grafana

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

Les modèles d'étiquettes et d'annotations sont écrits dans le langage de création de modèles de Go, texte/modèle.

É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 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