初识Skywalking

embedded/2025/2/28 4:11:35/

     背景

        筒子们,最近雷袭又接触到一项新工具: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.ppmy.cn/embedded/167713.html

相关文章

电脑软件:推荐一款非常强大的视频音频转换剪辑工具FFmpeg Batch AV Converter V3.12

目录 一、软件介绍 二、软件功能 三、软件特点 四、使用技巧 在多媒体处理领域&#xff0c;FFmpeg Batch AV Converter以其强大的功能和便捷的操作方式&#xff0c;成为了许多用户的首选工具。这款软件以其高效的批量处理能力、直观的图形用户界面&#xff08;GUI&#xff…

亚马逊云科技MySQL托管服务:Amazon RDS for MySQL的技术优势与成本优化实践

引言&#xff1a; 在数字化转型的浪潮中&#xff0c;数据库作为企业核心业务的“中枢神经”&#xff0c;其稳定性、性能及成本直接影响企业的运营效率和竞争力。然而&#xff0c;自建MySQL数据库的复杂性、运维成本高企、扩展性不足等问题&#xff0c;始终是开发者与…

mac 下 java 调用 gurobi 不能加载 jar

在 mac 电脑中的 java 始终不能加载 gurobi 的 jar 包&#xff0c;java 的开发软件 eclipse&#xff0c;idea 总是显示找不到 gurobi 的 jar 包&#xff0c;但是 jar 包明明就在那里。 摸索了三个小时&#xff0c;最后发现原因竟然是&#xff1a; jar 包太新&#xff0c;替换…

使用Python开发PDF文本提取工具

在日常工作中&#xff0c;我们经常需要从PDF文档中提取文本内容。虽然市面上有不少相关工具&#xff0c;但它们要么功能过于复杂&#xff0c;要么使用不够方便。本文将介绍如何使用Python开发一个简单实用的PDF文本提取工具&#xff0c;该工具具有图形界面&#xff0c;操作简单…

危化品经营单位安全管理人员的职责及注意事项

危化品经营单位安全管理人员肩负着保障经营活动安全的重要责任&#xff0c;以下是其主要职责及注意事项&#xff1a; 职责 1. 安全制度建设与执行&#xff1a;负责组织制定本单位安全生产规章制度、操作规程和生产安全事故应急救援预案&#xff0c;确保这些制度符合国家相关法…

针对视频内容进行检测开源项目

以下是10个可以实现视频是否涉及擦边或黄色内容检测的免费开源GitHub项目推荐&#xff1a; 1. **OpenNSFW2** OpenNSFW2 是一个用于检测图片和视频是否包含成人内容的开源库。它基于深度学习模型&#xff0c;能够实时分析视频帧并给出概率值&#xff0c;判断内容是否涉及…

【Http和Https区别】

概念&#xff1a; 一、Http协议 HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议&#xff0c;主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议&#xff0c;客户端通常…

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…