本文档为您介绍数据加工服务进行数据加工后,将加工结果写入目标Logstore产生错误的常见原因和排查处理方法。
工作原理
日志事件被加工完之后,会被输出到预先配置好的目标Logstore中。LOG DSL引擎每次读取一个批次的源日志(从1条到近万条不等),数据加工后,并不是加工一条日志就输出一条,而是会先将加工好的数据存放在一个缓存池中,等源数据批次处理完,再一起输出。
该环节产生错误主要是由于对目标Logstore的访问异常。可能的异常原因为:
目标Logstore信息配置错误。
目标Logstore信息发生变化。
网络错误。
错误影响:
在输出到目标Logstore产生错误时,加工任务会一直重试,直到重试成功或被手动停止。如果重试成功,加工任务会继续正常工作,不会产生日志的丢失和冗余。
如果已经输出了部分数据后才报错,例如配置了两个输出目标,一个目标成功,另外一个目标失败。会保存断点并一直重试,重试成功后,不会有数据的丢失与冗余。如果这时停止加工任务再重新启动时,会从断点继续,不会有数据丢失,但可能会有冗余的数据。
常见错误排查
目标Logstore配置了非法的AccessKey。
非法的AccessKey主要分为两种:非法的AccessKeyId和非法的AccessKeySecret。
错误日志:
#非法的AccessKeyId { "errorCode": "Unauthorized", "errorMessage": "AccessKeyId not found: LTAIL3gUus8A****" } #非法的AccessKeySecret { "errorCode": "SignatureNotMatch", "errorMessage": "signature uJfAJbc0ji04gb+cXhh0qWt****= not match" }
排查方法:
检查任务配置项,查看对应的目标Logstore的AccessKeyID和AccessKeySecret是否存在且正确。
目标Project不存在
错误日志:
{ "errorCode": "ProjectNotExist", "errorMessage": "The Project does not exist : your_project_name" }
原因分析:
错误日志提示
Project does not exist
有三种可能的原因:任务配置项中的目标Project名称输入错误。
目标Project名称输入正确,但是在加工任务过程中,对应的Project被删除。
排查方法:
检查任务配置项中的目标Project名称是否输入有误。
检查目标Project是否被删除。
输出目标不存在。
加工规则样例:
e_coutput("target1")
错误日志:
{ "errorMessage": "transform_data: output target target1 is not found in configurations" }
原因分析:
上述LOG DSL规则将日志事件输出到
target1
中,而错误日志提示target1 is not found in configurations
,说明该加工规则的配置中并没有定义和target1
关联的目标Project和Logstore。排查方法:
检查LOG DSL规则的配置项,确保配置项中定义了加工规则中涉及到的所有存储目标。
目标Logstore信息发生变化
原因分析:
用户配置了正确的目标Logstore信息,可能也已经进行了部分加工任务。但是在数据加工的过程中,目标Logstore信息发生了变化,导致原有的配置信息无法访问目标Logstore。
错误日志:
目标Logstore信息发生变化有主要是如下两种情况:
目标Logstore被删除。
{ "errorMessage": "Logstore [logstore_name] does not exist." }
目标Logstore的AccessKey信息发生变化。
#非法的AccessKeyId { "errorCode": "Unauthorized", "errorMessage": "AccessKeyId not found: LTAIL3gUus8A****" } #非法的AccessKeySecret { "errorCode": "SignatureNotMatch", "errorMessage": "signature uJfAJbc0ji04gb+cXhh0qWt****= not match" }
排查方法:
检查目标Logstore是否被删除。
检查目标Logstore的AccessKey信息是否发生改变。
网络错误。
错误日志:
{ "errorCode": "LogRequestError", "errorMessage": "HTTPConnectionPool(host='your_host', port=80): Max retries exceeded with url: your_url (Caused by NewConnectionError: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'" }
排查方法:
检查网络连接是否正常。