数据加工任务启动后,加工结果根据路由规则发送到对应的Logstore。如果加工任务失败,目标Logstore没有日志产生或者加工延迟过大等异常,可以根据本文档步骤进行排查处理。
错误分析
当发生错误时,分析错误在数据加工任务的哪个环节产生,能帮助用户更高效地定位错误位置。
根据加工原理,数据加工任务的主要四个环节如下图所示。
以上每个环节都可能产生错误,其原因、影响和排查方式各不相同。
启动加工引擎。
该环节产生错误主要是由于在启动加工引擎过程中,检测到用户编写的LOG DSL规则存在错误,导致加工引擎内部的安全检查不通过。
在该阶段产生错误时,加工任务会停止。用户需要修改LOG DSL规则并重新启动加工任务。如果重试成功,加工任务会继续正常工作,不会产生日志的丢失或冗余。
该环节的错误排查方法请参见加工引擎启动错误。
读取源Logstore数据。
该环节产生错误可能是由于源Logstore信息配置错误、网络错误、源Logstore信息发生变化等,导致对源Logstore的访问异常。
该阶段产生错误时,加工任务会一直重试,直到重试成功或被手动停止。如果重试成功,加工任务会继续正常工作,不会产生日志的丢失。
如果是已经读取部分数据后才报错,则加工服务会保存断点并一直重试,重试成功后从断点处继续读取,不会有数据的丢失与重复。如果重试过程中停止,不会有数据丢失与重复。
该环节的错误排查方法请参见源Logstore读取错误。
加工日志事件。
该环节产生错误主要是由于在数据加工过程中,部分或全部日志事件不适配加工规则引发的错误。
该阶段产生错误时,不适配加工规则的日志事件会引发报错,错误分成WARNING和ERROR级别(通过加工日志的logging.levelname体现)。
对于ERROR级别的错误,该日志事件会丢弃,加工后的输出结果中将不包含这些日志事件。
对于WARNING级别的错误(例如某些事件与正则规则不匹配),会跳过当前DSL的这一步,进行下一步。
该环节的错误排查方法请参见加工规则错误。
输出到目标Logstore。
该环节产生错误可能是由于目标Logstore信息配置错误、网络错误、目标Logstore信息发生变化等,导致对目标Logstore的访问异常。
该阶段产生错误时,加工任务会一直重试,直到重试成功或被手动停止。如果重试成功,加工任务会继续正常工作,不会产生日志的丢失。
如果是已经输出部分数据后才报错,例如配置了两个目标,一个目标成功,另外一个目标失败。会保存断点并一直重试,重试成功后不会有数据的丢失与冗余。但如果这时停止加工任务再重新启动时,会从断点继续加工,不会有数据的丢失,但可能会有数据的冗余。
该环节的错误排查方法请参见目标Logstore输出错误的原因和排查方法。
通用错误排查
确认目标Logstore是否有数据写入。
检查目标Logstore最近是否有数据写入,正确的方法是通过查看目标Logstore的消费预览数据。
说明通过Logstore的查询的方式可能不准确,因为:
数据加工是基于日志接收时间进行加工,可能正在加工历史日志,当前查询的时间范围与日志的写入时间并不一定一致。
日志服务在写入历史日志时的索引可以查询,但通常会有几分钟的延迟。 数据加工如果正在写入历史日志,那么查询界面立刻查询可能查询不到。
查看加工任务状态。
查看源Logstore是否有数据产生。
通过查看加工任务,确认在当前加工任务的时间范围内,源Logstore是否存在日志。
如果时间配置没有设置结束时间,检查源Logstore是否有新日志产生,如果没有新日志产生,且特定时间范围内没有日志而且没有历史日志存在,加工任务无法进行。
如果选择的是历史时间,确认历史特定时间范围内源Logstore是否有日志。
单击加工任务的修改加工规则,选择对应的时间范围来查看是否有原始日志。
查看加工规则是否异常。
检查加工规则代码中是否存在异常。例如:
修改了日志的时间,导致在当前时间范围内查询不到。
加工规则在特定条件下丢弃了日志。
例如如下代码,会丢弃所有字段
name
不存在或者为空的日志,而前置逻辑是构建字段name
,如果前置逻辑存在问题,导致字段name
没有正确构建的话,所有日志都不会产出。# ....前置逻辑. # .... 构建字段name... e_keep(e_search('name: "?"'))
如果存在从第三方拉取数据做富化的逻辑,需要确认是否因为第三方的数据过大,导致数据加工任务正在处于初始化状态,迟迟未能开始消费数据。例如:
e_dict_map(res_rds_mysql(..database="userinfo", table="user"), "username", ["city", "school", "age"])
单击加工任务的修改加工规则,选择对应的时间范围,并单击预览数据来查看结果。
如果能够重现,可以通过注释掉特定语句重试预览进行调试。
确认Shard数量是否符合预期。
如果发现加工速度过慢,可以考虑是否源Logstore与目标Logstore的规划不符合性能预期,建议调整源Logstore或目标Logstore的Shard数量。
错误日志查看方式
错误日志可以通过如下方式查看。
通过日志库
internal-etl-log
查看。加工任务产生的日志会存储在日志库
internal-etl-log
中,该Logstore在执行数据加工任务后由系统自动生成。internal-etl-log
属于专属Logstore,不收取任何费用,不支持修改其配置,也不支持写入其他数据。internal-etl-log
中每个日志事件的__topic__
字段显示了加工任务的状态,可通过该字段判断对应的加工任务是否产生了错误。具体的错误信息通过每个日志事件的
message
和reason
字段查看,如下图所示。
通过仪表盘查看。
单击目标加工任务,在数据加工概览页面的执行状态区域查看仪表盘。
具体的错误信息在异常详情的
reason
列,如下图所示。控制台查看。
预览阶段的错误日志会直接显示在控制台。预览阶段只是模拟加工规则的操作,以及预览预期的加工结果,并不会真的对源Logstore和目标Logstore进行修改,因此预览阶段遇到的各类错误都不会对源日志事件产生影响。
预览限制
预览阶段的数据加工相较于真实的加工任务,会存在限制。
不能发现源Logstore密钥权限问题。
预览阶段不会创建消费组进行消费,因此不会对消费组权限进行检查。
不能发现加工规则中输出目标的名称错误。
预览阶段不会对写入目标做真正的写入操作,因此不会检查配置项中是否配置了相关的输出目标。
不能发现输出目标的配置错误。
此处配置错误包含输出目标的Project、Logstore、密钥权限等信息配置错误。
预览阶段不会对写入目标做真正的写入操作,因此不会检查输出目标的配置信息是否正确。
不能完整覆盖所有数据。
预览阶段默认只从源Logstore中拉取1000条数据进行加工,不会覆盖所有数据。
如果拉取的1000条数据经过加工后没有加工结果产生,则会持续拉取数据五分钟,直到有加工结果产生为止。