Artikel ini menjelaskan penyebab kesalahan yang terkait dengan aturan transformasi data dan menyediakan solusi untuk menanganinya.
Setelah mesin transformasi data membaca data dari Logstore sumber, proses transformasi peristiwa log dimulai.
Selama transformasi, kesalahan logika dapat terjadi jika aturan transformasi tidak berlaku untuk semua peristiwa log.
Kesalahan juga dapat muncul selama pemuatan atau pembaruan data dari sumber eksternal seperti ApsaraDB RDS atau Logstores.
Artikel ini menjelaskan cara menyelesaikan kesalahan logika. Untuk informasi tentang penyelesaian kesalahan pemuatan sumber daya, lihat Bagaimana cara memperbaiki kesalahan penarikan data?.
Dampak kesalahan
Selama transformasi, peristiwa log yang bertentangan dengan aturan transformasi menghasilkan kesalahan. Kesalahan dikategorikan sebagai WARNING atau ERROR, yang diidentifikasi oleh bidang logging.levelname.
Untuk kesalahan tingkat ERROR, peristiwa log yang relevan dibuang. Proses transformasi dilanjutkan tanpa percobaan ulang, dan hasil transformasi tidak mencakup peristiwa log tersebut.
Untuk kesalahan tingkat WARNING, data tidak ditransformasikan dalam bahasa domain-spesifik (DSL) saat ini. Sebagai contoh, jika peristiwa log tidak sesuai dengan ekspresi reguler yang ditentukan, langkah berikutnya akan dijalankan.
Solusi
Periksa bidang
logging.levelnamepada log kesalahan untuk menentukan tingkat kesalahan.Periksa bidang
messageuntuk menemukan lokasi peristiwa log kesalahan. Untuk detail lebih lanjut, lihat Lihat log kesalahan.Periksa bidang
reasonpada log kesalahan untuk mengidentifikasi penyebab kesalahan.
Tambahkan logika untuk mentransformasi peristiwa log kesalahan berdasarkan penyebabnya. Anda dapat menggunakan fungsi kontrol proses seperti e_if dan e_switch untuk mengidentifikasi dan menyelesaikan kesalahan.
Contoh penanganan kesalahan
Peristiwa log berisi nilai abnormal
Pembagian dengan nol
# Nilai bidang b pada beberapa peristiwa log adalah 0. Nilai ini digunakan sebagai pembagi operasi numerik dan menyebabkan kesalahan.
e_set("c", op_div_floor(v("a"), v("b")))Log kesalahan:
{ "reason": "kesalahan saat memanggil : floordiv\nDetail: pembagian integer atau modulo dengan nol", }Metode pemecahan masalah:
Periksa apakah nilai bidang
badalah 0 dalam log kesalahan. Jika nilai bidang b adalah 0, nilai ini digunakan sebagai pembagi operasi numerik dan menyebabkan kesalahan.Solusi:
Kesalahan hanya terjadi ketika nilai bidang
badalah 0. Dalam hal ini, gunakan fungsie_ifuntuk menangkap bidangbyang nilainya 0.e_if_else(op_eq(v("b"), "0"), e_set("c", v("a")), e_set("c", op_div_floor(v("a"), v("b")))
Timestamp tidak valid
# Nilai bidang a pada beberapa peristiwa log adalah timestamp yang tidak valid, yang menyebabkan kesalahan.
e_set("b", dt_fromtimestamp(v("a")))Log kesalahan:
{ "reason": "kesalahan saat memanggil : int\nDetail: literal tidak valid untuk int() dengan basis 10: 'nilai tidak valid'", }Metode pemecahan masalah:
Periksa apakah nilai bidang
aadalah timestamp yang valid (string numerik).Solusi:
Tambahkan logika untuk memeriksa apakah nilai bidang
aadalah timestamp yang valid. Jika tidak, ekspor peristiwa log ketarget2.e_if_else(str_isdigit(v("a"))), e_set("b", dt_fromtimestamp(v("a"))), e_output("target2"))
Tipe data tidak dikonversi sebelum operasi numerik
Aturan transformasi sampel:
e_set("a", 10)
e_set("b", 10)
e_set("c", op_mul(v("a"), v("b")))Log kesalahan:
{ "reason": "kesalahan saat memanggil : mul\nDetail: tidak bisa mengalikan urutan dengan non-int tipe' str'", }Penyebab kesalahan:
Nilai semua bidang dalam peristiwa log disimpan sebagai string selama proses transformasi DSL. Pada aturan transformasi sampel sebelumnya, nilai
v("a")danv("b")adalah string. Jika langsung diteruskan ke fungsiop_mul, kesalahan akan terjadi.Metode pemecahan masalah:
Periksa aturan DSL untuk memastikan tipe data dikonversi sebelum operasi numerik.
Solusi:
Gunakan fungsi
ct_intuntuk mengonversi nilai dari tipe string ke tipe integer, lalu teruskan ke fungsiop_mul.e_set("a", 10) e_set("b", 10) e_set("c", op_mul(c_int(v("a")), c_int(v("b"))))