Simple Log Service (SLS) menggunakan DSL berbasis Python dan menyediakan lebih dari 200 fungsi bawaan untuk menyederhanakan tugas transformasi data. Topik ini menjelaskan mode bahasa, kategori fungsi, dan prinsip eksekusi DSL.
Mode bahasa
SLS DSL kompatibel dengan Python. Dalam mode standar, SLS DSL merupakan subset dari Python. Selain struktur data dasar dan ekspresi, semua aturan sintaks lainnya diimplementasikan melalui fungsi.
Kategori | Sintaks Python | Mode standar |
Data structure | Number, string, dan Boolean | Didukung. String yang diawali atau diakhiri dengan |
Tuple, list, set, dan dictionary | Didukung. Struktur | |
Object | Hanya struktur data ekstensi bawaan seperti objek table dan datetime yang didukung. | |
Basic syntax | Operator seperti tanda plus (+), tanda minus (-), tanda perkalian (×), dan operator pembagian (/) | Hanya operator perbandingan, seperti |
Comments | Didukung. | |
Variable assignment | Tidak didukung. Nilai harus diteruskan melalui pemanggilan fungsi. | |
Prerequisites | Didukung. Fungsi: e_if, e_if_else, dan e_switch. | |
Loops | Didukung secara tidak langsung. Anda harus menggunakan fungsi bawaan bersarang untuk mengimplementasikan loop. Contoh fungsi berikut menunjukkan cara melakukan traversal elemen dalam array: | |
Function | Standard built-in functions of Python | Tidak didukung. Sebagai gantinya, Anda dapat menggunakan lebih dari 200 fungsi bawaan yang disediakan oleh SLS DSL. |
Function calls | Didukung. Pemanggilan fungsi yang menggunakan parameter unpacking tidak didukung. | |
User-defined functions seperti def atau lambda | Tidak didukung. Namun, tersedia lebih dari 200 fungsi operasi global dan ekspresi yang dapat Anda panggil dalam kombinasi apa pun. | |
Module | Import dan penggunaan pustaka standar Python | Tidak didukung. |
Creation of threads and processes | Tidak didukung. | |
Import pustaka pihak ketiga | Tidak didukung. | |
Koneksi jaringan eksternal atau pemanggilan perintah eksternal | Mencakup konektor resource bawaan. |
Kategori fungsi
Dalam mode standar, SLS DSL melakukan semua operasi dengan memanggil fungsi. DSL menyediakan lebih dari 200 fungsi bawaan, yang dikategorikan menjadi fungsi pemrosesan global dan fungsi ekspresi.
Fungsi pemrosesan global
Fungsi pemrosesan global digunakan untuk menerima, memproses, dan mengembalikan log. Hanya fungsi pemrosesan global yang dapat digunakan untuk menyusun setiap langkah dalam aturan transformasi.
Fungsi ekspresi
Fungsi tujuan umum menerima parameter tertentu. Memanggilnya dalam kombinasi dan meneruskannya sebagai parameter ke fungsi operasi global mendefinisikan logika yang lebih fleksibel.
Tabel berikut membandingkan kemampuan kedua jenis fungsi tersebut.
Jenis fungsi | Langkah keseluruhan | Terima | Mengembalikan | Modifikasi log | Pemanggilan gabungan |
Global Operations and Functions | Dukungan | Log diterima secara otomatis | Nol hingga beberapa log | Didukung dalam sebagian besar kasus | Dukungan |
Expression functions | Tidak didukung | Hanya beberapa fungsi yang mendukung pemrosesan log langsung. | Struktur data tertentu | Tidak didukung | Dukungan |
Fungsi pemrosesan global
Fungsi untuk menerima dan mengembalikan log.
Hanya fungsi pemrosesan global yang dapat ditempatkan di baris pertama setiap langkah.
Aturan transformasi dalam SLS DSL menggunakan sintaks berikut:
GlobalFunction1(..parameters....)
GlobalFunction2(..parameters....)
GlobalFunction3(..parameters....)
GlobalFunction4(..parameters....)Fungsi pemrosesan global terbagi menjadi dua kategori:
Klasifikasi fungsional | Deskripsi | Contoh |
Flow control functions | Fungsi ini mengelola alur proses, menerima log, dan secara kondisional memanggil fungsi lain untuk memproses log. |
|
Event processing functions | Fungsi ini mentransformasi log dan mengembalikan nol hingga beberapa log. | Berikut adalah contoh fungsi:
|
Logika transformasi:
Pemrosesan dasar
Fitur transformasi data membaca data dari Logstore sumber secara streaming. Fitur ini meneruskan setiap log sebagai dictionary ke aturan transformasi. Sistem kemudian memproses data log secara berurutan sesuai fungsi yang didefinisikan dalam aturan tersebut. Terakhir, sistem mengeluarkan hasil transformasi ke Logstore tujuan.
CatatanSemua field dan nilai log dikirim sebagai string. Misalnya, log mentah
{"__time__": "1234567", "__topic__": "", "k1": "test"}diproses oleh fungsie_set("f1", 200). Fungsi ini menambahkan fieldf1dengan nilai 200. Setelah diproses, log menjadi{"__time__": "1234567", "__topic__": "", "k1": "test", "f1": "200"}. Dalam log ini, baik fieldf1maupun nilai 200 berupa string.Fungsi pemrosesan event yang ditentukan dalam aturan transformasi dipanggil secara berurutan. Setiap fungsi menerima log, memprosesnya, lalu mengembalikan log yang telah diproses.
Misalnya, fungsi
e_set("type", "test")menambahkan fieldtypedengan nilai test ke log. Fungsi berikutnya menerima dan memproses log yang telah dimodifikasi tersebut.Evaluasi kondisi
e_if: Fungsi e_if memungkinkan Anda menambahkan ekspresi kondisional untuk memproses log. Jika log tidak memenuhi kondisi yang ditentukan, operasi terkait dilewati. Fungsi e_if mengimplementasikan logika
if.Misalnya, fungsi
e_if(e_match("status", "200"), e_regex("data", "ret: \d+", "result"))memeriksa apakah nilai fieldstatusadalah 200. Jika benar, fungsi mengekstraksi fieldresultdari fielddatamenggunakan ekspresi reguler yang ditentukan. Jika tidak, tidak ada operasi yang dilakukan.e_if_else: Fungsi ini bekerja mirip dengan operasiif_else.
Penghentian pemrosesan
Langkah dalam aturan transformasi mungkin tidak mengembalikan log, yang menandakan bahwa log tersebut telah dihapus.
Misalnya, fungsi
e_if(str_islower(v("result")), e_drop())memeriksa apakah nilai fieldresultberupa string huruf kecil. Jika benar, log dibuang dan langkah selanjutnya tidak dilakukan pada log ini. Sistem secara otomatis memproses log berikutnya.Menulis log ke Logstore tujuan menghentikan pemrosesan. Misalnya, jika fungsi
e_outputmenulis log ke Logstore tujuan dan menghapusnya, langkah selanjutnya tidak dilakukan pada log ini.CatatanFungsi
e_coutputmenyalin log output dan melanjutkan pemrosesan langkah-langkah berikutnya.
Pemisahan paralel:
Langkah dalam aturan transformasi mungkin mengembalikan beberapa log, yang menandakan bahwa log tersebut telah dipisah.
Misalnya, fungsi
e_split(data)memisahkan log menjadi dua log berdasarkan nilai fielddata. Jika nilai fielddataadalah"abc, xyz", log tersebut dipisah menjadi dua log. Di satu log, nilai fielddataadalah abc. Di log lainnya, nilainya adalah xyz.Log yang dihasilkan setelah pemisahan diproses dalam langkah-langkah berikutnya.
Untuk informasi lebih lanjut, lihat Global operation functions.
Fungsi ekspresi
Selain fungsi pemrosesan global, SLS DSL menyediakan 200 fungsi ekspresi yang menerima parameter tertentu dan mengembalikan nilai tertentu. Panggil fungsi ekspresi atau kombinasi fungsi ekspresi di dalam fungsi pemrosesan global. Sintaksnya sebagai berikut:
Global Processing Function 1(Expression Function 1(...), ...)
Global Processing Function 2(..., Expression Function 2(...), Expression Function 3(...), ...)Fungsi ekspresi terbagi menjadi empat kategori:
Klasifikasi Fungsional | Deskripsi | Contoh |
Event check functions | Fungsi ini menerima log, mengekstraksi atau mengambil informasi tertentu, dan mengembalikan informasi tersebut tanpa memodifikasi log. | Fungsi |
Resource functions | Fungsi ini terhubung ke resource on-premises atau eksternal, menggunakan pengaturan parameter tertentu, dan mengembalikan data seperti dictionary atau tabel. | Fungsi resource OSS, RDS, dan Logstore. |
Control functions | Fungsi ini melakukan operasi logika pada ekspresi. Fungsi ini menggunakan parameter tertentu, menerapkan kontrol kondisional, dan memanggil fungsi ekspresi lain untuk mengembalikan hasil. |
|
Other expression functions | Fungsi ini menerima nilai tetap atau hasil pemanggilan fungsi lain dan mengembalikan nilai tertentu. | Fungsi string, tanggal dan waktu, serta konversi tipe. |
Untuk informasi lebih lanjut, lihat Expression functions.