在Serverless 应用引擎里调用链查询 请求没有查到调用链记录。为什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Serverless 应用引擎(SAE)中,调用链查询无法查到调用链记录可能由以下原因导致。以下是详细分析及解决方法:
如果通过HTTP请求提交的CommandArgs
和Envs
参数存在JSON格式错误,可能导致请求未成功执行,从而无法生成调用链记录。
解决方法: - 检查JSON格式:确保请求体中的JSON格式正确无误。 - 设置正确的Content-Type:在请求头中添加Content-Type: application/json
,以帮助事件总线识别请求体的内容类型,并自动阻止JSON语法错误的请求。 - 查看事件追踪记录:登录阿里云事件总线EventBridge控制台,根据SAE任务模板ID查询对应的事件追踪记录,获取详细的报错信息。
调用链数量与设置的采样率有关。默认情况下,ARMS的调用链采样率为10%,即只有10%的调用链会被采集。如果发起多次请求但产生的调用链数量较少,可能是由于采样率较低导致的。
解决方法: - 调整采样率:在ARMS控制台目标应用的应用设置 > 自定义配置页签中,找到采样率设置区域,适当提高采样率。 - 注意特殊规则: - 3.x版本探针会默认采样错误调用的调用链。 - 4.x版本探针会默认采样错误和异常调用的调用链。 - 慢调用的调用链采样策略与普通请求一致,不会被默认采样。
如果请求未实际触发调用链,可能是因为请求未到达下游服务或未产生有效的调用链数据。例如: - 调用方未挂载ARMS探针:如果调用方是浏览器等未挂载ARMS探针的客户端,则不会生成调用链记录。 - 接口未埋点:如果客户端调用的方法未埋点,则无法收集到调用链路信息。
解决方法: - 确保调用方已挂载ARMS探针。 - 检查目标接口是否已正确埋点。
如果请求未成功执行,也可能导致调用链记录缺失。例如: - 请求失败:请求可能因JSON格式错误、网络问题或其他原因失败,导致未生成调用链记录。 - 实例未处理请求:如果设置了多个实例,但某些实例未处理实际请求,则这些实例不会有请求相关的日志或调用链记录。
解决方法: - 检查请求是否成功执行,确认返回的TraceId
是否存在。 - 查看实例的日志,确认是否有请求相关的日志记录。
调用链可能因以下原因丢失或未记录: - 异步调用未记录:调用链响应时间图表不包含因异步产生的子调用链(如调用本地API)。 - 错误调用被捕获:如果调用链中的异常被try-catch
捕获,则该调用链会被认为是正常的调用链路,不会被统计为异常类型。
解决方法: - 在自定义配置中关闭try-catch
异常的调用链正常判断开关(探针版本需为2.9.0及以上)。 - 确保调用链未因异步调用而丢失。
如果业务日志未与调用链的TraceId
关联,则无法通过TraceId
快速定位调用链记录。
解决方法: - 将业务日志与调用链的TraceId
关联,以便通过TraceId
快速查询调用链记录。
解决方法: - 确保实例正在处理实际请求。 - 开启监控推送至SLS日志服务的功能,并设置监控推送日志库。
通过以上分析,您可以从以下几个方面排查调用链记录缺失的问题: 1. 检查JSON格式和请求头设置,确保请求成功执行。 2. 调整调用链采样率,确保调用链被采集。 3. 确保调用方已挂载ARMS探针且接口已埋点。 4. 检查请求是否成功执行,确认实例是否处理了实际请求。 5. 关闭try-catch
异常的调用链正常判断开关,避免调用链丢失。 6. 将业务日志与调用链的TraceId
关联,便于快速定位问题。
如果问题仍未解决,建议结合具体的TraceId
和错误码进一步排查。