Skywalking快速入门

Skywalking快速入门

1、官方地址:Apache SkyWalking

2、下载源码

在这里插入图片描述
在这里插入图片描述

3、skywalking重要参考文档

深入理解 Skywalking Agent
Skywalking+Elasticsearch安装及应用(邮箱告警)
官方向导方案:incubator-skywalking/blob/5.x/docs/README.md
中文文档在这里:incubator-skywalking/blob/5.x/docs/README_ZH.md
Centos安装skywalking 8.9.1
Skywalking集群搭建
Skywalking集群部署
SkyWalking的官方下载地址地址
Skywalking的UI端日志监控如何做、性能剖析如何做、监控告警如何做
基于 SkyWalking 实现服务链路追踪
分布式链路追踪系统_SkyWalking 搭建使用
skywalking后端-官网文档
芋道 Spring Boot 链路追踪 SkyWalking 入门
芋道 Spring Cloud 链路追踪 SkyWalking
skywalking09 - 异步线程链路续接(下)
swUI使用全攻略
SkyWalking8.7源码解析(六):ExitSpan和LocalSpan、链路追踪上下文、上下文适配器ContextManager、DataCarrier、链路数据发送到OAP
skywalking插件开发指南-Skywalking 6.2.0中文文档
skywalking插件开发指南-Skywalking 6.2.0中文文档
skywalking插件开发指南-Skywalking 8.0.0中文文档
Spring Cloud Sleuth + Zipkin 实现服务追踪

4、Skywalking源码解析

1)源码分析[一定要看]:https://skywalking.apache.org/zh/2022-03-25-skywalking-source-code-analyzation/
2)源码解析的文章:
https://blog.csdn.net/qq_40378034/article/details/121882943
https://blog.csdn.net/qq_40378034/article/details/122145509
https://blog.csdn.net/qq_40378034/article/details/122278500

5、Skywalking重点部分-插件的实现和原理

其实Skywalking的核心就是插桩(插件)的实现,其他部分都是为采集出来的数据做服务。

为更好的了解插件体系,强烈建议读一下官方Java-Plugin-Development-Guide.md文档:/apache-skywalking-java-agent-8.9.0/docs/en/setup/service-agent/java-agent/Java-Plugin-Development-Guide.md

5.1 自定义插件的开发

插件分为两类:Tracing plugin、Meter Plugin

1)自定义链路收集插件之Tracing plugin的开发
追踪插件的基本方法是通过使用字节码操作技术和 AOP 概念来拦截 Java 方法,SkyWalking 封装了字节码操作技术和追踪上下文传播, 所以你只需要定义拦截点(也就是 Spring 中的切入点)。

SkyWalking 提供了两种API来拦截构造函数、实例方法和类方法:
介绍下第一种:

继承ClassInstanceMethodsEnhancePluginDefine类,定义构造方法拦截点和实例方法拦截点。
继承ClassStaticMethodsEnhancePluginDefine类来定义 class method 的截点。

通过继承ClassInstanceMethodsEnhancePluginDefine类来实现插件的步骤。
step1、定义一个需要增强的目标类

@Override
protected ClassMatch enhanceClass() {
    // 需要增强的类的全限定名
    return NameMatch.byName("com.dhgate.apsaras.access.filter.ApsarasProxyFileter");
}

ClassMatch 表示如何匹配目标类。有4种方式:

  1. byName:基于完整的类名(包名.类名)。
    
  2. byClassAnnotationMatch:取决于目标类中是否存在某些注解(注意:不支持继承而来的注解)。
    
  3. byMethodAnnotationMatch:取决于目标类的方法中是否有某些注解(注意:不支持继承而来的注解)。
    
  4. byHierarchyMatch:基于目标类的父类或接口(官方不建议用这个,有很大的性能问题)。
    

step2、定义一个实例方法拦截点

@Override
public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
    return new InstanceMethodsInterceptPoint[] {
        new InstanceMethodsInterceptPoint() {

            /**
             * @return 类某个具体的实例方法的匹配器
             */
            @Override
            public ElementMatcher<MethodDescription> getMethodsMatcher() {
                return named("invoke");
            }

            /**
             * @return 表示一个类名,类实例必须是instanceof InstanceMethodsAroundInterceptor。
             */
            @Override
            public String getMethodsInterceptor() {
                return "org.apache.skywalking.apm.plugin.asf.dubbo.DubboInterceptor";
            }

            @Override
            public boolean isOverrideArgs() {
                return false;
            }
        }
    };
}

step3、将自定义的插件类添加到skywalking-plugin.def配置文件中
比如:

dubbo-2.7.x=org.apache.skywalking.apm.plugin.asf.dubbo.DubboInstrumentation

why?

SkyWalkingAgent加载插件包--->new PluginBootstrap().loadPlugins()--->PluginResourcesResolver.getResources

step4、实现一个拦截器
自定义一个实例方法拦截器,并实现org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor,该接口声明了在调用方法之前和之后以及在异常处理期间使用核心 API。

/**
 * A interceptor, which intercept method's invocation. The target methods will be defined in {@link
 * ClassEnhancePluginDefine}'s subclass, most likely in {@link ClassInstanceMethodsEnhancePluginDefine}
 */
public interface InstanceMethodsAroundInterceptor {
    /**
     * 在目标方法调用之前调用
     *
     * @param result 拦截这个方法改变之后的结果
     * @throws Throwable
     */
    void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInterceptResult result) throws Throwable;

    /**
     * 在目标方法调用之后调用。注意该方法会抛出异常。
     *
     * @param ret 方法的原返回值
     * @return 该方法的实际返回值
     * @throws Throwable
     */
    Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable;

    /**
     * 发生异常时调用该方法。
     *
     * @param t the exception occur.
     */
    void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Throwable t);
}

比如 DubboInterceptor。

2)自定义计量 API 各项指标插件之Meter Plugin开发
Meter Plugin代理插件可以使用计量 API 来收集用于后端分析的各项指标。

核心API:

Counter API 代表一个单调递增的计数器,它自动收集数据并报告给后端。

像UI界面展示的jvm图标信息等一系列的图标信息,都是通过此类插件收集上报到backend server端实现的:
在这里插入图片描述
在这里插入图片描述

6、 skywalking 的OAP是怎么将采集的信息储存到es中

1)链路数据发送到OAP Server

链路数据是agent探针里面定义的插件拦截功能收集到数据之后,通过grpc发送到OAP服务,OAP服务异步分析处理上报的数据,把数据解析为各个指标模块然后落库。
在这里插入图片描述
2)OAP Server将链路数据存储到ES中
在这里插入图片描述

8、探针的安装和测试

8.1 本地编译打包APM

mvn clean package -Dmaven.test.skip=true

8.2 jenkins构建agent

jenkins构建地址:dhgate-skywalking-agent [Jenkins]

本地测试

step1、启动oap server和UI,有两种方式

1)第一种:直接IDEA中启动:

OAP Server启动入口:apache-skywalking-apm-8.9.1/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerStartUp.java

skywalking UI启动入口:apache-skywalking-apm-8.9.1/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/ApplicationStartUp.java

2)第二种:解压编译打包出的,进入到bin目录,一键启动oap和web:

tar -xzvf apache-skywalking-apm-bin.tar.gz
cd /apache-skywalking-apm-bin/bin
./startup.sh
在这里插入图片描述

step2、编译apache-skywalking-java-agent-8.9.0
在这里插入图片描述
复制skywalking-agent.jar全路径,准备jvm参数:

-javaagent:/Users/yuanjiabo/Downloads/skywalkingdeploy/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.sample_n_per_3_secs=1000
-Dskywalking.agent.service_name=dhgate-xxx-xxx
-Dskywalking.agent.env_sign=G3 (or G4)
-Dskywalking.collector.backend_service=127.0.0.1:11800

step3、修改idea启动类运行配置,添加VM options参数:
在这里插入图片描述
step4、启动工程,访问工程里面的接口

step5、打开本地skywalking UI界面:http://localhost:8688/,即可查看链路追踪信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值