全部产品
Search
文档中心

Simple Log Service:Sintaks untuk template peringatan baru

更新时间:Jul 02, 2025

Fitur peringatan baru dari Simple Log Service mendukung sintaks yang digunakan oleh template peringatan baru dan lama. Topik ini menjelaskan sintaks yang digunakan oleh template peringatan baru.

Ikhtisar

Dibandingkan dengan template peringatan lama, template peringatan baru menggunakan sintaks mirip Python untuk menyediakan logika rendering kustom yang lebih fleksibel dan canggih, penyesuaian konten notifikasi yang dioptimalkan, serta penyesuaian gaya notifikasi yang dioptimalkan. Sebagai contoh, template peringatan baru dapat meloloskan karakter Markdown dalam notifikasi peringatan. Template peringatan baru menawarkan keuntungan berikut dibandingkan template peringatan lama:

  • Template peringatan baru dapat merender notifikasi peringatan secara dinamis berdasarkan tingkat keparahan peringatan dan menggunakan font berwarna berbeda untuk membedakan peringatan dengan tingkat keparahan yang berbeda.

  • Template peringatan baru dapat merender hasil kueri peringatan secara iteratif menjadi daftar atau tabel dalam email.

  • Template peringatan baru dapat memanggil fungsi untuk mengkodekan atau mendekode bidang dalam Base64 dan menjalankan operasi aritmatika pada nilai numerik.

Sintaks untuk template peringatan baru sepenuhnya kompatibel dan dapat digunakan bersama sintaks untuk template peringatan lama. Namun, sintaks untuk template peringatan baru menggunakan tipe, nilai, dan gaya yang berbeda untuk atribut peringatan dibandingkan sintaks untuk template peringatan lama. Oleh karena itu, kami menyarankan Anda untuk tidak menggunakan kedua sintaks secara bersamaan. Kami merekomendasikan penggunaan sintaks untuk template peringatan baru.

Panduan Cepat

Bagian ini memberikan contoh konten notifikasi yang dapat didefinisikan dalam template peringatan baru.

  • Konten Peringatan:

    {
        "alert_id": "test-alert",
        "alert_name": "PV/UV Alert",
        "project": "project-1",
        "status": "firing",
        "severity": 6,
        "labels": {
            "app": "nginx",
            "host": "host-1"
        },
        "results": [
            {
                "project": "project-1",
                "logstore": "logstore-1",
                "query": "* | select count(*) as pv"
            },
            {
                "project": "project-2",
                "logstore": "logstore-2",
                "query": "* | select count(distinct user_id) as uv"
            }
        ]
    }
  • Konfigurasi Template Peringatan:

    - Alert ID: {{ alert.alert_id }}
    - Alert Name: {{ alert.alert_name }}
    - Project: {{ alert.project }}
    - Status: {% if alert.status == "firing" %}FIRING{% else %}RESOLVED{% endif %}
    - Labels:
    {%- for key, val in alert.labels.items() %}
        - {{ key }}: {{ val }}
    {%- endfor %}
    - Query: {{ alert.results[0].query }}
  • Hasil Output:

    - Alert ID: test-alert
    - Alert Name: PV/UV Alert
    - Project: project-1
    - Status: FIRING
    - Labels:
        - app: nginx
        - host: host-1
    - Query: * | select count(*) as pv

Sintaks Dasar

Tipe Data

Tabel berikut menjelaskan tipe data yang didukung oleh sintaks mirip Python untuk template peringatan baru.

Tipe Data

Deskripsi

Nomor

Nomor yang didukung adalah bilangan bulat dan bilangan desimal. Contoh: 3 dan -1.

String

Setiap string harus diapit oleh sepasang tanda kutip tunggal ('') atau tanda kutip ganda (""). Contoh: "foo" dan 'bar'.

Jika string berisi karakter khusus, backslash (\) harus digunakan untuk meloloskan karakter khusus tersebut. Sebagai contoh, \foo harus diloloskan menjadi "\\foo".

Boolean

Nilai Boolean yang didukung adalah True dan False.

Null

None.

List

List bisa disebut sebagai array atau slice dalam bahasa pemrograman lain. Contoh: ['foo', 'bar'].

Dictionary

Dictionary bisa disebut sebagai objek dalam bahasa pemrograman lain. Contoh: {'foo': 'bar'}.

Delimeter

Delimeter

Skenario Penggunaan

Contoh

{{ }}

Digunakan untuk menandai awal dan akhir variabel atau ekspresi.

  • Nomor: {{ 123 }}

  • String: {{ "abc" }} or {{ 'xyz' }}

    Setiap string harus diapit oleh sepasang tanda kutip ganda ("") atau tanda kutip tunggal ('').

  • Variabel: {{ alert.alert_name }}

  • Ekspresi: {{ alert.project + '/' + alert.alert_id }}

{% %}

Digunakan untuk menandai awal dan akhir pernyataan.

{% if alert.status == 'firing' %}FIRING{% else %}RESOLVED{% endif %}

{# #}

Digunakan untuk menandai awal dan akhir komentar. Komentar tidak termasuk dalam konten notifikasi peringatan.

{# this is a comment #}

Penghapusan String Kosong

Secara default, ketika Anda menggunakan delimeter untuk menandai awal dan akhir ekspresi, Simple Log Service mengabaikan spasi antara delimeter dan ekspresi di dalam delimeter. Sebagai contoh, Simple Log Service merender baik {{ 23 }} < {{ 45 }} maupun {{23}} < {{45}} menjadi 23 < 45. Namun, Simple Log Service tetap mempertahankan string kosong seperti spasi, tab, dan line feed di luar delimeter. Sebagai contoh, Simple Log Service merender {{ 23 }} < {{ 45 }} menjadi 23 < 45, bukan 23<45.

Jika Anda ingin menghapus string kosong yang tidak perlu di sebelah kiri dan kanan delimeter, Anda dapat menambahkan tanda hubung (-) di sebelah kiri atau kanan delimeter. Sebagai contoh, Simple Log Service merender {{ 23 -}} < {{- 45 }} menjadi 23<45.

  • Delimeter {{-, {{%-, dan {#- digunakan untuk menghapus semua string kosong di sebelah kiri delimeter.

  • Delimeter -}}, -%}, dan -%} digunakan untuk menghapus semua string kosong di sebelah kanan delimeter.

Penting
  • Tidak ada spasi yang diizinkan antara tanda hubung (-) dan delimeter tempat tanda hubung (-) ditambahkan. Sebagai contoh, Simple Log Service menganggap tanda hubung (-) dalam {{- 3 }} valid dan merender angka tersebut menjadi 3. Namun, Simple Log Service menganggap tanda hubung (-) dalam {{ - 3 }} tidak valid dan merender angka tersebut menjadi -3.

  • Tanda hubung (-) hanya valid untuk spasi di luar delimeter dan tidak mempengaruhi spasi di dalam delimeter. Sebagai contoh, Simple Log Service merender {{ "hello " }} {{- "world"}} menjadi hello world.

Pernyataan Bersyarat

Alur kondisional digunakan untuk mengevaluasi nilai parameter dan hasil ekspresi logika. Simple Log Service dapat merender data berdasarkan alur kondisional.

  • Jika klausa if diikuti oleh konstanta atau variabel biasa, Simple Log Service mengevaluasi konstanta atau nilai variabel biasa menjadi true atau false. Simple Log Service mengevaluasi semua nilai Boolean false, angka 0, string kosong "", nilai kosong null, array kosong [], dan objek kosong {} menjadi false dan mengevaluasi semua nilai lainnya menjadi true.

  • Jika klausa if diikuti oleh ekspresi logika, Simple Log Service mengevaluasi hasil ekspresi logika menjadi true atau false. Sebagai contoh, {{ if alert.severity >= 8 }} digunakan untuk mengevaluasi apakah tingkat keparahan peringatan lebih besar dari atau sama dengan 8.

Tabel berikut menjelaskan alur kondisional yang didukung oleh template peringatan baru.

Alur Kontrol

Contoh

if

{% if alert.severity >= 8 %}
Critical alert
{% endif %}

if-else

{% if alert.severity >= 8 %}
Critical alert
{% else %}
Normal alert
{% endif %}

if-elif

{% if alert.severity >= 8 %}
Critical alert
{% elif alert.severity >= 4 %}
Normal alert
{% endif %}

if-elif-else

{% if alert.severity >= 8 %}
Critical alert
{% elif alert.severity >= 4 %}
Normal alert
{% else %}
Notification
{% endif %}

Pernyataan Bersarang

{% if alert.severity >= 8 %}
Critical alert
{% else %}
{% if alert.severity >= 4 %}
Normal alert
{% else %}
Notification
{% endif %}
{% endif %}

Iterasi

Pernyataan loop digunakan untuk melakukan operasi iteratif pada array dan objek. Tabel berikut menjelaskan pernyataan loop yang didukung oleh template peringatan baru.

Pernyataan Loop

Contoh

Pernyataan loop pada array

{% for result in alert.results %}
{{ result }}
{% endfor %}

Pernyataan loop dengan subskrip pada array

Fungsi enumerate digunakan untuk melakukan operasi iteratif pada subskrip array. Untuk informasi lebih lanjut tentang fungsi enumerate, lihat Fungsi bawaan dalam template peringatan.

{% for index, result in enumerate(alert.results) %}
{{ index }}: {{ result }}
{% endfor %}

Subskrip dimulai pada posisi 0 secara default. Anda dapat menggunakan parameter start dalam fungsi enumerate untuk menentukan subskrip awal dan subskrip akhir. Contoh:

{% for index, result in enumerate(alert.results, start=1) %}
{{ index }}: {{ result }}
{% endfor %}

Pernyataan loop pada objek

Fungsi items() digunakan untuk mengubah objek secara iteratif menjadi array pasangan key-value dalam format Key:Value.

{% for key, val in alert.labels.items() %}
{{ key }}: {{ val }}
{% endfor %}

Pernyataan Bersarang

{% for result in alert.fire_results %}
{% for key, val in result.items() %}
{{ key }}: {{ val }}
{% endfor %}
{% endfor %}

Karakter Pelolosan

Jika Anda tidak ingin Simple Log Service mem-parsing atau merender string seperti {{ yang terdiri dari karakter khusus, Anda dapat meloloskan string tersebut. Sebagai contoh, konfigurasi template peringatan berikut menentukan untuk mempertahankan semua konten antara {% raw %} dan {% endraw %}:

  • Konfigurasi Template Peringatan

    {% raw %}
    {% for result in alert.results %}
    {{ result }}
    {% endfor %}
    {% endraw %}
  • Hasil

    {% for result in alert.results %}
    {{ result }}
    {% endfor %}

Fungsi

Template peringatan menyediakan fungsi bawaan. Anda dapat menggunakan fungsi bawaan untuk mengonfigurasi format dan gaya notifikasi peringatan secara fleksibel. Untuk informasi lebih lanjut, lihat Fungsi Bawaan dalam Template Peringatan.

Sebagai contoh, jika Anda ingin Simple Log Service mendorong notifikasi peringatan dalam format JSON menggunakan URL webhook, Anda harus menentukan konfigurasi template peringatan berikut:

  • Pernyataan kueri dengan baris baru termasuk

    * |
    select count(*) as cnt
  • Perbandingan antara konfigurasi template peringatan yang berbeda

    Item

    Template Peringatan

    Hasil

    Catatan

    Tidak ada fungsi yang digunakan

    {
        "query": "{{ alert.results[0].query }}"
    }
    {
        "query": "* |
    select count(*) as pv"
    }

    Format JSON tidak valid.

    Fungsi quote digunakan

    {
        "query": {{ quote(alert.results[0].query) }}
    }
    {
        "query": "* | \nselect count(*) as pv"
    }

    Format JSON valid.

Filter

Jika fungsi bersarang seperti {{ block(to_list(alert.labels)) }} digunakan, pengeditan konten notifikasi menjadi rumit. Dalam situasi ini, Anda dapat menggunakan filter untuk mengedit konten notifikasi. Filter menggunakan tanda vertikal (|) sebagai operator dan dapat dipanggil menggunakan method chaining. Pada sebagian besar kasus, Anda dapat menentukan filter dalam format {{ xxx | filiter1 | filter2 | ... }}. Sebagai contoh, {{ blockquote(to_list(alert.labels)) }} setara dengan {{ alert.labels | to_list | blockquote }}.

Sebelum menentukan filter dalam fungsi bawaan, Anda harus memeriksa apakah fungsi bawaan tersebut mendukung filter. Sebagian besar fungsi bawaan yang tersedia dalam template peringatan baru mendukung filter. Untuk informasi lebih lanjut, lihat Fungsi Bawaan dalam Template Peringatan.

Penting
  • Jika tidak ada parameter yang ditentukan dalam fungsi bawaan, Anda tidak dapat menentukan filter dalam fungsi bawaan tersebut.

  • Jika hanya satu parameter yang ditentukan dalam fungsi bawaan, kami sarankan Anda menentukan filter dalam fungsi bawaan tersebut. Dalam situasi ini, fungsi bawaan berada dalam format {{ arg | fn }}. Sebagai contoh, {{ abs(-1) }} setara dengan {{ -1 | abs }}.

  • Jika beberapa parameter ditentukan dalam fungsi bawaan dan semua parameter yang ditentukan kecuali parameter pertama dapat diatur ke nilai default, Anda dapat menentukan filter dalam fungsi bawaan tersebut. Jika beberapa parameter ditentukan dalam fungsi bawaan dan Anda ingin menentukan nilai untuk setiap parameter, kami sarankan Anda tidak menentukan filter dalam fungsi bawaan tersebut.

Operator

Tabel berikut menjelaskan operator yang didukung oleh template peringatan baru. Untuk informasi lebih lanjut tentang prioritas operator, lihat Prioritas Operator.

Kategori

Operator

Deskripsi

Operasi Aritmatika

+

Menjalankan operasi penambahan.

-

Menjalankan operasi pengurangan.

*

Menjalankan operasi perkalian.

/

Menjalankan operasi pembagian. Nilai kembali adalah bilangan desimal.

//

Menjalankan operasi pembagian. Nilai kembali adalah bilangan bulat.

%

Menjalankan operasi modulo.

Operasi Perbandingan

==

Mengevaluasi apakah suatu nilai sama dengan nilai lainnya.

!=

Mengevaluasi apakah suatu nilai tidak sama dengan nilai lainnya.

>

Mengevaluasi apakah suatu nilai lebih besar dari nilai lainnya.

>=

Mengevaluasi apakah suatu nilai lebih besar dari atau sama dengan nilai lainnya.

<

Mengevaluasi apakah suatu nilai lebih kecil dari nilai lainnya.

<=

Mengevaluasi apakah suatu nilai lebih kecil dari atau sama dengan nilai lainnya.

Operasi Logika

and

Menentukan hubungan AND.

or

Menentukan hubungan OR.

not

Menentukan hubungan NOT IN.

Operasi Lainnya

in

Mengevaluasi apakah suatu nilai termasuk dalam nilai lainnya dan mengembalikan nilai Boolean. Nilai yang Anda tentukan bisa berupa array, objek, atau string.

  • Array: {{ 1 in [1, 2, 3] }}

  • Objek: {{ "foo" in {"foo": "bar" } }}

  • String: {{ "ll" in "hello" }}

()

Menentukan kombinasi operasi. Contoh: {{ a > b and (a > c or b > c) }}.

Variabel Peringatan

Dalam template peringatan baru, variabel peringatan berada dalam format alert.xxx. Sebagai contoh, variabel alert.project adalah variabel peringatan yang valid. Untuk informasi lebih lanjut, lihat Variabel dalam Template Peringatan (Versi Baru).

Contoh Konfigurasi

  • Contoh 1: Menampilkan informasi tentang setiap peringatan berdasarkan status peringatan.

    Setelah peringatan dipicu, informasi seperti status, tingkat keparahan, dan hasil peringatan disediakan. Ketika peringatan dihapus, hanya status peringatan yang disediakan.

    • Konfigurasi template peringatan berikut tidak termasuk fungsi:

      {% if alert.status == "firing" %}
      - Status: <font color="#E03C39">Firing</font>
      - Tingkat Keparahan: {{ alert.severity | format_severity }}
      - Hasil: {{ alert.results | to_json }}
      {% else %}
      - Status: <font color="#72C140">Cleared</font>
      {% endif %}
    • Konfigurasi template peringatan berikut mencakup fungsi:

      Fungsi format_status dan fungsi format_severity digunakan untuk menyederhanakan konfigurasi template peringatan:

      - Status: {{ alert.status | format_status }}
      {% if alert.status == "firing" %}
      - Tingkat Keparahan: {{ alert.severity | format_severity }}
      - Hasil: {{ alert.results | to_json }}
      {% endif %}
  • Contoh 2: Menampilkan informasi tentang setiap peringatan dalam format terstruktur.

    Label setiap peringatan dikonversi menjadi array dalam format Markdown.

    • Konfigurasi template peringatan berikut tidak termasuk fungsi:

      - Proyek: {{ alert.project }}
      - Nama Peringatan: {{ alert.alert_name }}
      - Label:
      {%- for key, val in alert.labels.items() %}
      > - {{ key }}: {{ val }}
      {%- endfor %}
    • Konfigurasi template peringatan berikut mencakup fungsi:

      Fungsi to_list dan fungsi blockquote digunakan untuk menyederhanakan konfigurasi template peringatan.

      - Proyek: {{ alert.project }}
      - Nama Peringatan: {{ alert.alert_name }}
      - Label:
      {{ alert.labels | to_list | blockquote }}