调用链
在企业微服务之间调用复杂的场景下,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可能都可以搜索到同一个调用链。
- 登录管理控制台。
- 单击左侧,选择“管理与部署 > 应用性能管理 APM”,进入APM服务页面。
- 在左侧导航栏选择“应用监控 > 调用链”,进入调用链界面。
- 输入如下查询条件查询具体的调用链列表,也可在界面下方新增自定义查询条件。
表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监控项。
选填
查看调用链详情
根据搜索条件查询出来的调用链列表可以查看调用链的基本信息
- 单击处于高亮状态的绿色“请求成功”按钮,仅展示“请求成功”的调用链信息,同时红色“请求失败”按钮置灰。
- 当红色“请求失败”按钮置灰时,单击处于高亮状态的绿色“请求成功”按钮,则展示所有调用链信息,同时红色“请求失败”恢复高亮。
- 绿色“请求成功”按钮和红色“请求失败”按钮,不支持同时置灰。
在查询后的调用链列表中,单击待查看的调用链前的,查看该调用链基本信息,如下图所示。
表中标识的具体参数所代表的含义如下:
- 调用链的HttpMethod。
- 调用链的RestURL,Rest URL为restful风格的URL,URL中带有变量名称,如/apm/get/{id};单击该URL可以跳转到调用链的详情页面。
- 调用链的开始时间。
- 调用链返回的HTTP状态码。
- 调用链的响应时间。
- 调用链的TraceID。
- 调用链所在组件。
- 调用链所在环境。
- 调用链所在实例的主机名。
- 调用链所在实例的IP。
- 调用链的实际URL。
用户也可以从一些监控项视图页面,比如Url监控项的table视图,单击具体的Url跳转过来,这样就已经预先填写好搜索条件,帮助用户更快速搜索出所需要的调用链信息。
调用链详情页面可以查看调用链的完整链路信息,包含本地方法堆栈和相关远程调用的调用关系
单击调用链名称,可查看调用链详细信息,如下图所示。
- 上半部分为调用链完整链路的时序图,展示组件之间的完整调用关系,内部包含一次调用对应的客户端和服务器端的信息,然后线条越在下面,越晚发生调用。
- 下半部分为调用链详细的方法堆栈,每一行代表一个方法调用,展示了调用链内部方法的详细调用关系。默认只展示javaagent支持的组件方法,如需展示应用方法,可以在JavaMethod配置中配置需要拦截的应用方法。
图2 调用关系
表中标识的具体参数所代表的含义如下:
- 调用链的时序图中调用接口所属的组件和环境。
- 数字为接口调用的客户端响应时间,单位ms,具可将鼠标指针放置在该位置进行查看。
- 数字为接口调用的服务端响应时间,单位ms。
- 调用链方法堆栈中该方法对应的关键参数数据,如tomcat入口方法展示实际url、mysql的sql调用方法则展示具体执行sql。
- 调用链方法的扩展数据,一般展示该方法相关的参数信息。