Menggunakan bahasa template Go - Amazon Managed Grafana

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan bahasa template Go

Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 9.x.

Untuk ruang kerja Grafana yang mendukung Grafana versi 10.x, lihat. Bekerja di Grafana versi 10

Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. Bekerja di Grafana versi 8

Anda menulis template notifikasi dalam bahasa template Go, teks/template.

Bagian ini memberikan ikhtisar bahasa template Go dan template penulisan dalam teks/template.

Dot

Dalam teks/template ada kursor khusus yang disebut dot, dan ditulis sebagai. . Anda dapat menganggap kursor ini sebagai variabel yang nilainya berubah tergantung di mana dalam template itu digunakan. Misalnya, pada awal template notifikasi . mengacu pada ExtendedData objek, yang berisi sejumlah bidang termasukAlerts,,Status, GroupLabelsCommonLabels, CommonAnnotations danExternalURL. Namun, dot mungkin merujuk ke sesuatu yang lain saat digunakan dalam daftar di range atas, saat digunakan di dalamwith, atau saat menulis templat fitur untuk digunakan di templat lain. Anda dapat melihat contoh ini diBuat templat notifikasi, dan semua data dan fungsi diReferensi templat.

Membuka dan menutup tag

Dalam teks/template, template dimulai dengan {{ dan diakhiri dengan }} terlepas dari apakah template mencetak variabel atau menjalankan struktur kontrol seperti pernyataan if. Ini berbeda dari bahasa templating lainnya seperti Jinja di mana pencetakan variabel menggunakan {{ dan }} dan struktur kontrol menggunakan {% dan. %}

Cetak

Untuk mencetak nilai sesuatu gunakan {{ dan}}. Anda dapat mencetak nilai titik, bidang titik, hasil fungsi, dan nilai variabel. Misalnya, untuk mencetak Alerts bidang di mana titik mengacu pada ExtendedData Anda akan menulis yang berikut:

{{ .Alerts }}

Iterasi di atas peringatan

Untuk mencetak hanya label setiap peringatan, bukan semua informasi tentang peringatan, Anda dapat menggunakan a range untuk mengulangi peringatan di: ExtendedData

{{ range .Alerts }} {{ .Labels }} {{ end }}

Di dalam rentang titik tidak lagi mengacu padaExtendedData, tetapi keAlert. Anda dapat menggunakan {{ .Labels }} untuk mencetak label setiap peringatan. Ini berfungsi karena {{ range .Alerts }} perubahan titik untuk merujuk ke peringatan saat ini dalam daftar peringatan. Ketika rentang selesai titik diatur ulang ke nilai yang dimilikinya sebelum dimulainya rentang, yang dalam contoh ini adalahExtendedData:

{{ range .Alerts }} {{ .Labels }} {{ end }} {{/* does not work, .Labels does not exist here */}} {{ .Labels }} {{/* works, cursor was reset */}} {{ .Status }}

Ulangi anotasi dan label

Mari kita menulis template untuk mencetak label setiap peringatan dalam formatThe name of the label is $name, and the value is $value, di mana $name dan $value berisi nama dan nilai setiap label.

Seperti pada contoh sebelumnya, gunakan rentang untuk mengulangi peringatan .Alerts sedemikian rupa sehingga titik mengacu pada peringatan saat ini dalam daftar peringatan, dan kemudian gunakan rentang kedua pada label yang diurutkan sehingga titik diperbarui untuk kedua kalinya untuk merujuk ke label saat ini. Di dalam rentang kedua gunakan .Name dan .Value untuk mencetak nama dan nilai setiap label:

{{ 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 }}

Jika pernyataan

Anda dapat menggunakan pernyataan if dalam template. Misalnya, untuk mencetak There are no alerts jika tidak ada peringatan di .Alerts Anda akan menulis yang berikut:

{{ if .Alerts }} There are alerts {{ else }} There are no alerts {{ end }}

Dengan

Dengan mirip dengan pernyataan if, namun tidak seperti pernyataan if, with pembaruan titik untuk merujuk ke nilai with:

{{ with .Alerts }} There are {{ len . }} alert(s) {{ else }} There are no alerts {{ end }}

Variabel

Variabel dalam teks/template harus dibuat dalam template. Misalnya, untuk membuat variabel yang disebut $variable dengan nilai titik saat ini Anda akan menulis yang berikut ini:

{{ $variable := . }}

Anda dapat menggunakan $variable di dalam rentang atau with dan itu akan merujuk ke nilai titik pada saat variabel didefinisikan, bukan nilai titik saat ini.

Misalnya, Anda tidak dapat menulis templat yang digunakan {{ .Labels }} dalam rentang kedua karena di sini titik mengacu pada label saat ini, bukan peringatan saat ini:

{{ 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 }}

Anda dapat memperbaikinya dengan mendefinisikan variabel yang disebut $alert dalam rentang pertama dan sebelum rentang kedua:

{{ 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 }}

Rentang dengan indeks

Anda bisa mendapatkan indeks setiap peringatan dalam rentang dengan mendefinisikan indeks dan variabel nilai di awal rentang:

{{ $num_alerts := len .Alerts }} {{ range $index, $alert := .Alerts }} This is alert {{ $index }} out of {{ $num_alerts }} {{ end }}

Tentukan templat

Anda dapat menentukan template yang dapat digunakan dalam template lain, menggunakan define dan nama template dalam tanda kutip ganda. Anda tidak boleh mendefinisikan template dengan nama yang sama dengan template lain, termasuk template default seperti__subject,__text_values_list,__text_alert_list, default.title dandefault.message. Jika templat telah dibuat dengan nama yang sama dengan templat default, atau templat di templat notifikasi lain, Grafana mungkin menggunakan salah satu templat. Grafana tidak mencegah, atau menampilkan pesan kesalahan, ketika ada dua atau lebih templat dengan nama yang sama.

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

Template sematkan

Anda dapat menyematkan template yang ditentukan dalam template Anda menggunakantemplate, nama template dalam tanda kutip ganda, dan kursor yang harus diteruskan ke template:

{{ template "print_labels" . }}

Meneruskan data ke template

Dalam titik template mengacu pada nilai yang diteruskan ke template.

Misalnya, jika templat dilewatkan daftar peringatan penembakan maka dot mengacu pada daftar peringatan penembakan tersebut:

{{ template "print_alerts" .Alerts }}

Jika templat dilewatkan label yang diurutkan untuk peringatan maka dot mengacu pada daftar label yang diurutkan:

{{ template "print_labels" .SortedLabels }}

Ini berguna saat menulis templat yang dapat digunakan kembali. Misalnya, untuk mencetak semua peringatan, Anda dapat menulis yang berikut ini:

{{ template "print_alerts" .Alerts }}

Kemudian untuk mencetak hanya peringatan penembakan Anda dapat menulis ini:

{{ template "print_alerts" .Alerts.Firing }}

Ini berfungsi karena keduanya .Alerts dan .Alerts.Firing merupakan daftar peringatan.

{{ define "print_alerts" }} {{ range . }} {{ template "print_labels" .SortedLabels }} {{ end }} {{ end }}

Komentar

Anda dapat menambahkan komentar dengan {{/* dan*/}}:

{{/* This is a comment */}}

Untuk mencegah komentar menambahkan jeda baris gunakan:

{{- /* This is a comment with no leading or trailing line breaks */ -}}

Lekukan

Anda dapat menggunakan lekukan, baik tab maupun spasi, dan jeda baris, untuk membuat templat lebih mudah dibaca:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

Namun, lekukan dalam template juga akan ada dalam teks. Selanjutnya kita akan melihat cara menghapusnya.

Hapus spasi dan jeda baris

Dalam penggunaan teks/templat {{- dan -}} untuk menghapus spasi depan dan belakang serta jeda baris.

Misalnya, saat menggunakan lekukan dan jeda baris untuk membuat templat lebih mudah dibaca:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

Lekukan dan jeda baris juga akan ada dalam teks:

alertname = "Test" grafana_folder = "Test alerts"

Anda dapat menghapus lekukan dan jeda baris dari teks yang berubah }} menjadi -}} di awal setiap rentang:

{{ range .Alerts -}} {{ range .Labels.SortedPairs -}} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

Indentasi dan jeda baris dalam template sekarang tidak ada dari teks:

alertname = "Test" grafana_folder = "Test alerts"