更新时间:2024-12-19 GMT+08:00
分享

调用链

在企业微服务之间调用复杂的场景下,APM Agent会抽样一些请求,拦截对应请求及后续一系列的调用信息。比如在A调用B然后调用C的场景,请求进入A后,APM系统会采用智能采样算法,决定是否对请求进行调用链跟踪。

智能采样算法

APM系统会采用智能采样算法,决定是否对请求进行调用链跟踪。

  • 如果决定要跟踪,那么就会生成一个TraceID,拦截A下面的一些重要方法(一般具有树结构父子关系)的详细信息(称为event),同时APM会将TraceID透传到B,B也会拦截下面的重要方法,同时透传TraceID到C,C也跟B和A类似。每个节点分别上报event信息,通过TraceID形成关联,这样通过TraceID就可以查看整个请求的调用详情。
  • 如果决定不跟踪,那么就不会生成TraceID,B服务由于没有收到TraceID,自身也会产生跟A服务一样的算法,决定是否要进行调用链跟踪。
  • 数据上报后,APM系统除了会存储所有event详情,同时会将每个服务的根event(称为span)信息额外存储起来,用于后续调用链搜索。用户一般是先搜索到span信息,然后根据span信息上附带的TraceID获取到总体调用链详情。
  • 调用链采样策略系统默认是智能采样,url分为错误url、慢url(默认800ms、用户自定义配置)、正常url三种url,每种url调用链数据的采样率单独计算。APM的统计数据是一分钟采集上报一次,第一个采集周期所有url调用链数据都按正常url采样。第二个采集周期时,根据上一个采集周期的统计数据,将url分类为错误url、慢url、正常url三种url。
    • 错误url的采样率:cpu小于30%每分钟采集100条,cpu大于或等于30%小于60%每分钟采集50条,cpu大于或等于60%每分钟采集10条,每条url至少采集2条。
    • 慢url的采样率:cpu小于30%每分钟采集100条,cpu大于或等于30%小于60%每分钟采集50条,cpu大于或等于60%每分钟采集10条,每条url至少采集2条。
    • 正常url的采样率:cpu小于30%每分钟采集20条,cpu大于或等于30%小于60%每分钟采集10条,cpu大于或等于60%每分钟采集5条,每条url至少采集1条。

上述调用链算法优点是,一旦决定产生调用链信息,那么链路是完整的,帮用户做正确决策。对于大量调用的url,可能会采集不到异常请求,可以通过异常监控的指标采集等其他方式来定位系统中的异常。

调用链搜索

调用链搜索主要是搜索span信息,就是一个节点的根event。一个调用链可能从多个环境下面搜索到。比如A调用B调用C的场景,对于同一个调用链路,从A、B、C可能都可以搜索到同一个调用链。

  1. 登录管理控制台。
  2. 单击左侧,选择“管理与监管 > 应用性能管理 APM”,进入APM服务页面。
  3. 在左侧导航栏选择“应用监控 > 调用链”,进入调用链界面。
  4. 单击页面右上角的时间维度选择按钮,默认“近20分钟”。当前支持“近20分钟”、“近1小时”、“近3小时”、“近6小时”、“近1天”、“今天”、“昨天”以及自定义。
  5. 输入如下查询条件查询具体的调用链列表,也可在界面下方新增自定义查询条件。

    表1 调用链查询条件

    查询条件

    具体含义

    必填/选填

    应用

    调用链所在应用。

    必填

    区域

    调用链所在区域。

    必填

    组件

    调用链所在组件。

    选填

    环境

    调用链所在环境。

    选填

    实例

    调用链所在实例。

    选填

    URL

    调用链的URL,分为Rest URL和Real URL两种搜索条件:Rest URL为restful风格的URL,URL中带有变量名称,如/apm/get/{id};Real URL为实际访问的URL。

    选填

    精确

    对URL是否精确匹配,开启状态下为精确查询URL,不开启则进行模糊查询。

    选填

    调用方法

    调用链的HttpMethod。

    选填

    状态码

    调用链返回的HTTP状态码。

    选填

    响应时间

    调用链的响应时间范围,可以填写最小响应时间和最大响应时间搜索调用链,两个值都可以为空。

    选填

    是否异常

    调用链是否有异常。

    选填

    Trace ID

    调用链的TraceID,填写该搜索条件后,其他搜索条件全部失效,只根据该TraceID搜索。

    选填

    自定义参数

    • 按调用参数搜索调用链,格式为:key=value,如exceptionMsg=failed。
    • 需要配置的参数,在配置完成后,才支持自定义参数搜索。如url,已配置url监控项的拦截header指定key值、拦截url参数指定key值、拦截cookie指定key值参数后,在这里可以设置key=value进行搜索,例如:httpMethod=POST。

    配置url监控项详见配置url监控项

    选填

    全局Trace ID

    调用链的全局TraceID,填写该搜索条件后,其他搜索条件全部失效,只根据该全局TraceID搜索。

    选填

    应用码

    已配置url监控项的业务code采集长度限制、解析业务code的key、业务code的正确值参数后,会采集相应的应用码,这里可以根据应用码进行搜索。一般情况下,应用码的值与业务code的正确值相同。配置url监控项详见配置url监控项

    选填

查看调用链详情

根据搜索条件查询出来的调用链列表可以查看调用链的基本信息

在查询后的调用链列表中,单击待查看的调用链前的,查看该调用链基本信息,如下图所示。

图1 调用链基本信息

表中标识的具体参数所代表的含义如下:

  1. 调用链的HttpMethod。
  2. 调用链的RestURL,Rest URL为restful风格的URL,URL中带有变量名称,如/apm/get/{id};单击该URL可以跳转到调用链的详情页面。
  3. 调用链的开始时间。
  4. 调用链返回的HTTP状态码。
  5. 调用链的响应时间。
  6. 调用链的TraceID。
  7. 调用链所在组件。
  8. 调用链所在环境。
  9. 调用链所在实例的主机名。
  10. 调用链所在实例的IP。
  11. 调用链的实际URL。
  12. 调用链支持“查看日志”功能。
    1. 在LTS服务侧,配置“采集配置”,详细操作参见云日志服务 LTS《用户指南》的ECS接入章节
    2. 单击“查看日志”,根据traceid跳转至LTS页面。LTS页面相关操作,请参见日志搜索

    如果未开通traceid关联日志,弹出“未关联日志服务”提示框。单击“跳转”,页面跳转至“关联日志服务”页面。“关联日志服务”详细操作,参见组件设置

  13. 支持仅展示“请求成功”或“请求失败”调用链信息,以绿色“请求成功”按钮为例。
    • 单击处于高亮状态的绿色“请求成功”按钮,仅展示“请求成功”的调用链信息,同时红色“请求失败”按钮置灰。
    • 当红色“请求失败”按钮置灰时,单击处于高亮状态的绿色“请求成功”按钮,则展示所有调用链信息,同时红色“请求失败”恢复高亮。
    • 绿色“请求成功”按钮和红色“请求失败”按钮,不支持同时置灰。

用户也可以从一些监控项视图页面,比如Url监控项的table视图,单击具体的Url跳转过来,这样就已经预先填写好搜索条件,帮助用户更快速搜索出所需要的调用链信息。

调用链详情页面可以查看调用链的完整链路信息,包含本地方法堆栈和相关远程调用的调用关系

单击调用链名称,可查看调用链详细信息,如下图所示。

  • 上半部分为调用链完整链路的时序图,展示组件之间的完整调用关系,内部包含一次调用对应的客户端和服务器端的信息,然后线条越在下面,越晚发生调用。
  • 下半部分为调用链详细的方法堆栈,每一行代表一个方法调用,展示了调用链内部方法的详细调用关系。默认只展示javaagent支持的组件方法,如需展示应用方法,可以在JavaMethod配置中配置需要拦截的应用方法。

    图2 调用关系

    表中标识的具体参数所代表的含义如下:

  1. 调用链的时序图中调用接口所属的组件和环境。
  2. 数字为接口调用的客户端响应时间,单位ms,具可将鼠标指针放置在该位置进行查看。
  3. 数字为接口调用的服务端响应时间,单位ms。
  4. 调用链方法堆栈中该方法对应的关键参数数据,如tomcat入口方法展示实际url、mysql的sql调用方法则展示具体执行sql。
  5. 调用链中调用所属的组件个数。
  6. 调用参数,单击查看调用中的参数列表。
  7. 更多信息,单击“查看”,展示对应的Spans详细信息。
  8. 时序图支持折叠,单击“收起时序图”,则时序图被折叠,不再展示。
    图3 时序图折叠

    单击“展开时序图”则时序图被展开,展示时序图。

  9. 单击,下载时序图图片。
  10. 单击“查看日志”,根据traceid跳转至LTS页面。详细介绍,参见“查看日志”章节。
  11. 调用链是“树”状结构,深度表示“树”状结构的层数。如图4所示。
    图4 深度
  12. 调用链的时序图中,如下图。

    使用不同类型探针或用户接入端接入时,图中1和2显示的内容不同,详见下表。

    探针类型或用户接入的类型

    显示内容

    web前端

    WEB

    微信

    WE_CHAT

    百度

    BAIDU

    支付宝

    ALIPAY

    钉钉

    DING_TALK

    移动端App Android

    ANDROID

    移动端App iOS

    IOS

    其它

    user

相关文档