2025-skywalking组件

news/2025/2/26 0:54:03

历史版本下载地址:Apache Archive Distribution Directory

官网:Apache SkyWalking

目录

. webapp: UI前端(web 监控页面)的jar包和配置文件;
. oap-libs:后台应用的jar包,以及它的依赖jar包,里边有一个server-starter-*.jar就是启动程序;. config:启动后台应用程序的配置文件,是使用的各种配置
. bin:各种启动脚本,一般使用脚本startup.*来启动web页面和对应的后台应用;

    . oapService.*:默认使用的后台程序的启动脚本;(使用的是默认模式启动,还支持其他模式,各模式区别见启动模式)
    . oapServicelnit.*:使用init模式启动;在此模式下,OAP服务器启动以执行初始化工作,然后退出
    . oapServiceNolnit.*:使用no init模式启动;在此模式下,OAP服务器不进行初始化。
    . webappService.*: UI前端的启动脚本;
    . startup.*:组合脚本,同时启动oapService.*:、webappService.*脚本;

修改端口: apache-skywalking-apm-es7-8.5.0\apache-skywalking-apm-bin-es7\webapp

启动 

启动两个窗口  成功

启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui

skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml

默认端口是 8080   这里我改成 8868了 访问地址: 127.0.0.1:8868

注意、注意、注意 服务启动需要有 Gateway  网关服务,如没网关这里会没有数据的

idea 配置skywalking 

# skywalking‐agent.jar的本地磁盘的路径
-javaagent:C:\Users\xu\Desktop\daima\apache-skywalking-apm-es7-8.5.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
# 在skywalking上显示的服务名
-DSW_AGENT_NAME=gateway-service
# skywalking的collector服务的IP及端口
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

 手动复制 gateway 网关依赖包

注意:此处存在bug,追踪链路不显示gateway

解决方案:拷贝agent/optional-plugins目录下的gateway插件和webflux插件到agent/plugins目录

使用带 网关 的服务

注意 这里 启动服务后 需要等一会才能注册到 skywalking 服务里面

但是此时这里还没有数据,因为 skywalking 是懒加载的,需求通过网关请求一个接口

随便请求一个地址  

此时就出现数据了,请求的url地址也出现了(如果没有数据 多等一会,这会有延迟)

 有时候手动刷新 或者 F5 不生效 ,点击右上角的自动刷新  就出来了

注意版本问题,如果版本不对,会报错,类似如下

Error for HTTP POST "/auth/login"
java.lang.NullPointerException: null
	at org.apache.skywalking.apm.plugin.spring.cloud.gateway.v21x.HttpClientFinalizerResponseConnectionInterceptor$1.apply(HttpClientFinalizerResponseConnectionInterceptor.java:42)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
	*__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
	*__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
	*__checkpoint ⇢ HTTP POST "/auth/login" [ExceptionHandlingWebHandler]
Original Stack Trace:
		at org.apache.skywalking.apm.plugin.spring.cloud.gateway.v21x.HttpClientFinalizerResponseConnectionInterceptor$1.apply(HttpClientFinalizerResponseConnectionInterceptor.java:42)
		at org.apache.skywalking.apm.plugin.spring.cloud.gateway.v21x.HttpClientFinalizerResponseConnectionInterceptor$1.apply(HttpClientFinalizerResponseConnectionInterceptor.java:37)
		at reactor.netty.http.client.HttpClientFinalizer.lambda$responseConnection$4(HttpClientFinalizer.java:101)
		at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:163)
		at reactor.core.publisher.SerializedSubscriber.onNext(SerializedSubscriber.java:99)
		at reactor.core.publisher.FluxRetryWhen$RetryWh

刚开始使用的 是 8.5版本,会报错,错误信息 如上所示,

更换8.7版本 可以正常使用,报错是因为 gateway的版本问题

  使用 apm-spring-cloud-gateway-2.1.x-plugin-8.7.0 报错

  使用 apm-spring-cloud-gateway-3.x-plugin-8.7.0 不报错,

  可以将这个 apm-spring-cloud-gateway-3.x-plugin-8.7.0 插件复制到 8.5 版本里面测试,这样也可以,说明网关插件问题

注意idea 的配置 jar 路径,如果切换 skywalking的版本,idea 也要更新

-javaagent:C:\Users\xu\Desktop\daima\apache-skywalking-apm-es7-8.7.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=user-service
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

 将这个 apm-spring-cloud-gateway-3.x-plugin-8.7.0 插件复制到 8.5 版本里面测试

 访问成功

linux环境部署

准备一个springboot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行配置SkyWalking Agent来追踪微服务;

startup.sh脚本:

#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot-skywalking-demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=-javaagent:/root/skywalking-agent/skywalking-agent.jar
java $JAVA_AGENT -jar springboot-skywalking-demo-0.0.1-SNAPSHOT.jar #jar启动

等同于

java -javaagent:/root/skywalking-agent/skywalking-agent.jar 
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 
-DSW_AGENT_NAME=springboot-skywalking -jar springboot-skywalking-0.0.1-SNAPSHOT.jar

skywalking 持久化

修改配置文件

新建数据库  表结构不需要创建,启动 skywalking 时会自动创建表

此时启动失败

只启动一个服务,另外一个服务 skywalking-oap-server 自动关闭了

需要查询日志

查看日志 

缺少mysql的驱动

去项目里面找个mysql的驱动

将驱动复制到oap-libs里面

重新启动,两个服务都启动成功

 数据库开始创建表  供创建了146张表

重启springboot 的服务后 随便请求某个接口,请求成功

重启 skywalking的 服务

springboot 服务没启动

skywalking的数据还都存在,说明持久化成功

自定义SkyWalking链路追踪

引入依赖

<!-- SkyWalking 工具类 -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.5.0</version>
</dependency>

在 services 层添加注解  @Trace,   @Trace将方法加入追踪链路

如果一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上@Trace注解即可

 

加入@Tags或@Tag

        我们还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。实现方式:在方法上增加@Tag或者@Tags。 
@Tag 注解中 key = 方法名 ; value = returnedObj 返回值 arg[0] 参数

注意、注意、注意 实体类需要重写 toString() 方法,否则打印的是对象的地址

打印参数

注意、注意、注意   如果使用 Tag或者 Tags 注解,必须使用 @Trace注解 

 @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "SysLogs", value = "returnedObj")})

 继承父类

 使用 @Tag

 @Tag(key = "selectIPage", value = "returnedObj")

性能剖析

新建任务, 选择服务  指定url(断点名称)  然后点击左下角的新建任务

然后开始请求接口,多请求几次,这里我设置的是默认值 5 (最大采样数)

在services 睡眠 2 秒钟

 可以看到 这里 打印的时间

点击分析  可以分析出来哪个地方的代码有问题

Skywalking集成日志框架

引入依赖  skywalking 和  logback 整合的依赖包

        <!--  skywalking 和  logback 整合的依赖包   -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>8.5.0</version>
        </dependency>
 

配置  logback-spring.xml  日志文件  配置  [%tid] 

打印出tid

 根据TID查询 

通过 grpc 上传日志到 skywalking

    <!-- 通过grpc上报日志到skywalking oap-->
    <appender name="grpc-log" 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.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
<!--系统操作日志-->
<root level="info">
    <appender-ref ref="console"/>
    <appender-ref ref="file_info"/>
    <appender-ref ref="file_error"/>
    <appender-ref ref="grpc-log"/>
</root>

重启服务  然后 请求接口

如果不显示数据  修改下查询时间范围 

随便点击某个字段  就可以查看某一行的日志数据

注意、 注意、 注意、  如果skywalking 是部署到远程服务器的话,日志 就不能上报成功,需要修改配置文件 到 远程服务器skywalking 的信息

打开agent/config/agent.config配置文件,添加如下配置信息:

去官网里面获取以下信息

skywalking/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md at v8.5.0 · apache/skywalking · GitHub

 配置如下

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

 在文件的最后  配置

Skywalking告警通知 此处省略后续补充


http://www.niftyadmin.cn/n/5867003.html

相关文章

API返回的数据结构包含哪些字段?

淘宝商品详情API返回的数据结构较为复杂&#xff0c;具体字段会根据API的版本和请求参数有所不同。以下是基于最新搜索结果的API返回值字段说明&#xff1a; 基础字段 num_iid&#xff1a;商品的唯一标识ID。 title&#xff1a;商品标题&#xff0c;用于描述商品名称或特点。…

C++:pthread线程分离和线程属性

在 C 的多线程编程中&#xff0c;pthread 库提供了强大的功能来管理线程。其中&#xff0c;线程分离和线程属性是两个重要的概念&#xff0c;它们对于优化线程的行为和资源管理有着关键作用。 线程分离 1.1 什么是线程分离 在 pthread 库中&#xff0c;线程有两种状态&#…

从零开始的网站搭建(以照片/文本/视频信息通信网站为例)

本文面向已经有一些编程基础&#xff08;会至少一门编程语言&#xff0c;比如python&#xff09;&#xff0c;但是没有搭建过web应用的人群&#xff0c;会写得尽量细致。重点介绍流程和部署云端的步骤&#xff0c;具体javascript代码怎么写之类的&#xff0c;这里不会涉及。 搭…

【Qt之QQuickWidget】QML嵌入QWidget中

由于我项目开始使用Widgets,换公司后直接使用QML开发&#xff0c;没有了解过如何实现widget到qml过渡&#xff0c;恰逢面试时遇到一家公司希望从widget迁移到qml开发&#xff0c;询问相关实现&#xff0c;一时语塞&#xff0c;很尴尬&#xff0c;粗略研究并总结下。 对qwidget嵌…

Html 5简介(学习笔记)

基本标签 1. 换行标签 <br> <br>2. 链接标签 <a> <a href"https://www.example.com" target"_blank">网站</a>href&#xff1a;指定链接地址。 target&#xff1a; _blank&#xff1a;在新标签页打开。_self&#xff08…

取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票

在做航班智能客服问答系统时会遇到取消票证的场景&#xff0c;这里涉及数据库的操作时会把指定的票证从数据库中删除&#xff0c;同时也会把票证和航班等相关表中的关联关系一起删除。但在删除之前&#xff0c;需要先检查当前用户是否拥有这张票&#xff0c;只有票主才有权限取…

FastAPI系列:Ubuntu部署FastAPI项目实战

这篇文章提供了在Ubuntu上部署FastAPI应用程序的详细指南。首先&#xff0c;读者将学习如何创建项目目录并设置Python虚拟环境&#xff0c;接着安装FastAPI、Uvicorn和Gunicorn等必要依赖。随后&#xff0c;文章指导用户编写基本的FastAPI应用程序代码&#xff0c;并使用Gunico…

文字语音相互转换

目录 1.介绍 2.思路 3.安装python包 3.程序&#xff1a; 4.运行结果 1.介绍 当我们使用一些本地部署的语言模型的时候&#xff0c;往往只能进行文字对话&#xff0c;这一片博客教大家如何实现语音转文字和文字转语音&#xff0c;之后接入ollama的模型就能进行语音对话了。…