
# 通过调用链查看微服务间调用关系
在企业微服务之间调用复杂的场景下，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. 登录[APM控制台](https://auth.huaweicloud.com/authui/login.html?service=https://console.huaweicloud.com/console/#/login)。
2. 单击左侧![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549696195.png)，选择"管理与监管 \> 应用性能管理 APM"，进入APM服务页面。
3. 在左侧导航栏选择"应用监控 \> 调用链"，进入调用链界面。
4. 单击页面右上角的时间维度选择按钮，默认"近20分钟"。当前支持"近3分钟"、"近5分钟"、"近10分钟"、"近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，不开启则进行模糊查询。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 选填    |
   | 调用方法       | 调用链的Http Method。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 选填    |
   | 状态码        | 调用链返回的HTTP状态码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 选填    |
   | 响应时间       | 调用链的响应时间范围，可以填写最小响应时间和最大响应时间搜索调用链，两个值都可以为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 选填    |
   | 是否异常       | 调用链是否有异常。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 选填    |
   | Trace ID   | 调用链的TraceID，填写该搜索条件后，其他搜索条件全部失效，只根据该TraceID搜索。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 选填    |
   | 自定义参数      | - 目前只支持 otel.scope.name,thread.id的自定义搜索，若需要新增自定义搜索，请联系运维人员。  - 按调用参数搜索调用链，格式为：key=value，如exceptionMsg=failed。  - 需要配置的参数，在配置完成后，才支持自定义参数搜索。如url，已配置url监控项的拦截header指定key值、拦截url参数指定key值、拦截cookie指定key值参数后，在这里可以设置key=value进行搜索，例如：httpMethod=POST。   配置url监控项详见[配置url监控项](https://support.huaweicloud.com/usermanual-apm2/apm_07_0015.html)。 | 选填    |
   | 全局Trace ID | 调用链的全局TraceID，填写该搜索条件后，其他搜索条件全部失效，只根据该全局TraceID搜索。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 选填    |
   | 应用码        | 已配置url监控项的业务code采集长度限制、解析业务code的key、业务code的正确值参数后，会采集相应的应用码，这里可以根据应用码进行搜索。一般情况下，应用码的值与业务code的正确值相同。配置url监控项详见[配置url监控项](https://support.huaweicloud.com/usermanual-apm2/apm_07_0015.html)。                                                                                                                                                                                                                                                                                                                                                                             | 选填    |
      
   
   
6. 单击"查找Trace"，根据搜索条件查询出来的调用链列表可以查看调用链信息。
   
   图1查看调用链   
   ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816187.png "点击放大")
   - 支持仅展示"请求成功"或"请求失败"调用链信息，以绿色"请求成功"按钮为例。
     - 单击处于高亮状态的绿色"请求成功"按钮，仅展示"请求成功"的调用链信息，同时红色"请求失败"按钮置灰。
     
     - 当红色"请求失败"按钮置灰时，单击处于高亮状态的绿色"请求成功"按钮，则展示所有调用链信息，同时红色"请求失败"恢复高亮。
     
     - 绿色"请求成功"按钮和红色"请求失败"按钮，不支持同时置灰。
      
   
   - 响应时间：调用链调用链的响应时间。单击"响应时间"，调用链列表按照响应时间从大到小排列，同时"响应时间"展示为![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518176430.png)；再次单击"响应时间"调用链列表按照响应时间从小到大排列，同时"响应时间"展示为![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816197.png)；第三次单击"响应时间"调用链列表恢复初始状态，同时"响应时间"展示为![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518176436.png)。
   
   - 产生时间：调用链的开始时间。产生时间支持排序，操作方法与[响应时间]的排序方法类似。
   
   - 单击"清空"，查询条件恢复至初始状态，查询结果清空。
     图2清空   
     ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816193.png "点击放大")
     用户也可以从一些监控项视图页面，比如Url监控项的table视图，单击具体的Url跳转过来，这样就已经预先填写好搜索条件，帮助用户更快速搜索出所需要的调用链信息。
     
   
   - 在调用链列表最下方，支持设置每页展示调用链的条数，分别支持设置每页展示：15条、50条或100条。
    
   
   
 
 #### 查看调用链详情
**根据搜索条件查询出来的调用链列表可以查看调用链的基本信息**
在查询后的调用链列表中，单击待查看的调用链前的![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518336340.png)，查看该调用链基本信息，如下图所示。
图3调用链基本信息   
![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549696199.png "点击放大")
表中标识的具体参数所代表的含义如下：
1. 调用链的HTTP Method。
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接入章节](https://support.huaweicloud.com/usermanual-lts/lts_04_1031.html)。
    
    2. 单击"查看日志"，根据TraceID跳转至LTS页面。LTS页面相关操作，请参见[日志搜索](https://support.huaweicloud.com/usermanual-lts/lts_05_0005.html)。
    
    3. 如果未开通TraceID关联日志，弹出"未关联日志服务"提示框。单击"跳转"，页面跳转至"关联日志服务"页面。"关联日志服务"详细操作，参见[配置应用监控组件开关](https://support.huaweicloud.com/usermanual-apm2/apm_07_1032.html)。
       ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518176426.png "点击放大")
       
     
**调用链详情页面可以查看调用链的完整链路信息，包含本地方法堆栈和相关远程调用的调用关系**
单击调用链名称，可查看调用链详细信息，如下图所示。
- 上半部分为调用链完整链路的时序图，展示组件之间的完整调用关系，内部包含一次调用对应的客户端和服务器端的信息，然后线条越在下面，越晚发生调用。
- 下半部分为调用链详细的方法堆栈，每一行代表一个方法调用，展示了调用链内部方法的详细调用关系。默认只展示javaagent支持的组件方法，如需展示应用方法，可以在JavaMethod配置中配置需要拦截的应用方法。 
  
  图4调用关系   
  ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518176422.png "点击放大")
  表中标识的具体参数所代表的含义如下：
  
1. 调用链的时序图中调用接口所属的组件和环境。
2. 数字为接口调用的客户端响应时间，单位ms。鼠标悬浮于组件之间线条上，可以查看组件间的客户端、服务端信息。
   - Real URL：调用链的RestURL，Rest URL为restful风格的URL，URL中带有变量名称，如/apm/get/{id}。
   
   - 响应时间：调用链响应时间。 ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518176424.png "点击放大")
     
     
     
    
3. 数字为接口调用的服务端响应时间，单位ms。
4. 调用链方法堆栈中该方法对应的关键参数数据，如tomcat入口方法展示实际url、mysql的sql调用方法则展示具体执行sql。
5. 调用链中调用所属的组件个数。
6. 调用参数，单击![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549696193.png)查看调用中的参数列表。
7. 更多信息，单击"查看"，展示对应的Spans详细信息。
8. 时序图支持折叠，单击"收起时序图"，则时序图被折叠，不再展示。
   图5时序图折叠   
   ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518336334.png "点击放大")
   单击"展开时序图"则时序图被展开，展示时序图。
   
9. 单击![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549696177.png)，下载时序图图片。
10. 单击"查看日志"，根据TraceID跳转至LTS页面。详细介绍，参见["查看日志"]章节。
11. 调用链是"树"状结构，深度表示"树"状结构的层数。如[图6]所示。
    图6深度   
    ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518336352.png "点击放大") 
12. 调用链的时序图中，使用不同类型探针或用户接入端接入时，图中1和2显示的内容不同。 
    ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518336338.png "点击放大")
    
    
    | 探针类型或用户接入的类型   | 显示内容        |
    |:---|:---|
    | web前端          | WEB         |
    | 微信             | WE_CHAT     |
    | 百度             | BAIDU       |
    | 支付宝            | ALIPAY      |
    | 钉钉             | DING_TALK   |
    | 移动端App Android | ANDROID-APP |
    | 移动端App iOS     | IOS-APP     |
    | 移动端App Harmony | HARMONY-APP |
    | 其它             | user        |
       
    
13. 持续时间，即链路请求的总时间。
    图7持续时间   
    ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816185.png "点击放大") 
14. 单击![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816195.png)，在页面右侧展示智能运维助手（盘古助手）的图表解读内容。
 
