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
, GroupLabels
CommonLabels
, 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"