Topik ini menjelaskan sintaksis dasar dari bahasa domain-spesifik (DSL) untuk Simple Log Service.
Komentar
Mulailah komentar pada langkah dengan tanda pagar (#). Contoh:
# Tentukan topik default. Ini adalah komentar di awal langkah.
e_set("__topic__", "access_log") # Tentukan topik default. Ini adalah komentar di akhir langkah. Pemisahan baris
Jika daftar parameter atau string suatu fungsi tidak muat dalam satu baris, Anda dapat memisahkan daftar parameter atau string tersebut.
Jika daftar parameter berisi koma (,), Anda dapat membagi daftar parameter tepat setelah koma (,).
Untuk memisahkan string, gunakan garis miring terbalik (\) untuk menunjukkan bahwa string berlanjut ke baris berikutnya.
Contoh:
e_set("__topic__", "v1",
"type", "v2", # Gunakan koma (,) sebagai pemisah baris.
"length", 100)
e_set("__topic__", "this is a very long long long .........." \
"......long text") # Gunakan garis miring terbalik (\) sebagai pemisah baris. Pemanggilan Fungsi
Memanggil fungsi dasar
e_set("abc", "xyz")CatatanSaat menulis pernyataan transformasi data, tipe data dan jumlah parameter yang dilewatkan ke suatu fungsi harus sesuai dengan sintaksis fungsi tersebut.
Melewatkan parameter variabel dasar
str_replace(value, old [,new [,count] ])CatatanParameter yang diapit dalam tanda kurung siku [] bersifat opsional. Sebagai contoh, parameter
newdancountdalam fungsi sebelumnya bersifat opsional. Parameter ini tidak dapat dilewatkan seperti parameter bernama, melainkan harus dilewatkan secara berurutan.# Contoh tidak valid str_replace("a-b-c", "-", new='%') str_replace("a-b-c", "-", new='%', count=1) # Contoh valid str_replace("a-b-c", "-", '%') str_replace("a-b-c", "-", '%', 2)Melewatkan parameter bernama
Parameter yang memiliki nilai default disebut parameter bernama. Sebagai contoh, parameter
modedalam fungsie_set("abc", "xyz", mode="fill")adalah parameter bernama.Anda harus melewatkan nilai parameter bernama dalam fungsi tertentu berdasarkan kondisi tertentu. Untuk informasi lebih lanjut, lihat deskripsi parameter setiap fungsi.
Anda dapat melewatkan nilai parameter bernama saat mengonfigurasi parameter dalam format
mode=....Anda dapat melewatkan beberapa parameter bernama dalam urutan acak. Sebagai contoh,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")setara dengane_csv("data", ["f1", "f2", "f3"], quote="|", sep='#').
CatatanParameter bernama harus mengikuti parameter non-bernama.
Memanggil kombinasi fungsi
Anda dapat melewatkan hasil dari suatu fungsi sebagai nilai parameter ke fungsi lain. Pastikan bahwa hasil tersebut memiliki tipe data yang sama dengan nilai parameter. Contoh:
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz")))Parameter variabel
Anda dapat melewatkan parameter variabel ke fungsi tertentu. Fungsi
v("f1", ....)menentukan bahwa beberapa parameter dapat dilewatkan. Contoh:v("f1", "f2", "f3").Jika Anda perlu melewatkan parameter variabel dan parameter bernama, letakkan parameter bernama setelah parameter variabel. Contoh:
v("f1", "f2", "f3", "f4", mode="fill").
Operator
Operator Perbandingan
Operator perbandingan berikut didukung dalam DSL untuk Simple Log Service:
>, <, >=, <=, !=, ==. Anda juga dapat menggunakan fungsi perbandingan yang disediakan oleh Simple Log Service untuk melakukan operasi tersebut.Menggunakan operator perbandingan
# Contoh berikut menunjukkan cara menggunakan operator perbandingan. Jika kondisi perbandingan dievaluasi menjadi True, log terkait akan dibuang. e_if(3 > 2, DROP) # Jika 3 lebih besar dari 2, log dibuang. e_if(3 < 2, DROP) # Jika 3 kurang dari 2, log dibuang. e_if(3 >= 2, DROP) # Jika 3 lebih besar dari atau sama dengan 2, log dibuang. e_if(3 <= 2, DROP) # Jika 3 kurang dari atau sama dengan 2, log dibuang. e_if(3 == 2, DROP) # Jika 3 sama dengan 2, log dibuang. e_if(3 != 2, DROP) # Jika 3 tidak sama dengan 2, log dibuang. e_if(1 < 2 < 3, DROP) # Jika 2 lebih besar dari 1 dan 2 kurang dari 3, log dibuang. e_if(0 < ct_int(v('x')) < 100, DROP) # Jika nilai bidang x lebih besar dari 0 dan kurang dari 100, log dibuang.Menggunakan fungsi perbandingan yang disediakan oleh Simple Log Service
Operasi
Fungsi
Contoh
Sama dengan (
==)op_eq
op_eq(v("name"), "xiao ming")Tidak sama dengan (
!op_ne
op_ne(v("name"), "xiao ming")Lebih besar dari (
>)op_gt
op_gt(ct_int(v("age")), )Lebih besar dari atau sama dengan (
>=)op_ge
op_ge(ct_int(v("age")), 18)Kurang dari (
<)op_lt
op_lt(ct_int(v("age")), 18)Kurang dari atau sama dengan (
<=)op_le
op_le(ct_int(v("age")), 18)
Operator Logika
Operator logika berikut didukung dalam DSL untuk Simple Log Service dalam mode standar: AND, OR, dan NOT. Anda juga dapat menggunakan fungsi logika yang disediakan oleh Simple Log Service untuk melakukan operasi tersebut.
Menggunakan operator logika
# Contoh berikut menunjukkan cara menggunakan operator logika. Jika kondisi logika dievaluasi menjadi True, log terkait akan dibuang. e_if(True and False, DROP) # Mengembalikan False. e_if(True or False, DROP) # Mengembalikan True. e_if(True and not False, DROP) # Mengembalikan True. e_if(3 > 2 and 1 < 3, DROP) # Mengembalikan True. e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # Jika nilai bidang x lebih besar dari 100 atau nilai bidang y kurang dari 100, mengembalikan True.Menggunakan fungsi logika yang disediakan oleh Simple Log Service
Operasi
Fungsi
Contoh
Operator logika AND (
and)op_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))Operator logika OR (
or)op_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))Operator logika NOT (
not)op_not
op_not(op_gt(v("age"), 18))
Operator Lainnya
Beberapa operator DSL tidak dapat digunakan langsung dalam mode standar. Simple Log Service menyediakan fungsi yang dapat digunakan untuk melakukan operasi tersebut. Tabel berikut menjelaskan operator dan fungsi tersebut.
Operasi
Fungsi
Contoh
Penambahan (
+)op_add
op_add(v("age"), 2)Pengurangan (
-)op_sub
op_sub(v("age"), 2)Perkalian (
*)op_mul
op_mul(v("size"), 2)Eksponensiasi (
**)op_pow
op_pow(v("size"), 2)Pembagian lantai (
//)op_div_floor
op_div_floor(v("bytes"), 1024)Modulus (
%)op_mod
op_mod(v("age"), 10)Negasi (
-)op_neg
op_neg(v("profit"))Pemeriksaan keberadaan (
in)op_in
op_in(["pass", "ok"], v("result"))Pemeriksaan ketiadaan (
not in)op_not_in
op_not_in(["pass", "ok"], v("result"))Pemotongan string (
[ ...])op_slice
op_slice(v("message"), 0, 20)Dalam contoh ini, nilai bidang
aadalah 3600 * 6. Contoh berikut menunjukkan fungsi tidak valid dan valid untuk menentukan nilai bidang tersebut.# * e_set("a", 3600 * 6) # Tidak valid e_set("a", op_mul(3600, 6)) # Valid # / e_set("bytes_kb", v("bytes") / 1024) # Tidak valid e_set("bytes_kb", op_div_floor(v("bytes"), 1024)) # Valid
Evaluasi Benar atau Salah
Beberapa fungsi memeriksa apakah suatu kondisi benar atau salah untuk menentukan logika pemrosesan peristiwa. Kondisi bisa berupa nilai tetap atau nilai yang dikembalikan oleh fungsi ekspresi.
Anda dapat melakukan evaluasi benar atau salah untuk semua jenis data dalam DSL untuk pengaturan Simple Log Service. Tabel berikut menjelaskan aturan untuk evaluasi benar atau salah.
Tipe Data | Benar | Salah |
Boolean | True, true | False, false |
None | Tidak tersedia | Selalu salah |
Numerik | Bukan 0 atau 0.0 | 0 atau 0.0 |
String | Tidak kosong | String kosong |
Bytes | Tidak kosong | Bytes kosong |
Tuple | Tidak kosong | Tuple kosong |
List | Tidak kosong | List kosong |
Dictionary | Tidak kosong | Dictionary kosong |
Tabel | Satu atau lebih tabel ada | Tidak ada tabel |
Datetime | Satu atau lebih objek datetime ada | Tidak ada objek datetime |
Fungsi berikut dapat digunakan untuk membuang log berdasarkan kondisi:
e_if(True, DROP) # Jika nilai parameter pertama adalah True, log dibuang.
e_if(1, DROP) # Jika nilai parameter pertama adalah 1, log dibuang.
e_if(v("abc"), DROP) # Jika bidang abc ada dan nilai bidang ini tidak kosong, log dibuang.
e_if(str_isdigit(v("abc")), DROP) # Jika bidang abc ada dan nilai bidang ini hanya berisi digit, log dibuang.