在Serverless 应用引擎里调用链查询 请求没有查到调用链记录。为什么?

在Serverless 应用引擎里调用链查询 请求没有查到调用链记录。为什么?

展开
收起
三分钟热度的鱼 2023-05-14 20:56:08 144 分享 版权
阿里云 AI 助理回答

在Serverless 应用引擎(SAE)中,调用链查询无法查到调用链记录可能由以下原因导致。以下是详细分析及解决方法:


1. JSON格式错误导致请求失败

如果通过HTTP请求提交的CommandArgsEnvs参数存在JSON格式错误,可能导致请求未成功执行,从而无法生成调用链记录。
解决方法: - 检查JSON格式:确保请求体中的JSON格式正确无误。 - 设置正确的Content-Type:在请求头中添加Content-Type: application/json,以帮助事件总线识别请求体的内容类型,并自动阻止JSON语法错误的请求。 - 查看事件追踪记录:登录阿里云事件总线EventBridge控制台,根据SAE任务模板ID查询对应的事件追踪记录,获取详细的报错信息。


2. 调用链采样率设置过低

调用链数量与设置的采样率有关。默认情况下,ARMS的调用链采样率为10%,即只有10%的调用链会被采集。如果发起多次请求但产生的调用链数量较少,可能是由于采样率较低导致的。
解决方法: - 调整采样率:在ARMS控制台目标应用的应用设置 > 自定义配置页签中,找到采样率设置区域,适当提高采样率。 - 注意特殊规则: - 3.x版本探针会默认采样错误调用的调用链。 - 4.x版本探针会默认采样错误和异常调用的调用链。 - 慢调用的调用链采样策略与普通请求一致,不会被默认采样。


3. 请求未实际触发调用链

如果请求未实际触发调用链,可能是因为请求未到达下游服务或未产生有效的调用链数据。例如: - 调用方未挂载ARMS探针:如果调用方是浏览器等未挂载ARMS探针的客户端,则不会生成调用链记录。 - 接口未埋点:如果客户端调用的方法未埋点,则无法收集到调用链路信息。

解决方法: - 确保调用方已挂载ARMS探针。 - 检查目标接口是否已正确埋点。


4. 请求未成功执行

如果请求未成功执行,也可能导致调用链记录缺失。例如: - 请求失败:请求可能因JSON格式错误、网络问题或其他原因失败,导致未生成调用链记录。 - 实例未处理请求:如果设置了多个实例,但某些实例未处理实际请求,则这些实例不会有请求相关的日志或调用链记录。

解决方法: - 检查请求是否成功执行,确认返回的TraceId是否存在。 - 查看实例的日志,确认是否有请求相关的日志记录。


5. 调用链丢失或未记录

调用链可能因以下原因丢失或未记录: - 异步调用未记录:调用链响应时间图表不包含因异步产生的子调用链(如调用本地API)。 - 错误调用被捕获:如果调用链中的异常被try-catch捕获,则该调用链会被认为是正常的调用链路,不会被统计为异常类型。

解决方法: - 在自定义配置中关闭try-catch异常的调用链正常判断开关(探针版本需为2.9.0及以上)。 - 确保调用链未因异步调用而丢失。


6. 日志未关联TraceId

如果业务日志未与调用链的TraceId关联,则无法通过TraceId快速定位调用链记录。
解决方法: - 将业务日志与调用链的TraceId关联,以便通过TraceId快速查询调用链记录。


7. 其他可能原因

  • 请求调度策略影响:如果实例未处理实际请求,则不会有请求相关的日志或调用链记录。
  • 监控推送未开启:如果未将监控数据推送至SLS日志服务,则可能无法查看已销毁实例的监控数据或请求级别的调用链记录。

解决方法: - 确保实例正在处理实际请求。 - 开启监控推送至SLS日志服务的功能,并设置监控推送日志库。


总结

通过以上分析,您可以从以下几个方面排查调用链记录缺失的问题: 1. 检查JSON格式和请求头设置,确保请求成功执行。 2. 调整调用链采样率,确保调用链被采集。 3. 确保调用方已挂载ARMS探针且接口已埋点。 4. 检查请求是否成功执行,确认实例是否处理了实际请求。 5. 关闭try-catch异常的调用链正常判断开关,避免调用链丢失。 6. 将业务日志与调用链的TraceId关联,便于快速定位问题。

如果问题仍未解决,建议结合具体的TraceId和错误码进一步排查。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

快速交付实现商业价值。

还有其他疑问?
咨询AI助理