码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Skywalking快速入门


    Skywalking快速入门

    文章目录

    • 1、官方地址:[Apache SkyWalking](https://skywalking.apache.org/)
    • 2、下载源码
    • 3、skywalking重要参考文档
    • 4、Skywalking源码解析
    • 5、Skywalking重点部分-插件的实现和原理
      • 5.1 自定义插件的开发
    • 6、 skywalking 的OAP是怎么将采集的信息储存到es中
    • 8、探针的安装和测试

    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
    
    • 1

    5.1 自定义插件的开发

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

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

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

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

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

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

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

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

    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;
                }
            }
        };
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

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

    why?

    VPUML快速入门
    pdf 5星 超过95%的资源 1.67MB
    下载
    SkyWalkingAgent加载插件包--->new PluginBootstrap().loadPlugins()--->PluginResourcesResolver.getResources
    
    • 1

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    比如 DubboInterceptor。

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

    核心API:

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

    像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

    海康DS-19A00-BN(G)快速入门手册
    PDF 0星 超过10%的资源 2.18MB
    下载

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

  • 相关阅读:
    mac m1 docker安装nacos
    【vue2 vuex】store state mutations actions状态管理(草稿一留存)
    Unable to find main class
    2.最长公共子串
    10.20记录纪要
    JAVA集合01_Collection接口概述、常用方法、集合和数组互转、3种遍历方式
    2023 css新特性简单总结
    计算机毕业设计(附源码)python影院售票系统
    “今天星期五“-SAP SE09/STMS 请求号传输中遇到的错误及解决方案
    STM32+2.9inch微雪墨水屏(电子纸)实现显示
  • 原文地址:https://blog.csdn.net/want_you_gogo/article/details/126099734
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号