(四)中我们已经简单的构造出了链,现在我们想把数据收集起来
public class ContextManager {
...
public static Span stopSpan(){
Span span = get().stopSpan();
try {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8888/uploadSpan");
httpPost.addHeader(HTTP.CONTENT_TYPE, "application/x-www-form-urlencoded");
List<BasicNameValuePair> formparams = new ArrayList<>();
formparams.add(new BasicNameValuePair("span", span.toString()));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httpPost.setEntity(uefEntity);
httpclient.execute(httpPost);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return span;
}
...
}
注意:这里使用HTTP效率不高,所以这里只是做演示使用,真实应用场景不会这么干的。
添加Server端
代码省略,参看提交~~添加APMServer
~~ 更新index.html
,同样,Server很简单且只是做演示使用。
测试
- 启动APMServer端tomcat,端口8888
- 重新package agent且启动APMAgentTestTomcat,我们给APMAgentTestTomcat添加了一次test1函数调用,这样就会出现3级父子关系,同样也改造了agent 的拦截类。
- 查看APMServer首页出现了如下所示
可见第一个invoke调用有三级层级关系。
展示优化以及信息添加,目标
- 体现请求开始时间以及耗时
- 直观可视化
- 更新Tomcat组件的operationName,现在是统一的invoke,代码略。参见提交:
更新Tomcat operationName