当前位置: 首页 > article >正文

初识Skywalking

     背景

        筒子们,最近雷袭又接触到一项新工具:Skywalking,本着好东西要和大家分享的原则,在对它有了初步了解,草草的进行了实践之后,就迫不及待的把它推荐给大家了。在写本篇博客时,本人对Skywalking的了解还比较粗浅,仅限于对它做个入门前的介绍,大佬们看了之后不要笑我哈。

     Skywalking介绍

        SkyWalking是一个开源的可观测平台,用于从服务和云原生基础设施收集,分析,聚合及可视化数据。它提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。它还是一个现代化的应用程序性能监控(Application Performance Monitoring)系统,尤其专为云原生、基于容器的分布式系统设计。

        Skywalking的服务网格接收器可以让Skywalking接收来自服务网格框架(例如Istio,Linkerd)的遥测数据,以帮助用户理解整个分布式系统。使用SkyWalking时, 用户可以看到服务与端点之间的拓扑结构,每个服务/服务实例/端点的性能指标,还可以设置报警规则。

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

         

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

        有关于Skywalking的详细介绍,可以看Apache SkyWalking官网和SkyWalking 文档中文版。

     SpringBoot与Skywalking

        看了上面的介绍,相信大家对Skywalking都有了一定的了解,那么怎么在工作中使用它呢?接下来咱们以一个SpringBoot项目为例,讲述SkyWalking在Java项目中的使用过程。

        1、下载Skywalking安装包,安装包地址见链接和下图。其中SkyWalking APM是监控系统,Java Agent是Java探针,两个都要下载。

        2、下载了SkyWalking APM完成后,在本地解压打开,其目录说明如下:

        

        webapp:UI前端jar包及配置文件,该文件夹内可修改前端端口(8080)。
        oap-libs:后台应用的jar包,以及依赖,里面server-starter-10.1.0.jar是启动程序
        config:启动后台应用程序的配置文件,使用的各种配置。主要是application.yml。
        bin:各种启动脚本,一般使用startup.sh来启动页面和后端应用。
                |----oapService.bat:默认使用的后台程序启动脚本;
                |----oapServiceInit.bat:使用init模式启动;在此模式下,OAP服务器启动以执行初始化工作,然后退出。
                |----oapServiceNoInit.bat:使用no init模式启动;在此模式下,OAP服务器不进行初始化。
                |----webappService.bat:UI前端的启动脚本
                |----startup.bat:组合脚本,同时使用oapService.sh,webappService.sh脚本

        下图是skywalking/config/application.yml文件,该文件是用于skywalking apm的基础配置,几个主要的配置如下:

                cluster:集群相关配置

                core:核心配置

                storage:数据存储配置(默认h2,最常改的就是这个)

                agent-analyzer:接收探针代理配置

                log-analyzer:日志分析

                receiver-sharding-server:共享服务器

                configuration:远程服务器配置

                receiver:数据接收器

        

        从这些配置也可以看出,Skywalking的扩展能力极强,支持多种数据存储方式和集群方式。为方便实践,本次不对配置文件作任何修改。大家在实践时可以根据自己的需要进行调整。

        3、启动控制台,Windows环境下直接双击/bin/startup.bat,然后就可以打开http://localhost:8080查看控制台。

        

        

        至此,Skywalking的控制台就起来了,skywalking-web-ui 的端口默认为8080,skywalking-oap-server服务启动后默认开启11800和12800端口,分别用于收集监控数据(11800)、接受前端请求(12800),这些端口都可以修改,这里暂时不作变更。

        4、通过Idea创建一个SpringBoot空的项目,仅包含一个测试的Controller。

package com.leixi.basic.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 *
 * @author 雷袭月启
 * @since 2024/12/5 19:39
 */
@RestController
public class DemoController {
    private final static Logger logger = LoggerFactory.getLogger(DemoController.class);
    @GetMapping("/demo")
    public Object demo(String str) {
        logger.info("Get in demo, the str is:{} ", str);
        return "Hello World " + str;
    }
}

        5、点击Idea右上角的Edit Configuration,在VM Options里添加以下内容:

-javaagent:D:/software/skywalking-agent/skywalking-agent.jar 
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 
-DSW_AGENT_NAME=leixi-server

          解释如下:

        -javaagent:用于配置skywalking-agent.jar的地址,即第一步下载解压的java agent地址。

        -DSW_AGENT_COLLECTOR_BACKEND_SERVICES:用于配置Skywalking控制台接收信息的地址

        -DSW_AGENT_NAME:用于配置本服务在控制台中显示的名称。

        6、启动项目,通过浏览器执行请求:http://127.0.0.1:19200/leixi/demo?str=1,在查看控制台-服务,就可以看到相关数据:

        

        

        

        7、接下来咱们玩花一点,创建三个服务并注册到Nacos里,通过服务一调服务二,服务二调服务三,三个服务都配置上Skywalking,测试下它的链路跟踪功能,Springboot+Nacos的服务搭建见我之前的博客:SpringBoot+Nacos+feign微服务调用,测试结果如下:

        

        

        

        以下是Skywalking的监控情况:

        

        

        

        8、上面是通过Idea的方式集成Skywalking,那么在测试、生产环境呢,总不能还用Idea启动项目吧!别急别急,启动jar包时集成Skywalking同样很简单,只需要使用以下命令即可:

        java -javaagent:D:/software/skywalking-agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 -DSW_AGENT_NAME=leixi-server -jar xxx.jar

        

       9、如果想在skywalking中看到springboot微服的日志信息,可以在pom.xml中添加以下依赖:

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>9.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>9.3.0</version>
        </dependency>

        然后,在resources文件夹下创建logback-spring.xml:

<configuration debug="false" scan="false">
    <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
    <property name="log.path" value="logs/${spring.application.name}"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- Console log output -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- Log file debug output -->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Log file error output -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="grpc" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    <!--nacos 心跳 INFO 屏蔽-->
    <logger name="com.alibaba.nacos" level="OFF">
        <appender-ref ref="error"/>
    </logger>

    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
    <root level="INFO">
        <!-- <appender-ref ref="console"/>-->
        <appender-ref ref="debug"/>
        <appender-ref ref="error"/>
        <appender-ref ref="stdout"/>
        <appender-ref ref="grpc"/>
    </root>
</configuration>

         再重新启动项目,就可以在skywalking控制台看到服务的日志信息了:

        

        综上,Skywalking确实能直观的监控到各服务之间的调用情况,反映整个系统的服务拓扑结构。这让我想到了SpringCloud大礼包里的Sleuth,但综合对比来看,Skywalking明显比Sleuth更有性价比。

     后记与致谢

        以上就是今天分享的全部内容了,因为本文着重于介绍Skywalking在Windows环境下的搭建,以及它与SpringBoot项目的集成,服务链路监控,所以对它的其他特性如性能监控,日志监控等并没有深入介绍,读者可以自行实践。

        在整理这篇博客时,雷袭同样参考了许多大佬的资料,以下是雷袭觉得很有价值的,分享给大家,同样拜谢大佬!

        SkyWalking Server配置文件详解-CSDN博客

        skywalking教程 文档手册 使用详情 从搭建到集群

        Skywalking的存储配置与调优

        Skywalking安装部署,在springboot中的使用

        Skywalking学习及整合springboot

        skywalking部署及集成Springboot进行简单入门


http://www.kler.cn/a/563901.html

相关文章:

  • MuMu模拟器Pro for Mac 安卓手机平板模拟器
  • 在 WPF 项目中集成 Hangfire
  • 防爆手机科普:与普通手机的区别?在危险作业场景扮演什么角色?
  • DeepSeek开源周第二弹:DeepEP如何用RDMA+FP8让MoE模型飞起来?
  • Vue 项目中配置代理的必要性与实现指南
  • ZT15 小红的区间查询
  • FastAPI系列:Ubuntu部署FastAPI项目实战
  • 【MySQL篇】表的操作
  • Vue.js组件开发:从基础到进阶
  • Burp Suite Professional 2024版本安装激活指南
  • 算法系列之递归反转单链表
  • 四款 AI 协作办公工具,AI工具库革新办公效率
  • 2025年软考报名费用是多少?全国费用汇总!
  • Hive从入门到运用
  • win11本地部署deepseek大模型(安装ollama+docker+open-webui)最终实现自己的项目可通过API调用投喂数据后的模型
  • 关于order by的sql注入实验
  • 若依框架集成阿里云OSS
  • ElasticSearch13-8.x操作
  • MySQL(面试题 - 同类型归纳面试题)
  • Linux 常用命令大全及详解