全部產品
Search
文件中心

Simple Log Service:加工引擎啟動錯誤

更新時間:Jun 05, 2026

本文檔為您介紹加工引擎啟動錯誤的原因以及排查處理方法。

資料加工任務的第一個環節便是啟動加工引擎。該環節產生錯誤主要是由於在啟動加工引擎過程時,檢測到您編寫的SLS DSL規則存在錯誤,導致加工引擎內部的安全性稽核不通過。加工引擎啟動

錯誤記錄檔

在加工引擎啟動過程中,如果檢測到您編寫的SLS DSL規則存在錯誤,會報如下形式的錯誤。

{
  "errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
說明

錯誤記錄檔可以在資料加工診斷報表的異常詳情中或者internal-etl-log LogStore中查看。

  • 在加工引擎啟動階段產生錯誤時,加工任務會一直重試,直到重試成功或被手動停止。

  • 修改加工規則後,加工任務重試成功,繼續正常工作,不會產生日誌的丟失或冗餘。

常見錯誤排查

  • 基本語法錯誤。

    您編寫了不符合SLS DSL文法的加工規則,例如:多或者少括弧、逗號(,)寫成冒號(:)等。

    • 錯誤記錄檔

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax"
      }
      {
        "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing"
      }
    • 排查方法

      根據錯誤記錄檔中的traceback資訊定位具體的語法錯誤位置。例如:將e_set("test", v("status"))錯寫成e_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)
  • 非法使用運算子。

    SLS DSL中所有的操作都需要通過SLS DSL提供的函數來完成。數值運算、大小比較等操作都需要通過op_*函數完成,而不能直接使用運算子。

    • 錯誤記錄檔

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> "
      }
    • 排查方法

      檢查SLS DSL規則,確保所有的操作例如運算、大小比較等都是通過SLS DSL提供的函數完成的。

    • 樣本

      e_set("b", v("a") - 10) # 錯誤樣本
      e_set("b", op_sub(v("a"), 10)) # 正確樣本
      e_set("b", v("a") >= v("c")) # 錯誤樣本
      e_set("b", op_ge(v("a"), v("c"))) # 正確樣本
  • 函數參數類型傳遞錯誤或調用不存在的函數。

    如果傳遞給函數的參數類型和函數接收的參數類型不一致,或者調用了不存在的函數,會產生錯誤。

    • 錯誤記錄檔

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name"
      }
    • 排查方法

      • 首先檢查對應的函數是否存在,函數名是否拼字錯誤等。如果函數存在且名稱正確,則檢查函數的參數類型是否傳遞正確。

      • 根據錯誤記錄檔中的traceback資訊定位產生錯誤的函數。例如:定位到dt_totimestamp函數產生錯誤,首先判斷該函數是存在的,接著檢查規則中調用dt_totimestamp函數的地方,是否傳遞了正確類型的參數給該函數。

        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
    • 樣本

      dt_totimestamp函數接收的參數類型是日期時間對象,此處v("time1")是字串類型,即傳遞了錯誤類型的參數給日期時間函數,引發報錯。

      您可以使用dt_parse函數將字串轉化為日期時間對象,再傳遞給dt_totimestamp函數。也可以使用dt_parsetimestamp函數代替dt_totimestamp函數,該函數可以接收字串類型。

      #錯誤樣本
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(v("time1")))
      #正確樣本
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(dt_parse(v("time1"))))
      #正確樣本
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_parsetimestamp(v("time1")))
  • 在全域操作中調用運算式函數。

    SLS DSL文法中提供兩種類型的函數:全域操作函數和運算式函數。只有全域操作函數才能作為加工規則的一個步驟,在全域操作進行調用。如果在全域操作中調用運算式函數,則會產生錯誤。

    • 錯誤記錄檔

      {
        "errorMessage": "ETL config doesn't pass security check, detail:  invalid type detected: <class '_ast.Expr'>"
      }
    • 排查方法

      檢查是否在全域操作調用了運算式函數,作為加工規則的一個步驟。

    • 樣本

      #錯誤樣本
      op_add(v("a"), v("b"))
      str_lower(v("name"))
      #正確樣本
      e_set("add", op_add(v("a"), v("b")))
      e_set("lower", str_lower(v("name")))
  • 非法使用變數定義賦值。

    SLS DSL文法中不支援變數定義賦值,變數值只能通過無狀態方式調用傳遞。

    • 錯誤記錄檔

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name"
      }
    • 排查方法

      • 檢查SLS DSL規則中是否使用了變數定義賦值。

      • 根據錯誤記錄檔中的traceback資訊定位產生錯誤的位置。

    • 樣本

      #錯誤樣本
      sum_value = op_add(v("a"), v("b"))
      e_set("sum", sum_value)
      #正確樣本
      e_set("sum", op_add(v("a"), v("b")))