1、Skywalking是什么

01、Apache SkyWalking 是一款开源、无侵入、一站式的可观测性(Observability)平台
02、主打分布式追踪 + 指标 + 日志三位一体
03、专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计
04、整体架构:
整体架构

2、下载

官网:https://skywalking.apache.org/
在这里插入图片描述
注意高版本的skywalking需要单独下载agent探针
在这里插入图片描述
下载解压apm之后将下载的agent放入apm的根目录,方便后续配置
agent:探针,负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器
OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能
Storage:数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,默认使用H2

3、新建项目测试

新建两个springboot项目便于测试user-service、edu-service
user-service pom主要配置

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
        <mybatis-plus.version>3.5.2</mybatis-plus.version>
        <openfegin.version>3.1.5</openfegin.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Cloud OpenFeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>${openfegin.version}</version>
        </dependency>

        <!-- Spring Cloud LoadBalancer -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>3.1.5</version>
        </dependency>

        <!-- Spring Cloud Alibaba Nacos Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.0.5.0</version>
        </dependency>
        <!-- SkyWalking 的日志工具包 -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>9.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

其中包含Nacos 注册中心、SkyWalking日志包、OpenFeign(调用edu-user服务)、LoadBalancer 负载均衡、mysql、mybatis-plus
edu-service pom主要配置

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
        <mybatis-plus.version>3.5.2</mybatis-plus.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Cloud Alibaba Nacos Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.0.5.0</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

其中包含Nacos 注册中心、mysql、mybatis-plus

4、部署探针

配置启动参数
在idea中配置参数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#Agent负责收集应用的性能数据、追踪信息
-javaagent:D:\apache-skywalking-apm-bin\agent\skywalking-agent.jar
#被监控服务的名称,唯一的名称以便于在UI界面识别和管理
-Dskywalking.agent.service_name=user-service
#SkyWalking后端收集器地址,可配置远程地址
-Dskywalking.collector.backend_service=localhost:11800

注意服务名不要重复user-service、edu-service

5、启动skywalking采集服务信息

进入skywalking安装bin目录,双击startup.bat即可启动
如需进行端口等其他配置,可操作/config/application.yml文件进行配置
在这里插入图片描述
启动后可以看到有两个窗口
Skywalking-Collector (OAP Server) 为核心应用服务作用是接收、分析、存储监控数据(链路、指标、日志)
Skywalking-Webapp (UI) 提供可视化控制台

启动成功之后访问http://localhost:8080/
skywalking控制台

6、测试接口服务监控

edu-service中application.yml配置

server:
  port: 8091
spring:
  application:
    name: edu-service
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
        namespace: ${NACOS_NAMESPACE:public}
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 数据库
    url: 
    username: 
    password: 
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml
  typeAliasesPackage: com.example.eduservice.demos.web.domain
  global-config:
    db-config:
      id-type: auto
      field-strategy: 0
      column-underline: true
      capital-mode: true
      logic-delete-value: 1
      logic-not-delete-value: 0
    refresh: false
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
    database-id: mysql

logging:
  level:
    root: INFO
    com.example.eduservice.mapper: DEBUG
    com.example.eduservice.demos.web.service: DEBUG

在edu-service中新增一个建议接口获取数据库中人员教育信息

@RequestMapping("/edu")
@RestController
public class TestUserEduController {

    @Autowired
    private TestUserEduService testUserEduService;

    @GetMapping("/getEduInfo")
    public List<TestUserEduDO> getEduInfo(TestUserEduDTO dto) {
        return testUserEduService.getEduInfo(dto);
    }
}

调用接口
在这里插入图片描述
查看skywalking控制台能否正常捕捉请求
在这里插入图片描述
图中可以看到skywalking正确记录了接口调用情况
下面使用微服务的方式来调用接口,看下skywalking的跟踪情况
user-service服务调用edu-service服务
user-service服务application.yml

server:
  port: 8090
spring:
  application:
    name: user-service
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
        namespace: ${NACOS_NAMESPACE:public}
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: 
    username: 
    password: 
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml
  typeAliasesPackage: com.example.userservice.demos.web.domain
  global-config:
    db-config:
      id-type: auto
      field-strategy: 0
      column-underline: true
      capital-mode: true
      logic-delete-value: 1
      logic-not-delete-value: 0
    refresh: false
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
    database-id: mysql
feign:
  client:
    config:
      default:
        loggerLevel: FULL
  compression:
    request:
      enabled: true
    response:
      enabled: true
logging:
  level:
    root: INFO
    com.example.userservice.mapper: DEBUG
    com.example.userservice.demos.web.service: DEBUG
    com.example.userservice.feign.EduClient: DEBUG

配置eduClient

@FeignClient(name = "edu-service")
public interface EduClient {

    @GetMapping("/edu/getEduInfo")
    List<TestUserEduDTO> getOrderById(@RequestParam("userId") Integer userId);

}

开启Nacos自动注入和FeignClient

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}

user-service接口

@RequestMapping("/user")
@RestController
public class TestUserController {

    @Autowired
    private TestUserService testUserService;

    @GetMapping("/getUserInfo")
    public TestUserVO getUserInfo(TestUserDTO dto) {
        return testUserService.getUserInfo(dto);
    }

    @GetMapping("/list")
    public TestUserVO list() throws InterruptedException{
        Thread.sleep(2000);
        return new TestUserVO();
    }
}

访问接口
在这里插入图片描述
查看skywalking跟踪情况
在这里插入图片描述
让edu-service服务报错看下能否追踪到某个服务接口异常情况

@Service
public class TestUserEduServiceImpl extends ServiceImpl<TestUserEduMapper, TestUserEduDO> implements TestUserEduService {

    @Autowired
    private TestUserEduMapper testUserEduMapper;

    @Override
    public List<TestUserEduDO> getEduInfo(TestUserEduDTO dto) {
        throw new RuntimeException("抛出异常-------");
//        return testUserEduMapper.selectList(Wrappers.<TestUserEduDO>lambdaQuery().eq(TestUserEduDO::getUserId,dto.getUserId()));
    }
}

再次访问接口后查询skywalking追踪情况
在这里插入图片描述
图中可以看到跟踪到了具体的edu-service请求异常

7、性能剖析

新建任务
在这里插入图片描述
/user/list做了延迟两秒处理,多次访问分析接口情况
在这里插入图片描述

可以看到skywalking追踪到了最终结果Thread.sleep

8、监控告警

config/alarm-settings.yml配置文件可自行配置
最近3分钟内服务的平均响应时间超过1秒
最近2分钟服务成功率低于80%
最近3分钟90%服务响应时间超过1秒
最近2分钟内服务实例的平均响应时间超过1秒

在这里插入图片描述

在这里插入图片描述

9、安全性

agent可跟随微服务所在服务器进行部署,SkyWalking OAP可以单独部署在一台服务器上或者分布式部署,只要保证微服务所在端口能正常连接SkyWalking OAP服务即可完成正常数据采集、分析等操作。
在这里插入图片描述

9、其他

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

后续更多的skywalking配置和控制台各功能的使用留待后续探索

更多推荐