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 10.x.

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

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

Anda dapat menggunakan template untuk menyertakan data dari kueri dan ekspresi dalam label dan anotasi. Misalnya, Anda mungkin ingin menyetel label tingkat keparahan untuk peringatan berdasarkan nilai kueri, atau menggunakan label instance dari kueri dalam anotasi ringkasan sehingga Anda tahu server mana yang mengalami penggunaan CPU tinggi.

Semua template harus ditulis dalam teks/template. Terlepas dari apakah Anda membuat template label atau anotasi, Anda harus menulis setiap templat sebaris di dalam label atau anotasi yang sedang Anda templating. Ini berarti Anda tidak dapat berbagi templat antara label dan anotasi, dan sebagai gantinya Anda harus menyalin templat di mana pun Anda ingin menggunakannya.

Setiap template dievaluasi setiap kali aturan peringatan dievaluasi, dan dievaluasi untuk setiap peringatan secara terpisah. Misalnya, jika aturan peringatan Anda memiliki anotasi ringkasan templat, dan aturan peringatan memiliki 10 peringatan pengaktifan, maka templat akan dieksekusi 10 kali, sekali untuk setiap peringatan. Anda harus mencoba untuk menghindari melakukan perhitungan mahal di template Anda sebanyak mungkin.

Contoh

Daripada menulis tutorial lengkap tentang teks/template, contoh berikut mencoba menunjukkan kasus penggunaan paling umum yang telah kita lihat untuk template. Anda dapat menggunakan contoh-contoh ini kata demi kata, atau menyesuaikannya seperlunya untuk kasus penggunaan Anda. Untuk informasi lebih lanjut tentang cara menulis teks/template lihat dokumentasi teks/template.

Cetak semua label, dipisahkan koma

Untuk mencetak semua label, dipisahkan koma, cetak $labels variabel:

{{ $labels }}

Misalnya, diberi peringatan dengan labelalertname=High CPU usage, grafana_folder=CPU alerts daninstance=server1, ini akan mencetak:

alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1
catatan

Jika Anda menggunakan kondisi klasik maka tidak $labels akan berisi label apa pun dari kueri. Lihat variabel $labels untuk informasi lebih lanjut.

Cetak semua label, satu per baris

Untuk mencetak semua label, satu per baris, gunakan a range untuk mengulangi setiap pasangan kunci/nilai dan mencetaknya satu per satu. Di sini $k mengacu pada nama dan $v mengacu pada nilai label saat ini:

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

Misalnya, diberi peringatan dengan labelalertname=High CPU usage, grafana_folder=CPU alerts daninstance=server1, ini akan mencetak:

alertname=High CPU usage grafana_folder=CPU alerts instance=server1
catatan

Jika Anda menggunakan kondisi klasik maka tidak $labels akan berisi label apa pun dari kueri. Lihat variabel $labels untuk informasi lebih lanjut.

Cetak label individual

Untuk mencetak label individual, gunakan index fungsi dengan $labels variabel:

The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes

Misalnya, diberi peringatan dengan labelinstance=server1, ini akan mencetak:

The host server1 has exceeded 80% CPU usage for the last 5 minutes
catatan

Jika Anda menggunakan kondisi klasik maka tidak $labels akan berisi label apa pun dari kueri. Lihat variabel $labels untuk informasi lebih lanjut.

Mencetak nilai kueri

Untuk mencetak nilai kueri instan, Anda dapat mencetak ID Ref menggunakan index fungsi dan $values variabel:

{{ index $values "A" }}

Misalnya, diberikan kueri instan yang mengembalikan nilai 81.2345, ini akan mencetak:

81.2345

Untuk mencetak nilai kueri rentang, Anda harus terlebih dahulu menguranginya dari deret waktu menjadi vektor instan dengan ekspresi pengurangan. Anda kemudian dapat mencetak hasil ekspresi pengurangan dengan menggunakan ID Ref sebagai gantinya. Misalnya, jika ekspresi reduksi mengambil rata-rata A dan memiliki ID Ref B, Anda akan menulis:

{{ index $values "B" }}

Cetak nilai manusiawi dari kueri

Untuk mencetak nilai manusiawi dari kueri instan, gunakan humanize fungsi:

{{ humanize (index $values "A").Value }}

Misalnya, diberikan kueri instan yang mengembalikan nilai 81.2345, ini akan mencetak:

81.234

Untuk mencetak nilai manusiawi dari kueri rentang, Anda harus terlebih dahulu menguranginya dari deret waktu menjadi vektor instan dengan ekspresi pengurangan. Anda kemudian dapat mencetak hasil ekspresi pengurangan dengan menggunakan ID Ref sebagai gantinya. Misalnya, jika ekspresi reduksi mengambil rata-rata A dan memiliki ID Ref B, Anda akan menulis:

{{ humanize (index $values "B").Value }}

Cetak nilai kueri sebagai persentase

Untuk mencetak nilai kueri instan sebagai persentase, gunakan humanizePercentage fungsi:

{{ humanizePercentage (index $values "A").Value }}

Fungsi ini mengharapkan nilai menjadi angka desimal antara 0 dan 1. Jika nilainya bukan angka desimal antara 0 dan 100, Anda dapat membaginya dengan 100 baik dalam kueri Anda atau menggunakan ekspresi matematika. Jika kueri adalah kueri rentang, Anda harus terlebih dahulu menguranginya dari deret waktu menjadi vektor instan dengan ekspresi pengurangan.

Tetapkan tingkat keparahan dari nilai kueri

Untuk menetapkan label keparahan dari nilai kueri gunakan pernyataan if dan fungsi lebih besar dari perbandingan. Pastikan untuk menggunakan desimal (80.0,, 50.00.0, dll) saat melakukan perbandingan terhadap $values teks/templat tidak mendukung pemaksaan tipe. Anda dapat menemukan daftar semua fungsi perbandingan yang didukung di sini.

{{ if (gt $values.A.Value 80.0) -}} high {{ else if (gt $values.A.Value 50.0) -}} medium {{ else -}} low {{- end }}

Cetak semua label dari kondisi klasik

Anda tidak dapat menggunakan $labels untuk mencetak label dari kueri jika Anda menggunakan kondisi klasik, dan harus menggunakannya $values sebagai gantinya. Alasan untuk ini adalah kondisi klasik buang label ini untuk menegakkan perilaku uni-dimensi (paling banyak satu peringatan per aturan peringatan). Jika kondisi klasik tidak membuang label ini, maka kueri yang mengembalikan banyak deret waktu akan menyebabkan peringatan menutup antara penembakan dan diselesaikan terus-menerus karena label akan berubah setiap kali aturan peringatan dievaluasi.

Sebagai gantinya, $values variabel berisi nilai yang dikurangi dari semua deret waktu untuk semua kondisi yang menyala. Misalnya, jika Anda memiliki aturan peringatan dengan kueri A yang mengembalikan dua deret waktu, dan kondisi klasik B dengan dua kondisi, maka $values akan berisiB0,B1, B2 danB3. Jika kondisi klasik B hanya memiliki satu kondisi, maka $values akan berisi just B0 danB1.

Untuk mencetak semua label dari semua deret waktu pengaktifan, gunakan templat berikut (pastikan untuk mengganti B dalam ekspresi reguler dengan ID Ref dari kondisi klasik jika berbeda):

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Labels }}{{ end }} {{ end }}

Misalnya, kondisi klasik untuk dua deret waktu yang melebihi satu kondisi akan dicetak:

B0: instance=server1 B1: instance=server2

Jika kondisi klasik memiliki dua kondisi atau lebih, dan deret waktu melebihi beberapa kondisi pada saat yang sama, maka labelnya akan diduplikasi untuk setiap kondisi yang terlampaui:

B0: instance=server1 B1: instance=server2 B2: instance=server1 B3: instance=server2

Jika Anda perlu mencetak label unik, Anda harus mempertimbangkan untuk mengubah aturan peringatan Anda dari uni-dimensi ke multi-dimensi sebagai gantinya. Anda dapat melakukan ini dengan mengganti kondisi klasik Anda dengan ekspresi reduce dan matematika.

Cetak semua nilai dari kondisi klasik

Untuk mencetak semua nilai dari kondisi klasik, ambil contoh sebelumnya dan ganti $v.Labels dengan$v.Value:

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Value }}{{ end }} {{ end }}

Misalnya, kondisi klasik untuk dua deret waktu yang melebihi satu kondisi akan dicetak:

B0: 81.2345 B1: 84.5678

Jika kondisi klasik memiliki dua atau lebih kondisi, dan deret waktu melebihi beberapa kondisi pada saat yang sama, maka $values akan berisi nilai-nilai semua kondisi:

B0: 81.2345 B1: 92.3456 B2: 84.5678 B3: 95.6789

Variabel

Variabel berikut tersedia untuk Anda saat membuat template label dan anotasi:

Variabel label

$labelsVariabel berisi semua label dari kueri. Misalnya, Anda memiliki kueri yang mengembalikan penggunaan CPU untuk semua server Anda, dan Anda memiliki aturan peringatan yang diaktifkan ketika salah satu server Anda telah melebihi 80% penggunaan CPU selama 5 menit terakhir. Anda ingin menambahkan anotasi ringkasan ke peringatan yang memberi tahu Anda server mana yang mengalami penggunaan CPU tinggi. Dengan $labels variabel Anda dapat menulis template yang mencetak kalimat yang dapat dibaca manusia seperti:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes
catatan

Jika Anda menggunakan kondisi klasik maka tidak $labels akan berisi label apa pun dari kueri. Kondisi klasik membuang label ini untuk menegakkan perilaku uni-dimensi (paling banyak satu peringatan per aturan peringatan). Jika Anda ingin menggunakan label dari kueri di template Anda, ikuti contoh Print all labels sebelumnya dari kondisi klasik.

Variabel nilai

$valueVariabel adalah string yang berisi label dan nilai dari semua kueri instan; ambang batas, pengurangan dan ekspresi matematika, dan kondisi klasik dalam aturan peringatan. Ini tidak berisi hasil kueri rentang, karena ini dapat kembali dari 10 hingga 10.000 baris atau metrik. Jika ya, untuk kueri yang sangat besar, satu peringatan dapat menggunakan memori 10 MB dan Grafana akan kehabisan memori dengan sangat cepat.

Untuk mencetak $value variabel dalam ringkasan Anda akan menulis sesuatu seperti ini:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }}

Dan itu akan terlihat seperti ini:

CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ]

Di sini var='A' mengacu pada kueri instan dengan Ref ID A, labels={instance=instance1} mengacu pada label, dan value=81.234 mengacu pada penggunaan CPU rata-rata selama 5 menit terakhir.

Jika Anda ingin mencetak hanya beberapa string alih-alih string penuh maka gunakan $values variabel. Ini berisi informasi yang sama seperti$value, tetapi dalam tabel terstruktur, dan jauh lebih mudah digunakan kemudian menulis ekspresi reguler untuk mencocokkan hanya teks yang Anda inginkan.

Nilai variabel

$valuesVariabel adalah tabel yang berisi label dan nilai floating point dari semua kueri dan ekspresi instan, diindeks oleh ID Ref mereka.

Untuk mencetak nilai kueri instan dengan Ref ID A:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }}

Misalnya, diberi peringatan dengan label instance=server1 dan kueri instan dengan nilai81.2345, ini akan mencetak:

CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345

Jika kueri di Ref ID A adalah kueri rentang daripada kueri instan, tambahkan ekspresi pengurangan dengan Ref ID B dan ganti (index $values "A") dengan: (index $values "B")

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "B" }}

Fungsi

Fungsi-fungsi berikut tersedia untuk Anda saat membuat template label dan anotasi:

args

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

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

URL eksternal

externalURLFungsi mengembalikan URL eksternal dari server Grafana.

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

GraphLink

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

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

{{ humanize 1000.0 }}
1k

manusia1024

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

{{ humanize1024 1024.0 }}
1ki

HumanizeUrasi

humanizeDurationFungsi memanusiakan durasi dalam hitungan detik.

{{ humanizeDuration 60.0 }}
1m 0s

HumanizePersentase

humanizePercentageFungsi memanusiakan nilai rasio terhadap persentase.

{{ humanizePercentage 0.2 }}
20%

HumanizeTimestamp

humanizeTimestampFungsi ini memanusiakan stempel waktu Unix.

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

pertandingan

matchFungsi ini cocok dengan teks terhadap pola ekspresi reguler.

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

PathPrefix

pathPrefixFungsi mengembalikan jalur server Grafana.

{{ pathPrefix }}
/grafana

TableLink

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

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

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

ToLower

toLowerFungsi mengembalikan semua teks dalam huruf kecil.

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

TouPper

toUpperFungsi mengembalikan semua teks dalam huruf besar.

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

reReplaceAll

reReplaceAllFungsi menggantikan teks yang cocok dengan ekspresi reguler.

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