如果加工规则中涉及RDS资源的加载,则有可能会产生资源的加载或刷新错误。本文档主要介绍从RDS-Mysql获取数据出错的原因以及排查处理方法。

在成功读取源Logstore数据后,加工引擎开始对源Logstore的日志事件进行加工。如果加工规则中涉及OSS、RDS、Logstore等外联资源的加载,则也有可能会产生资源的加载或刷新错误。

控制台单独使用资源函数

  • 加工规则
    res_rds_mysql(address="xx",username="xx",password="xx",database="xx")
  • 错误日志
    aliyun.log.logexception.LogException: {"errorCode": "InvalidEtlConfig", "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>", "requestId": ""}
  • 排查方法

    该错误信息为语法配置错误,这种错常见于用户在控制台单独使用res_rds_mysqlres_log_logstore_pullres_oss_file语法。

  • 解决方案

    资源函数语法不可以单独在控制台使用,请结合e_table_map或者e_search_table_map等函数进行使用。

参数填写错误

  • 加工规则
    e_table_map(res_rds_mysql(address="xx",username="xx",password="xx",database="xx"),field="processid",output_fields=["name","xixi"])
  • 错误日志
    "errorMessage\": \"When sql is not set, table must be set\\nDetail: None\"
  • 排查方法

    一般这种情况就是tablesql两个参数都没有填写。

  • 解决方案

    table参数没有设置的时候,必须传入指定的sql语句,否则找不到表无法进行数据获取。tablesql两个参数必须传递一个。

输出字段错误

  • 加工规则
    e_table_map(res_rds_mysql(address="x",username="xx",password="xx",database="xx",table="test"),field="processid",output_fields=["name","xixi"])
  • 错误日志
    "errorMessage\": \"trans_comp_lookup: output field xixi doesn't exist in lookup table\\nDetail: None\
  • 排查方法

    出现这种错误是因为output_fields输出的字段并不存在于mysql数据表中。

  • 解决方案

    请验证mysql数据库中数据都包含哪些字段,将正确的字段填入output_fields中。

参数类型配置错误

  • 加工规则
    e_table_map(res_rds_mysql(address="xxx",username=1234,password="xx",database="xx",table="xx"),field="processid",output_fields=["name","xixi"])
  • 错误日志
    "errorMessage\": \"username not a string type\\nInvalid Settings
  • 排查方法

    出现这种错误是因为username不是String类型。

  • 解决方案

    所以请配置的时候根据参数文档配置正确参数的类型,否则会抛出错误。

网络或者权限错误

  • 加工规则
    e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="test999",table="xx"),field="processid",output_fields=["name","xixi"])
  • 错误日志1
    message:  Database connection failed, cause: (1045, "Access denied for user 'root'@'47.99.57.53' (using password: YES)")
  • 错误日志2
    message:  Database connection failed, cause: (1049, "Unknown database 'test999')
  • 排查方法
    当出现Database connection failed错误信息的时候,请检查自己的配置是否错误,或者网络是否不通,请排查自己的账号是否在rds-mysql 的白名单当中。当出现无法链接错误的时候,其原因会非常详细的出现在cause原因后面,可以根据错误原因进行排查,大多是权限、密码、地址错误等。
    说明 目前暂时不支持通过vpc连接rds-mysql,如果填入vpc网络地址会造成网络不通连接失败。请在address参数中配置rds-mysql所在的公网地址。vpc连接计划将在后续版本进行支持。
  • 解决方案

    排查原因后重新配置函数重启数据加工服务,连接错误或者权限错误数据加工无法恢复的错误,需要手动配置参数后重新启动。

SQL语法错误

  • 加工规则
    e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="xx",sql="inset into test values(1,"aini")",field="processid",output_fields=["name","xixi"]))
  • 错误日志
    "errorMessage\": \"The sql_query field only supports database query syntax\\nInvalid Settings \\\"insert into test values(1,aini)\\\"\\nDetail: None\", \"requestId\": \"\"}
  • 排查方法

    出现如上错误信息,原因是填入配置中的sql语法错误。首先sql语法仅支持select从数据库中读取数据的模式。其次,当写入数据库的select语法是错误的时候,也会引发fetch data error错误,此时可以根据错误原因具体分析sql中的错误。

  • 解决方案

    修复sql语句的错误,需要注意sql只支持select查询语句。

持续刷新错误

  • 加工规则
    e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="xx",table="test,field="processid",output_fields=["name","xixi"],refresh_interval=30))
  • 错误日志
    "errorMessage\": \"Database connection failed, cause: (2003, \\\"Can't connect to MySQL server on 'rm-wz9z68i4itrk4v8d9yo.mysql.rds.aliyuncs.com' (timed out))
  • 排查方法

    该错误信息为rds-mysql数据库将白名单授权取消导致无法链接的错误。当持续加工过程中遇到错误,例如部分网络震荡,会自动进行重试。如果遇到权限等被取消的错误,需要手动恢复。可以根据报错查找可能导致链接超时的原因。

  • 解决方案

    在持续获取数据的过程中可能因为远程rds-mysql数据库权限变动或者表被删除等情况,此时数据库会报链接错误的问题,可以根据错误原因查看rds-mysql数据库中,是否表数据或者权限发生了变动。