skywalking(一)skywalking部署及集成Springboot进行简单入门
作者:mmseoamin日期:2023-12-21

文章目录

      • 一、简介
      • 二、docker-compose部署skywalking
      • 三、springboot集成skywalking
        • 1、下载解压 agent
        • 2、日志对接
          • (1)引入依赖
          • (2)添加配置文件
          • (3)代码中添加日志
          • 3、使用探针方式启动
            • (1)使用idea启动
            • (2)使用jar启动
            • (3)接口验证
            • 四、总结

              一、简介

                skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。 skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功能较完善。

              官网:https://skywalking.apache.org/

              Skywalking架构

              SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。

              • 探针 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式;
              • 平台后端 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等;
              • 存储 通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现;
              • UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

                二、docker-compose部署skywalking

                docker-compose使用方法请自行学习,这里不做赘述。docker-compose.yml文件如下:

                version: '3.8'
                services:
                  elasticsearch:
                    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6
                    container_name: elasticsearch
                    restart: always
                    ports:
                      - 9200:9200
                      - 9300:9300
                    environment:
                      - discovery.type=single-node
                      - TZ=Asia/Shanghai
                      - bootstrap.memory_lock=true
                      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
                    volumes:
                      - /skywalking/elasticsearch/data:/usr/share/elasticsearch/data
                    ulimits:
                      memlock:
                        soft: -1
                        hard: -1
                  oap:
                    image: docker.io/apache/skywalking-oap-server:9.4.0
                    container_name: oap
                    depends_on:
                      - elasticsearch
                    restart: always
                    ports:
                      - 11800:11800
                      - 12800:12800
                    environment:
                      SW_CORE_RECORD_DATA_TTL: 15
                      SW_CORE_METRICS_DATA_TTL: 15
                      SW_STORAGE: elasticsearch
                      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
                      SW_ENABLE_UPDATE_UI_TEMPLATE: true
                      TZ: Asia/Shanghai
                      JAVA_OPTS: "-Xms2048m -Xmx2048m"
                  ui:
                    image: docker.io/apache/skywalking-ui:9.4.0
                    container_name: ui
                    depends_on:
                      - oap
                    links:
                      - oap
                    restart: always
                    ports:
                      - 8080:8080
                    environment:
                      SW_OAP_ADDRESS: http://oap:12800
                      SW_ZIPKIN_ADDRESS: http://oap:9412
                

                  正常执行之后,大概需要1分钟左右的时间等待,在浏览器端输入 http://IP:8080,即可看到如下的界面,刚启动没有数据的(不需要登录)。整个过程没有坑点,一次就好。

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第1张

                UI的使用在后文中介绍。

                三、springboot集成skywalking

                准备一个简单的springboot web工程。

                1、下载解压 agent

                注意:agent版本和oap版本需要适配,版本不适配可能会出现页面无法访问、agent上报不到页面等问题。

                下载地址: https://skywalking.apache.org/downloads/

                作者用的skywalking版本为9.4.0,下载v8.16.0版本的client没有问题,亲测可用。

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第2张

                代码结构如下图所示:

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第3张

                  需要配置skywalking-agent文件夹下,config/agent.config配置文件,列出最关键的两个配置,其他配置大家可以自行摸索。

                agent.service_name=${SW_AGENT_NAME:HS}
                collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.54.53:11800}
                
                2、日志对接

                  在skywalking的UI端有一个日志的模块,用于收集客户端的日志,默认是没有数据的,那么需要如何将日志数据传输到skywalking中呢?

                skywalking支持如下方式的的日志接入方式

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第4张

                下来使用springboot默认的logback为例子介绍一下如何配置,

                (1)引入依赖
                        
                        
                            org.apache.skywalking
                            apm-toolkit-logback-1.x
                            8.12.0
                        
                        
                            org.apache.skywalking
                            apm-toolkit-trace
                            8.12.0
                        
                
                (2)添加配置文件

                新建一个logback-spring.xml放在resource目录下,配置如下:

                
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                        
                            ${CONSOLE_LOG_PATTERN}
                        
                    
                    
                    
                        ${log.path}/debug.log
                        
                            ${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz
                            50MB
                            30
                        
                        
                            %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
                        
                    
                    
                    
                        ${log.path}/error.log
                        
                            ${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz
                            50MB
                            30
                        
                        
                            %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
                        
                        
                            ERROR
                        
                    
                    
                        
                            
                                %d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n
                            
                        
                    
                    
                        
                            
                                %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n
                            
                        
                    
                    
                    
                        
                    
                    
                    
                        
                        
                        
                        
                        
                    
                
                
                (3)代码中添加日志
                    @RequestMapping(value = "/test", method = RequestMethod.GET)
                    @ApiOperation(value = "测试")
                    public ModelMap test(){
                        ModelMap modelMap = new ModelMap();
                        modelMap.addAttribute("code", "success");
                        log.info(modelMap.toString());
                        return modelMap;
                    }
                
                3、使用探针方式启动
                (1)使用idea启动

                ​ 配置VM options

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第5张

                javaagent配置的参数即skywalking-agent的绝对路径。

                -javaagent:D:\code\test\HS\src\main\skywalking-agent\skywalking-agent.jar
                

                启动工程

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第6张

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第7张

                会发现Skywalking里已经有了日志,与idea控制台的日志一致。

                (2)使用jar启动

                与idea一样,启动时配置VM options即可

                java -javaagent:D:\code\test\HS\src\main\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=HS -Dskywalking.collector.backend_service=192.168.54.53:11800 -jar app.jar
                
                (3)接口验证

                调用web接口

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第8张

                skywalking(一)skywalking部署及集成Springboot进行简单入门,在这里插入图片描述,第9张

                四、总结

                  skywalking上手与springboot集成过程中,基本没遇到啥坑点,整个过程比较顺利,不亏是Apache的顶级项目。过程记录下来,希望能帮到各位,下一篇主要介绍skywalking与Apisix的集成,敬请期待!

                  打完手工。