数据加工任务的第一个环节便是启动加工引擎。该环节产生错误主要是由于在启动加工引擎过程时,检测到您编写的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"))
,如下图所示。
- 错误日志
- 非法使用运算符。
SLS DSL中所有的操作都需要通过SLS DSL提供的函数来完成。数值运算、大小比较等操作都需要通过op_*函数完成,而不能直接使用运算符。
- 错误日志
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: " }
- 排查方法
检查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" }
- 排查方法
- 示例
dt_totimestamp函数接收的参数类型是日期时间对象,此处
v("time1")
是字符串类型,即传递了错误类型的参数给日期时间函数,引发报错。您可以使用dt_parse函数将字符串转化为日期时间对象,再传递给dt_totimestamp函数。也可以使用dt_parsetimestap函数代替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: " }
- 排查方法
检查是否在全局操作调用了表达式函数,作为加工规则的一个步骤。
- 示例
#错误示例 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")))
- 错误日志
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/165960.html