Verwendung der Template-Sprache von Go - Amazon Managed Grafana

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 10.x unterstützen.

Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 9.x unterstützen, finden Sie unter. Arbeitet in Grafana-Version 9

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 StatusGroupLabels,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 }}

Wiederholt die 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 }}

Die Index-Funktionen

Verwenden Sie die index Funktion, um eine bestimmte Anmerkung oder ein bestimmtes Etikett zu drucken.

{{ range .Alerts }} The name of the alert is {{ index .Labels "alertname" }} {{ 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, sodass 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, kann Grafana beide Vorlagen verwenden. Grafana verhindert nicht und zeigt auch keine Fehlermeldung an, wenn es zwei oder mehr Vorlagen mit demselben Namen gibt.

{{ define "print_labels" }} {{ end }}

Vorlagen ausführen

Sie können eine definierte Vorlage innerhalb Ihrer Vorlage ausführentemplate, indem Sie den Namen der Vorlage in doppelten Anführungszeichen und den Cursor verwenden, der an die Vorlage übergeben werden soll:

{{ 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 in Text/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"