Topik ini menjelaskan penyebab dan solusi untuk error aturan transformasi data.
Setelah data dibaca dari Logstore sumber, mesin transformasi data mentransformasikan event log.
-
Error pada tahap ini umumnya merupakan error logika yang muncul ketika event log tidak sesuai dengan aturan transformasi data.
-
Jika aturan transformasi melibatkan resource eksternal seperti ApsaraDB RDS atau Logstore lainnya, error pemuatan atau refresh resource juga dapat terjadi.
Topik ini berfokus pada troubleshooting error logika. Untuk informasi tentang troubleshooting error pemuatan resource, lihat Error pemuatan resource.
Dampak error
Bidang logging.levelname dalam log error menentukan tingkat error: WARNING atau ERROR.
-
Untuk error tingkat ERROR, event log yang terpengaruh akan dibuang. Output transformasi tidak menyertakan event tersebut, dan pemrosesan dilanjutkan ke event log berikutnya tanpa percobaan ulang.
-
Untuk error tingkat WARNING, seperti ketidaksesuaian regex, langkah DSL saat ini dilewati untuk event tersebut, dan pemrosesan dilanjutkan ke langkah berikutnya.
Troubleshooting
-
Periksa bidang
logging.levelnamedalam log error untuk menentukan tingkat error. -
Periksa bidang
messagedalam log error untuk mengidentifikasi event log yang menyebabkan error. Untuk informasi lebih lanjut, lihat Lihat log error. -
Periksa bidang
reasondalam log error untuk mengetahui penyebab error pada event log tersebut.
Berdasarkan penyebabnya, tambahkan logika ke skrip transformasi Anda untuk menangani exception ini. Anda dapat menggunakan fungsi kontrol proses, seperti e_if dan e_switch, untuk menangkap dan mengelola error tersebut. Berikut adalah contoh log error: Bidang message berisi detail event log yang gagal, dan bidang reason menunjukkan penyebab error, yaitu integer division or modulo by zero:
07-26 16:21:48
__source__:
__tag__:__job_name__: etl-preview-1564110081-604324
__tag__:__schedule_type__: DryRun
__topic__: __etl-log-status__
etl_context: {
"project": "ali-licheng-test-uk2",
"logstore": "source_logstore",
"shard_id": "2"}
event_id: transorm_data:process:fail
extra_info_params: {"src_event": {"__time__": "1563266137", "__topic__": "", "__source__": xxx, "__tag__:__client_ip__": xxx,
"__tag__:__receive_time__": "1563774221", "body_bytes_sent": "740", "client_ip": "1.2.3.4", "host": "m.abcd.com", "status": "403"}}
logging: {"process": "34", "levelname": "ERROR", "funcName": "_transform_events_to_logstore", "module": "logclient_operator", "threadName": "MainThread",
"thread": "139890150307648", "processName": "ForkProcess-1"}
message: [ali-licheng-test-uk2/source_logstore/2]transform_data: fail to process event: {"__time__": "1563266137", "__topic__": "", "__source__": xxx,
"__tag__:__client_ip__": xxx, "__tag__:__receive_time__": "1563774221", "body_bytes_sent": "740", "client_ip": "1.2.3.4", "host": "m.abcd.com", "status": "403"},
detail=integer division or modulo by zero
reason: integer division or modulo by zero
Skenario error umum
Nilai abnormal dalam event log
Pembagian dengan nol
# Terjadi error pembagian dengan nol karena nilai bidang 'b' pada beberapa event log adalah 0.
e_set("c", op_div_floor(v("a"), v("b")))
-
Log error:
{ "reason": "error when calling : floordiv\nDetail: integer division or modulo by zero", } -
Troubleshooting:
Periksa event log yang gagal untuk memastikan apakah nilai bidang
badalah 0. Jika ya, penyebabnya adalah pembagian dengan nol. -
Solusi:
Error hanya terjadi ketika nilai bidang
bdalam suatu event log adalah 0. Untuk memperbaikinya, tambahkan logikae_ifuntuk menangani kasus di mana nilai bidangbadalah 0.e_if_else(op_eq(v("b"), "0"), e_set("c", v("a")), e_set("c", op_div_floor(v("a"), v("b")))
Format timestamp tidak valid
# Terjadi error karena nilai bidang 'a' pada beberapa event log bukan format timestamp yang valid.
e_set("b", dt_fromtimestamp(v("a")))
-
Log error:
{ "reason": "error when calling : int\nDetail: invalid literal for int() with base 10: 'invalid_value'", } -
Troubleshooting:
Periksa event log yang gagal untuk memverifikasi bahwa nilai bidang
aadalah string numerik, yang merupakan format yang diperlukan untuk timestamp yang valid. -
Solusi:
Tambahkan logika kondisional. Jika nilai bidang
abukan format timestamp yang valid, arahkan event log tersebut ketarget2.e_if_else(str_isdigit(v("a"))), e_set("b", dt_fromtimestamp(v("a"))), e_output("target2"))
Konversi tipe data yang tidak dilakukan
Contoh aturan transformasi:
e_set("a", 10)
e_set("b", 10)
e_set("c", op_mul(v("a"), v("b")))
-
Log error:
{ "reason": "error when calling : mul\nDetail: can't mulltiply sequence by non-int of type' str'", } -
Penyebab:
Selama pemrosesan DSL, nilai semua bidang dalam event log disimpan sebagai string. Pada contoh aturan sebelumnya,
v("a")danv("b")keduanya berupa string. Mengoperkannya langsung keop_mulmenyebabkan error. -
Troubleshooting:
Periksa aturan DSL Anda untuk memastikan konversi tipe data telah dilakukan sebelum perhitungan numerik.
-
Solusi:
Gunakan fungsi
ct_intuntuk mengonversi string menjadi integer, lalu oper hasilnya ke fungsiop_mul.e_set("a", 10) e_set("b", 10) e_set("c", op_mul(c_int(v("a")), c_int(v("b"))))