

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

# Templating label dan anotasi
<a name="v10-alerting-overview-labels-templating"></a>

****  
**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](using-grafana-v9.md)  
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. [Bekerja di Grafana versi 8](using-grafana-v8.md)

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](https://pkg.go.dev/text/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
<a name="v10-alerting-overview-labels-templating-examples"></a>

Daripada menulis tutorial lengkap tentang text/template, the following examples attempt to show the most common use-cases we have seen for templates. You can use these examples verbatim, or adapt them as necessary for your use case. For more information about how to write text/template melihat dokumentasi [teks/template](https://pkg.go.dev/text/template).

**Cetak semua label, dipisahkan koma**

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

```
{{ $labels }}
```

Misalnya, diberi peringatan dengan label`alertname=High CPU usage`, `grafana_folder=CPU alerts` dan`instance=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 \$1labels](#v10-alerting-overview-labels-templating-the-labels-variable) untuk informasi lebih lanjut.

**Cetak semua label, satu per baris**

Untuk mencetak semua label, satu per baris, gunakan a `range` untuk mengulangi setiap key/value pasangan 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 label`alertname=High CPU usage`, `grafana_folder=CPU alerts` dan`instance=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 \$1labels](#v10-alerting-overview-labels-templating-the-labels-variable) 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 label`instance=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 \$1labels](#v10-alerting-overview-labels-templating-the-labels-variable) 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.0``0.0`, dll) saat melakukan perbandingan terhadap `$values` as text/template tidak mendukung pemaksaan tipe. Anda dapat menemukan daftar semua fungsi perbandingan yang didukung [di sini](https://pkg.go.dev/text/template#hdr-Functions).

```
{{ 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 berisi`B0`,`B1`, `B2` dan`B3`. Jika kondisi klasik B hanya memiliki satu kondisi, maka `$values` akan berisi just `B0` dan`B1`.

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
<a name="v10-alerting-overview-labels-templating-variables"></a>

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

### Variabel label
<a name="v10-alerting-overview-labels-templating-the-labels-variable"></a>

`$labels`Variabel 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
<a name="v10-alerting-overview-labels-templating-the-value-variable"></a>

`$value`Variabel 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 detik dan Grafana akan kehabisan memori dengan sangat cepat. MBs 

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.

### Variabel nilai
<a name="v10-alerting-overview-labels-templating-the-values-variable"></a>

`$values`Variabel adalah tabel yang berisi label dan nilai floating point dari semua kueri dan ekspresi instan, diindeks oleh Ref mereka. IDs

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 nilai`81.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
<a name="v10-alerting-overview-labels-templating-functions"></a>

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

**args**

`args`Fungsi 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**

`externalURL`Fungsi mengembalikan URL eksternal dari server Grafana.

```
{{ externalURL }}
```

```
https://example.com/grafana
```

**GraphLink**

`graphLink`Fungsi mengembalikan path ke tampilan grafis [Jelajahi di Grafana versi 10](v10-explore.md) 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**

`humanize`Fungsi memanusiakan angka desimal.

```
{{ humanize 1000.0 }}
```

```
1k
```

**manusia1024**

`humanize1024`Karya-karya yang mirip dengan `humanize` tetapi menggunakan 1024 sebagai basis daripada 1000.

```
{{ humanize1024 1024.0 }}
```

```
1ki
```

**HumanizeUrasi**

`humanizeDuration`Fungsi memanusiakan durasi dalam hitungan detik.

```
{{ humanizeDuration 60.0 }}
```

```
1m 0s
```

**HumanizePersentase**

`humanizePercentage`Fungsi memanusiakan nilai rasio terhadap persentase.

```
{{ humanizePercentage 0.2 }}
```

```
20%
```

**HumanizeTimestamp**

`humanizeTimestamp`Fungsi ini memanusiakan stempel waktu Unix.

```
{{ humanizeTimestamp 1577836800.0 }}
```

```
2020-01-01 00:00:00 +0000 UTC
```

**pertandingan**

`match`Fungsi ini cocok dengan teks terhadap pola ekspresi reguler.

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

```
true
```

**PathPrefix**

`pathPrefix`Fungsi mengembalikan jalur server Grafana.

```
{{ pathPrefix }}
```

```
/grafana
```

**TableLink**

`tableLink`Fungsi mengembalikan path ke tampilan tabular [Jelajahi di Grafana versi 10](v10-explore.md) 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**

`title`Fungsi ini mengkapitalisasi karakter pertama dari setiap kata.

```
{{ title "hello, world!" }}
```

```
Hello, World!
```

**ToLower**

`toLower`Fungsi mengembalikan semua teks dalam huruf kecil.

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

```
hello, world!
```

**TouPper**

`toUpper`Fungsi mengembalikan semua teks dalam huruf besar.

```
{{ toUpper "Hello, world!" }}
```

```
HELLO, WORLD!
```

**reReplaceAll**

`reReplaceAll`Fungsi menggantikan teks yang cocok dengan ekspresi reguler.

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

```
example.com:8080
```