一步一步写APM(五)--数据的收集与简单展示

(四)中我们已经简单的构造出了链,现在我们想把数据收集起来

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很简单且只是做演示使用。

测试

  1. 启动APMServer端tomcat,端口8888
  2. 重新package agent且启动APMAgentTestTomcat,我们给APMAgentTestTomcat添加了一次test1函数调用,这样就会出现3级父子关系,同样也改造了agent 的拦截类。
  3. 查看APMServer首页出现了如下所示 可见第一个invoke调用有三级层级关系。

展示优化以及信息添加,目标

  1. 体现请求开始时间以及耗时
  2. 直观可视化 image.png
  3. 更新Tomcat组件的operationName,现在是统一的invoke,代码略。参见提交:更新Tomcat operationName

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×