伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Jaeger-实践处理相关计划

来源:本站原创 浏览:150次 时间:2021-09-24
随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂。APM因此而生。

  目前,市面上的APM服务端已经有了非常多的实现。比如Zipkin、Jaeger、SkyWalking、Elastic APM等(Pinpoint并不支持OpenTracing,所以我们不介绍)。

本次选择Jaeger作为服务端示例。主要内容如下。


第一部分

  在第一部分,我们来看一下apm的关键信息和一些概念性的东西,为后面的示例做准备。在这里,我们简单的描述了jaeger是如何安装的,也是一些准备工作。

第二部分

  使用一个简单的java程序,来说明如何使用OpenTracing api进行trace的生成,并演示一个带有二个节点的调用链生成。

第三部分

  使用OkHttp3和SpringBoot,来演示如何实现一个分布式调用。本文依然是使用底层的api进行构建,对开发感觉好的到此应该能够应对各种场景。

第四部分

  以SpringCloud为例,说明微服务的调用链生成逻辑。由于各种调用内容较多,我们仅以比较流行的Feign调用来说明其原理。 SpringCloud的实现已经有了比较好的轮子,考虑的也比较全面,可以参考其源码进行分析。


  如果你在开发自己的中间件,或者做一些集成性的工作,本教程能够让你快速给自己的组件加入apm功能。前提是,你的api兼容OpenTracing协议。


整体介绍

对于监控体系和apm链路,小姐姐味道公众号有更加详细的描述,建议先读一下。

这么多监控组件,总有一款适合你

以下仅简要说明一下调用链的主要因素。

调用链主要因素数据收集部分

  主要用于多样化的数据收集,为数据分析做准备。要求易用好用侵入尽量小(开发工作量),并且在极端情况下(如收集组件不可用)不能对业务有任何影响。可以看到此部分的开发量是巨大的,尤其是需要集成Nginx上下游、基础组件多样、技术栈多样的情况下。

数据分析部分

  主要有实时分析与线下分析。一般,实时分析的价值更大一些,主要产出如秒级别的调用量、平均响应时间、TP值等。另外,调用链(Trace)需要存储全量数据,一些高并发大埋点的请求,会有性能问题。

监控报警

  此部分利用数据分析的产出,通过短信邮件等形式,通知订阅人关注。监控报警平台应尽量向devops平台靠拢,包括自主化服务平台。

为什么选用jaeger

  jaeger的开发较为活跃,而且它的模块划分是比较灵活的。在数据量非常大的情况下,数据是可以先用kafka缓冲一下的(同时为接入各种流分析平台做足了准备)。这些内容,我们在jaeger安装的部分顺便说明。

扩展方式

如果你的项目使用了SpringBoot,是非常方便进行扩展的。以下内容不止一次提起,读过的请忽略。

我们接下来实现的功能是:任何加了 @OwlTrace注解的方法,都将产生一条调用链信息。

首先,我们要定义一个注解:

import java.lang.annotation.*;@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface OwlTrace {}
然后,实现其处理类。代码通过AOP对Spring管理的Bean进行拦截,非常简单的实现了Trace信息的构造。代码如下:
import io.opentracing.Span;import io.opentracing.Tracer;import io.opentracing.tag.Tags;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.an����,ʶ��notation.Aspect;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Lazy;import java.util.LinkedHashMap;import java.util.Map;@Configuration@Slf4jpublic class OwlTraceAutoConfiguration {    static final String TAG_COMPONENT = "java";    @Autowired    @Lazy    Tracer tracer;    @Bean    public TracingAspect pxTracingAspect() {        return new TracingAspect();    }    @Aspect    class TracingAspect {        @Around("@annotation(com.sayhiai.arch.trace.annotation.OwlTrace)")        public Object pxTraceProcess(ProceedingJoinPoint pjp) throws Throwable {            Span span = null;            if (tracer != null) {                final String cls = pjp.getTarget().getClass().getName();                final String mName = pjp.getSignature().getName();                span = tracer.buildSpan(cls + "." + mName)                        .withTag(Tags.COMPONENT.getKey(), TAG_COMPONENT)                        .withTag("class", cls)                        .withTag("method", mName)                        .startActive(false)                        .span();            }            try {                return pjp.proceed();            } catch (Throwable t) {                Mapnew LinkedHashMap<>(2);                exceptionLogs.put("event", Tags.ERROR.getKey());                exceptionLogs.put("error.object", t);                span.log(exceptionLogs);                Tags.ERROR.set(span, true);                throw t;            } finally {                if (tracer != null && span != null) {                    span.finish();                }            }        }    }}

  最后,根据Spring的加载方式,将路径添加到src/main/resources/META-INF/spring.factories中:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\arch.trace.core.owl.OwlTraceAutoConfiguration,\arch.trace.core.log.LoggingAutoConfiguration

将组件打成jar包,一个spring boot starter就实现了。

使用

application.properties

确保开了AOP

# AOPspring.aop.auto=truespring.aop.proxy-target-class=trueopentracing.jaeger.log-spans=trueopentracing.jaeger.udp-sender.host=192.168.3.237opentracing.jaeger.udp-sender.port=5775

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net