Jika mesin transformasi data gagal memulai, kemungkinan besar aturan SLS DSL Anda mengandung kesalahan yang tidak lolos pemeriksaan keamanan mesin. Topik ini menjelaskan kesalahan startup paling umum dan cara memperbaikinya.
Mesin transformasi data menjalankan pemeriksaan keamanan terhadap aturan SLS DSL Anda pada awal setiap task transformasi. Jika pemeriksaan gagal, mesin tidak akan dimulai.
Log error
Saat mesin mendeteksi error selama startup, ia mengembalikan pesan dalam format berikut.
{
"errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
Lihat log error di bagian detail exception Laporan diagnostik transformasi data atau di Logstore internal-etl-log.
Jika terjadi kesalahan startup, task akan terus mencoba ulang hingga berhasil atau Anda menghentikannya secara manual.
Setelah Anda memperbaiki aturan pemrosesan, task akan berhasil pada percobaan ulang berikutnya dan melanjutkan operasi normal. Tidak ada log yang hilang atau duplikat.
Penyelesaian masalah error umum
-
Kesalahan sintaks dasar.
Error ini terjadi ketika aturan pemrosesan melanggar tata bahasa SLS DSL — misalnya, tanda kurung tidak seimbang atau penggunaan titik dua (
:) menggantikan koma (,).-
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax" } { "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing" } -
Pemecahan masalah
Gunakan informasi
tracebackdalam log error untuk menemukan lokasi pasti kesalahan sintaks. Sebagai contoh, error berikut terjadi ketikae_set("test": v("status"))digunakan menggantikane_set("test", v("status")).__source__: 172.20.3.124 __tag__:__job_name__: etl-preview-1563260078-834525 __tag__:__schedule_type__: DryRun __topic__: event_id : transform_data:init:fail logging : {"processName": "MainProcess", "threadName": "MainThread", "thread": "140462572971840", "funcName": "transform_data", "process": "1", "module": "logclient_operator", "levelname": "ERROR"} message : ETL config doesn't pass security check, detail: invalid syntax (<unknown>, line 5) Traceback (most recent call last): File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 100, in security_check_config RestrictConfigParser().parse(code) File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 88, in parse self.visit(ast.parse(code)) File "/usr/local/lib/python3.7/ast.py", line 35, in parse return compile(source, filename, mode, PyCF_ONLY_AST) File "<unknown>", line 5 TRANSFORM_ANY_1563260645 = e_set("test": v("status")) SyntaxError: invalid syntax reason : ETL config doesn't pass security check, detail: invalid syntax (<unknown>, line 5)
-
-
Penggunaan operator yang tidak valid.
SLS DSL mewajibkan penggunaan fungsi bawaan — seperti yang memiliki awalan
op_*— untuk semua operasi, termasuk perhitungan numerik dan perbandingan. Penggunaan langsung operator standar tidak diperbolehkan.-
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> " } -
Pemecahan masalah
Tinjau aturan pemrosesan SLS DSL Anda dan ganti semua penggunaan operator langsung dengan fungsi bawaan SLS DSL yang setara.
-
Contoh
e_set("b", v("a") - 10) # Contoh salah e_set("b", op_sub(v("a"), 10)) # Contoh benar e_set("b", v("a") >= v("c")) # Contoh salah e_set("b", op_ge(v("a"), v("c"))) # Contoh benar
-
-
Tipe parameter tidak sesuai atau pemanggilan fungsi yang tidak ada.
Error ini terjadi ketika tipe data argumen tidak sesuai dengan tipe parameter yang diharapkan oleh fungsi, atau ketika Anda memanggil fungsi yang tidak ada.
-
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name" } -
Pemecahan masalah
Verifikasi bahwa fungsi tersebut ada dan penulisannya benar. Jika nama sudah benar, periksa apakah argumennya memiliki tipe data yang sesuai.
-
Gunakan informasi
tracebackdari log error untuk mengidentifikasi fungsi yang menyebabkan error. Misalnya, jika error berasal dari fungsidt_totimestamp, pertama-tama pastikan fungsi tersebut memang ada. Kemudian, tinjau aturan tempatdt_totimestampdipanggil untuk memastikan Anda meneruskan tipe parameter yang benar.File "/usr/local/lib/python3.7/ast.py", line 262, in visit return visitor(node) File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 50, in visit_Call raise InvalidETLConfig("invalid call id detected: {}".format(node.func.id)) aliyunlogetl_common.core.restrict_config_parser.InvalidETLConfig: invalid call id detected: dt_totimestamp reason : ETL config doesn't pass security check, detail: invalid call id detected: dt_totimestamp
-
Contoh
Fungsi
dt_totimestampmengharapkan objek datetime. Di sini,v("time1")mengembalikan string, sehingga menyebabkan error ketidaksesuaian tipe.Untuk memperbaikinya, gunakan
dt_parseuntuk mengonversi string menjadi objek datetime sebelum meneruskannya kedt_totimestamp. Atau, gunakandt_parsetimestamp, yang menerima argumen string secara langsung.# Contoh salah e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(v("time1"))) # Contoh benar e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(dt_parse(v("time1")))) # Contoh benar e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_parsetimestamp(v("time1")))
-
-
Memanggil fungsi ekspresi sebagai operasi global.
SLS DSL menyediakan dua jenis fungsi: fungsi operasi global dan fungsi ekspresi. Hanya fungsi operasi global yang dapat dipanggil sebagai langkah mandiri dalam aturan pemrosesan. Memanggil fungsi ekspresi secara langsung sebagai operasi global akan menyebabkan error.
-
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>" } -
Pemecahan masalah
Periksa aturan pemrosesan Anda untuk memastikan tidak ada fungsi ekspresi yang dipanggil sebagai operasi global mandiri. Bungkus fungsi tersebut di dalam fungsi operasi global seperti
e_set. -
Contoh
# Contoh salah op_add(v("a"), v("b")) str_lower(v("name")) # Contoh benar e_set("add", op_add(v("a"), v("b"))) e_set("lower", str_lower(v("name")))
-
-
Penugasan variabel tidak valid.
SLS DSL tidak mendukung penugasan variabel. Teruskan nilai antar fungsi secara tanpa status (stateless).
-
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name" } -
Pemecahan masalah
Periksa aturan pemrosesan SLS DSL Anda untuk menemukan penugasan variabel apa pun.
Gunakan informasi
tracebackdalam log error untuk menemukan baris tempat error terjadi.
-
Contoh
# Contoh salah sum_value = op_add(v("a"), v("b")) e_set("sum", sum_value) # Contoh benar e_set("sum", op_add(v("a"), v("b")))
-