

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="v9-alerting-explore-labels-templating"></a>

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

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
<a name="v9-alerting-explore-labels-templating-go"></a>

[Template untuk label dan anotasi ditulis dalam bahasa template Go, teks/template.](https://pkg.go.dev/text/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 menjadi`test`.

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

## Label, nilai dan nilai variabel
<a name="v9-alerting-explore-labels-templating-variables"></a>

**Variabel label**

`$labels`Variabel 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 dipanggil`name`. `$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**

`$value`Variabel 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
<a name="v9-alerting-explore-labels-templating-classic"></a>

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
<a name="v9-alerting-explore-labels-templating-functions"></a>

Fungsi-fungsi berikut juga tersedia saat memperluas 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.

**Contoh**

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

```
1 2
```

**URL eksternal**

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

**Contoh**

```
{{ externalURL }}
```

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

**GraphLink**

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

`humanize`Fungsi memanusiakan angka desimal.

**Contoh**

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

```
1k
```

**manusia1024**

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

**Contoh**

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

```
1ki
```

**HumanizeUrasi**

`humanizeDuration`Fungsi memanusiakan durasi dalam hitungan detik.

**Contoh**

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

```
1m 0s
```

**HumanizePersentase**

`humanizePercentage`Fungsi memanusiakan nilai rasio terhadap persentase.

**Contoh**

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

```
20%
```

**HumanizeTimestamp**

`humanizeTimestamp`Fungsi ini memanusiakan stempel waktu Unix.

**Contoh**

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

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

**pertandingan**

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

**Contoh**

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

```
true
```

**PathPrefix**

`pathPrefix`Fungsi mengembalikan path dari server Grafana seperti yang dikonfigurasi dalam file ini (s).

**Contoh**

```
{{ pathPrefix }}
```

```
/grafana
```

**TableLink**

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

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

**Contoh**

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

```
Hello, World!
```

**ToLower**

`toLower`Fungsi mengembalikan semua teks dalam huruf kecil.

**Contoh**

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

```
hello, world!
```

**TouPper**

`toUpper`Fungsi mengembalikan semua teks dalam huruf besar.

**Contoh**

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

```
HELLO, WORLD!
```

**reReplaceAll**

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

**Contoh**

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

```
example.com:8080
```