Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwendung der Template-Sprache von Go
Dieses Dokumentationsthema wurde für Grafana-Workspaces entwickelt, die Grafana-Version 9.x unterstützen.
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 10.x unterstützen, finden Sie unter. Arbeitet in Grafana-Version 10
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 8.x unterstützen, finden Sie unter. Arbeitet in Grafana-Version 8
Sie schreiben Benachrichtigungsvorlagen in der Vorlagensprache von Go, Text/Vorlage.
Dieser Abschnitt bietet einen Überblick über die Vorlagensprache von Go und das Schreiben von Vorlagen in Text/Vorlage.
Punkt
In Text/Template gibt es einen speziellen Cursor namens Punkt, der als geschrieben wird. .
Sie können sich diesen Cursor als eine Variable vorstellen, deren Wert sich ändert, je nachdem, wo in der Vorlage er verwendet wird. Beispielsweise .
bezieht sich eine Benachrichtigungsvorlage zu Beginn auf das ExtendedData
Objekt, das eine Reihe von Feldern enthältAlerts
, darunter Status
GroupLabels
,CommonLabels
, CommonAnnotations
undExternalURL
. Punkt kann sich jedoch auf etwas anderes beziehen, wenn es in einer Liste verwendet wird, wenn range
es in einer Liste verwendet wird, wenn es innerhalb einer verwendet wird oder wenn Feature-Vorlagen geschrieben werdenwith
, die in anderen Vorlagen verwendet werden sollen. Beispiele dafür finden Sie in Vorlagen für Benachrichtigungen erstellen und alle Daten und Funktionen in derVorlage – Referenz.
Tags öffnen und schließen
In text/template beginnen {{
und enden Vorlagen mit, }}
unabhängig davon, ob die Vorlage eine Variable druckt oder Kontrollstrukturen wie if-Anweisungen ausführt. Dies unterscheidet sich von anderen Template-Sprachen wie Jinja, wo das Drucken einer Variablen und und {{
Kontrollstrukturen }}
und verwenden. {%
%}
Print (Ausgabe)
Um den Wert von etwas zu drucken, verwende {{
und. }}
Sie können den Wert eines Punkts, ein Punktfeld, das Ergebnis einer Funktion und den Wert einer Variablen drucken. Um beispielsweise das Alerts
Feld zu drucken, auf das sich der Punkt bezieht, würden ExtendedData
Sie Folgendes schreiben:
{{ .Alerts }}
Iterieren Sie über Warnmeldungen
Um nur die Beschriftungen jeder Warnung und nicht alle Informationen über die Warnung zu drucken, können Sie a verwenden, um die Warnungen in range
folgenden Schritten zu iterieren: ExtendedData
{{ range .Alerts }} {{ .Labels }} {{ end }}
Innerhalb des Bereichs bezieht sich der Punkt nicht mehr aufExtendedData
, sondern auf eineAlert
. Sie können {{ .Labels }}
es verwenden, um die Beschriftungen der einzelnen Warnmeldungen zu drucken. Das funktioniert, weil {{ range .Alerts }}
sich der Punkt so ändert, dass er sich auf die aktuelle Warnung in der Liste der Benachrichtigungen bezieht. Wenn der Bereich abgeschlossen ist, wird der Punkt auf den Wert zurückgesetzt, den er vor dem Beginn des Bereichs hatte. In diesem Beispiel ist dasExtendedData
:
{{ range .Alerts }} {{ .Labels }} {{ end }} {{/* does not work, .Labels does not exist here */}} {{ .Labels }} {{/* works, cursor was reset */}} {{ .Status }}
Iterieren Sie über Anmerkungen und Beschriftungen
Lassen Sie uns eine Vorlage schreiben, um die Beschriftungen jeder Warnung in dem Format zu druckenThe name of the label is $name, and the
value is $value
, in dem sie den Namen $name
und den Wert jedes Labels $value
enthalten.
Verwenden Sie wie im vorherigen Beispiel einen Bereich, um über die Warnungen zu iterieren, sodass der Punkt auf die aktuelle Warnung in der Liste der Warnungen verweist, und verwenden Sie dann einen zweiten Bereich für die sortierten Beschriftungen, sodass der Punkt ein zweites Mal aktualisiert wird, sodass er auf das aktuelle Label verweist. .Alerts
Verwenden Sie innerhalb des zweiten Bereichs .Name
und.Value
, um den Namen und den Wert jedes Labels zu drucken:
{{ range .Alerts }} {{ range .Labels.SortedPairs }} The name of the label is {{ .Name }}, and the value is {{ .Value }} {{ end }} {{ range .Annotations.SortedPairs }} The name of the annotation is {{ .Name }}, and the value is {{ .Value }} {{ end }} {{ end }}
Wenn Aussagen
Sie können if-Anweisungen in Vorlagen verwenden. Um beispielsweise zu drucken, There are no alerts
wenn keine Warnmeldungen enthalten sind, würden .Alerts
Sie Folgendes schreiben:
{{ if .Alerts }} There are alerts {{ else }} There are no alerts {{ end }}
Mit
With ähnelt if-Anweisungen, with
aktualisiert jedoch im Gegensatz zu if-Anweisungen den Punkt so, dass er auf den Wert von with verweist:
{{ with .Alerts }} There are {{ len . }} alert(s) {{ else }} There are no alerts {{ end }}
Variablen
Variablen in Text/Vorlage müssen innerhalb der Vorlage erstellt werden. Um beispielsweise eine Variable zu erstellen, die $variable
mit dem aktuellen Wert von Punkt aufgerufen wird, würden Sie Folgendes schreiben:
{{ $variable := . }}
Sie können $variable
innerhalb eines Bereichs oder verwenden with
und es bezieht sich auf den Wert von Punkt zu dem Zeitpunkt, als die Variable definiert wurde, und nicht auf den aktuellen Wert von Punkt.
Sie können beispielsweise keine Vorlage schreiben, die den zweiten {{ .Labels }}
Bereich verwendet, da sich Punkt hier auf das aktuelle Label bezieht, nicht auf die aktuelle Warnung:
{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{/* does not work because in the second range . is a label not an alert */}} There are {{ len .Labels }} {{ end }} {{ end }}
Sie können dies beheben, indem Sie eine Variable definieren, die $alert
im ersten Bereich und vor dem zweiten Bereich aufgerufen wird:
{{ range .Alerts }} {{ $alert := . }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{/* works because $alert refers to the value of dot inside the first range */}} There are {{ len $alert.Labels }} {{ end }} {{ end }}
Bereich mit Index
Sie können den Index jeder Warnung innerhalb eines Bereichs abrufen, indem Sie Index- und Wertvariablen am Anfang des Bereichs definieren:
{{ $num_alerts := len .Alerts }} {{ range $index, $alert := .Alerts }} This is alert {{ $index }} out of {{ $num_alerts }} {{ end }}
Definieren Sie Vorlagen
Sie können Vorlagen definieren, die in anderen Vorlagen verwendet werden können, indem Sie define
den Namen der Vorlage in doppelten Anführungszeichen verwenden. Sie sollten keine Vorlagen mit demselben Namen wie andere Vorlagen definieren, einschließlich Standardvorlagen wie __subject
__text_values_list
,__text_alert_list
, default.title
unddefault.message
. Wenn eine Vorlage mit demselben Namen wie eine Standardvorlage oder eine Vorlage in einer anderen Benachrichtigungsvorlage erstellt wurde, verwendet Grafana möglicherweise eine der beiden Vorlagen. Grafana verhindert nicht und zeigt auch keine Fehlermeldung an, wenn es zwei oder mehr Vorlagen mit demselben Namen gibt.
{{ define "print_labels" }} {{ end }}
Vorlagen einbetten
Sie können eine definierte Vorlage in Ihre Vorlage einbettentemplate
, indem Sie den Namen der Vorlage in doppelten Anführungszeichen und den Cursor, der an die Vorlage übergeben werden soll, verwenden:
{{ template "print_labels" . }}
Übergeben Sie Daten an Vorlagen
Innerhalb einer Vorlage bezieht sich der Punkt auf den Wert, der an die Vorlage übergeben wird.
Wenn einer Vorlage beispielsweise eine Liste mit Auslösewarnungen übergeben wird, bezieht sich Punkt auf diese Liste von Auslösewarnungen:
{{ template "print_alerts" .Alerts }}
Wenn der Vorlage die sortierten Labels für eine Warnung übergeben werden, bezieht sich Punkt auf die Liste der sortierten Labels:
{{ template "print_labels" .SortedLabels }}
Dies ist nützlich, wenn Sie wiederverwendbare Vorlagen schreiben. Um beispielsweise alle Benachrichtigungen zu drucken, könnten Sie Folgendes schreiben:
{{ template "print_alerts" .Alerts }}
Um dann nur die Feuermeldungen auszudrucken, könnten Sie Folgendes schreiben:
{{ template "print_alerts" .Alerts.Firing }}
Das funktioniert, weil es sich bei beiden .Alerts
um Listen von Warnmeldungen .Alerts.Firing
handelt.
{{ define "print_alerts" }} {{ range . }} {{ template "print_labels" .SortedLabels }} {{ end }} {{ end }}
Kommentare
Sie können Kommentare hinzufügen mit {{/*
und*/}}
:
{{/* This is a comment */}}
Um zu verhindern, dass Kommentare Zeilenumbrüche hinzufügen, verwende:
{{- /* This is a comment with no leading or trailing line breaks */ -}}
Einrückung
Sie können Einzüge, sowohl Tabulatoren als auch Leerzeichen, und Zeilenumbrüche verwenden, um die Lesbarkeit von Vorlagen zu verbessern:
{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}
Einrückungen in der Vorlage werden jedoch auch im Text vorhanden sein. Als nächstes werden wir sehen, wie man es entfernt.
Entferne Leerzeichen und Zeilenumbrüche
Verwenden Sie im Text/in der Vorlage {{-
und -}}
um führende und nachfolgende Leerzeichen und Zeilenumbrüche zu entfernen.
Wenn Sie beispielsweise Einrückungen und Zeilenumbrüche verwenden, um eine Vorlage lesbarer zu machen:
{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}
Der Einzug und die Zeilenumbrüche werden auch im Text vorhanden sein:
alertname = "Test" grafana_folder = "Test alerts"
Sie können den Einzug und die Zeilenumbrüche aus dem Text entfernen, indem Sie }}
zu -}}
Beginn jedes Bereichs wechseln:
{{ range .Alerts -}} {{ range .Labels.SortedPairs -}} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}
Der Einzug und die Zeilenumbrüche in der Vorlage fehlen jetzt im Text:
alertname = "Test" grafana_folder = "Test alerts"