Templating label dan anotasi - Amazon Managed Grafana

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

Templating label dan anotasi

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

Di Grafana, Anda membuat template label dan anotasi seperti yang Anda lakukan di Prometheus. Jika Anda telah menggunakan Prometheus sebelumnya maka Anda harus terbiasa dengan $labels variabel $value dan, yang berisi label dan nilai peringatan. Anda dapat menggunakan variabel yang sama di Grafana, bahkan jika peringatan tidak menggunakan sumber data Prometheus. Jika Anda belum pernah menggunakan Prometheus sebelumnya maka jangan khawatir karena masing-masing variabel ini, dan cara membuat template mereka, akan dijelaskan saat Anda mengikuti sisa halaman ini.

Bahasa Templating Go

Template untuk label dan anotasi ditulis dalam bahasa template Go, teks/template.

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 hasil fungsi atau nilai variabel. Misalnya, untuk mencetak $labels variabel Anda akan menulis yang berikut:

{{ $labels }}

Iterasi di atas label

Untuk mengulangi setiap label di $labels Anda dapat menggunakan. range Di sini $k mengacu pada nama dan $v mengacu pada nilai label saat ini. Misalnya, jika kueri Anda mengembalikan label instance=test maka $k akan instance dan $v akan menjaditest.

{{ range $k, $v := $labels }} {{ $k }}={{ $v }} {{ end }}

Label, nilai dan nilai variabel

Variabel label

$labelsVariabel berisi label dari kueri. Misalnya, kueri yang memeriksa apakah instance sedang down mungkin mengembalikan label instance dengan nama instance yang sedang down. Misalnya, Anda memiliki aturan peringatan yang menyala ketika salah satu instance Anda telah mati selama lebih dari 5 menit. Anda ingin menambahkan ringkasan ke peringatan yang memberi tahu Anda instance mana yang sedang down. Dengan $labels variabel, Anda dapat membuat ringkasan yang mencetak label instance dalam ringkasan:

Instance {{ $labels.instance }} has been down for more than 5 minutes

Label dengan titik-titik

Jika label yang ingin Anda cetak berisi titik (penghentian penuh atau titik) dalam namanya menggunakan titik yang sama di templat tidak akan berfungsi:

Instance {{ $labels.instance.name }} has been down for more than 5 minutes

Ini karena template mencoba menggunakan bidang yang tidak ada yang dipanggilname. $labels.instance Anda sebaiknya menggunakan index fungsi, yang mencetak label instance.name dalam $labels variabel:

Instance {{ index $labels "instance.name" }} has been down for more than 5 minutes

Variabel nilai

$valueVariabel bekerja berbeda dari Prometheus. Dalam $value Prometheus adalah nomor floating point yang berisi nilai ekspresi, tetapi di Grafana itu adalah string yang berisi label dan nilai dari semua ekspresi Ambang, Kurangi dan Matematika, dan Kondisi Klasik untuk aturan peringatan ini. Ini tidak berisi hasil kueri, karena ini dapat kembali dari 10 hingga 10.000 baris atau metrik.

Jika Anda menggunakan $value variabel dalam ringkasan peringatan:

{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $value }})

Ringkasannya mungkin terlihat seperti berikut:

api has an over 5% of responses with 5xx errors: [ var='B' labels={service=api} value=6.789 ]

Di sini var='B' mengacu pada ekspresi dengan RefiD B. Di Grafana, semua kueri dan ekspresi diidentifikasi oleh ReFID yang mengidentifikasi setiap kueri dan ekspresi dalam aturan peringatan. Demikian pula labels={service=api} mengacu pada label, dan value=6.789 mengacu pada nilai.

Anda mungkin telah mengamati bahwa tidak ada ReFID A. Itu karena di sebagian besar aturan peringatan ReFID A mengacu pada kueri, dan karena kueri dapat mengembalikan banyak baris atau deret waktu mereka tidak termasuk dalam. $value

Variabel nilai

Jika $value variabel berisi lebih banyak informasi daripada yang Anda butuhkan, Anda dapat mencetak label dan nilai ekspresi individu menggunakan$values. Tidak seperti$value, $values variabel adalah tabel objek yang berisi label dan nilai floating point dari setiap ekspresi, diindeks oleh ReFID mereka.

Jika Anda mencetak nilai ekspresi dengan ReFID B dalam ringkasan peringatan:

{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $values.B }}%

Ringkasan hanya akan berisi nilai:

api has an over 5% of responses with 5xx errors: 6.789%

Namun, saat {{ $values.B }} mencetak angka 6.789, itu sebenarnya adalah string karena Anda mencetak objek yang berisi label dan nilai untuk RefiD B, bukan nilai floating point B. Untuk menggunakan nilai floating point dari RefiD B Anda harus menggunakan bidang dari. Value $values.B Jika Anda memanusiakan nilai floating point dalam ringkasan peringatan:

{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanize $values.B.Value }}%

Tidak ada data, kesalahan runtime, dan batas waktu

Jika kueri dalam aturan peringatan Anda tidak mengembalikan data, atau gagal karena kesalahan sumber data atau batas waktu, maka ekspresi Threshold, Reduce atau Math apa pun yang menggunakan kueri itu juga tidak akan mengembalikan data atau kesalahan. Ketika ini terjadi ungkapan ini akan absen dari$values. Merupakan praktik yang baik untuk memeriksa apakah ReFID ada sebelum menggunakannya karena jika tidak, template Anda akan rusak jika kueri Anda tidak mengembalikan data atau kesalahan. Anda dapat melakukan ini menggunakan pernyataan if:

{{ if $values.B }}{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanizePercentage $values.B.Value }}{{ end }}

Kondisi Klasik

Jika aturan menggunakan Classic Conditions bukan Threshold, Reduce dan Math ekspresi, maka $values variabel diindeks oleh kedua ID Ref dan posisi kondisi dalam Kondisi Klasik. Misalnya, jika Anda memiliki Kondisi Klasik dengan ReFID B yang berisi dua kondisi, maka $values akan berisi dua kondisi B0 dan. B1

The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}

Fungsi

Fungsi-fungsi berikut juga tersedia saat memperluas label dan anotasi:

args

argsFungsi menerjemahkan daftar objek ke peta dengan kunci arg0, arg1 dll Ini dimaksudkan untuk memungkinkan beberapa argumen diteruskan ke template.

Contoh

{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2

URL eksternal

externalURLFungsi mengembalikan URL eksternal dari server Grafana seperti yang dikonfigurasi dalam file ini (s).

Contoh

{{ externalURL }}
https://example.com/grafana

GraphLink

graphLinkFungsi mengembalikan path ke tampilan grafis Jelajahi di Grafana versi 9 untuk ekspresi yang diberikan dan sumber data.

Contoh

{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]

memanusiakan

humanizeFungsi memanusiakan angka desimal.

Contoh

{{ humanize 1000.0 }}
1k

manusia1024

humanize1024Karya-karya yang mirip dengan humanize tetapi menggunakan 1024 sebagai basis daripada 1000.

Contoh

{{ humanize1024 1024.0 }}
1ki

HumanizeUrasi

humanizeDurationFungsi memanusiakan durasi dalam hitungan detik.

Contoh

{{ humanizeDuration 60.0 }}
1m 0s

HumanizePersentase

humanizePercentageFungsi memanusiakan nilai rasio terhadap persentase.

Contoh

{{ humanizePercentage 0.2 }}
20%

HumanizeTimestamp

humanizeTimestampFungsi ini memanusiakan stempel waktu Unix.

Contoh

{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC

pertandingan

matchFungsi ini cocok dengan teks terhadap pola ekspresi reguler.

Contoh

{{ match "a.*" "abc" }}
true

PathPrefix

pathPrefixFungsi mengembalikan path dari server Grafana seperti yang dikonfigurasi dalam file ini (s).

Contoh

{{ pathPrefix }}
/grafana

TableLink

tableLinkFungsi mengembalikan path ke tampilan tabular Jelajahi di Grafana versi 9 untuk ekspresi yang diberikan dan sumber data.

Contoh

{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]

judul

titleFungsi ini mengkapitalisasi karakter pertama dari setiap kata.

Contoh

{{ title "hello, world!" }}
Hello, World!

ToLower

toLowerFungsi mengembalikan semua teks dalam huruf kecil.

Contoh

{{ toLower "Hello, world!" }}
hello, world!

TouPper

toUpperFungsi mengembalikan semua teks dalam huruf besar.

Contoh

{{ toUpper "Hello, world!" }}
HELLO, WORLD!

reReplaceAll

reReplaceAllFungsi menggantikan teks yang cocok dengan ekspresi reguler.

Contoh

{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
example.com:8080