微服务-springcloud-springboot-Skywalking详解(下载安装)

一、SkyWalking核心介绍

1. 什么是SkyWalking?

Apache SkyWalking是一款国人主导开发的开源APM(应用性能管理)系统 ,2015年由吴晟创建,2017年进入Apache孵化器,2019年毕业成为Apache顶级项目。它通过分布式追踪、服务网格遥测分析、指标聚合和可视化一体化解决方案,提供分布式系统的观测性能力

核心特点:
  • 多语言自动探针:支持Java、.NET Core、Node.js、PHP、Golang等十余种语言

  • 服务拓扑自动发现:动态绘制服务间调用关系图

  • 细粒度性能分析:支持方法级代码执行追踪

  • 多维度监控:整合Metrics、Logging、Tracing三大观测支柱

  • 云原生友好:完美支持Kubernetes、Service Mesh环境

2. APM系统核心价值

传统监控系统(如Zabbix、Prometheus)与APM系统的对比:

维度 传统监控系统 APM系统
监控焦点 硬件/系统级指标 应用内部执行过程
数据粒度 服务级别 代码方法级别
核心能力 异常告警 性能瓶颈诊断
典型指标 CPU/内存/磁盘使用率 调用链追踪、事务响应时间
问题定位深度 知道"有问题" 知道"为什么有问题"

SkyWalking通过分布式追踪技术,可以还原一个请求在微服务架构中的完整流转路径,精确到每个服务的代码执行耗时,这正是解决"慢请求"问题的关键。

二、技术架构深度解析

1. 整体架构组成

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。
数据流向:
核心组件:
  • Agent:驻留在应用进程内的探针,通过字节码增强技术收集数据

  • OAP Server:可集群部署的观测分析平台,负责数据聚合、计算和存储

  • Storage:支持Elasticsearch、MySQL、TiDB、H2等多种存储后端

  • UI:功能强大的可视化控制台

2. 探针工作原理

以Java探针为例,其通过Java Agent机制实现无侵入式埋点:

java 复制代码
// 典型字节码增强示例(简化版)
public class TracingInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
    @Override
    protected ClassMatch enhanceClass() {
        return byName("org.apache.dubbo.proxy.Invoker");
    }

    @Override
    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
        // 方法拦截点定义
    }
}

这种技术使得业务代码无需任何修改即可获得监控能力,相比CAT等需要代码埋点的方案具有明显优势。

三、竞品对比分析

主流APM系统功能对比

特性 SkyWalking Zipkin Pinpoint CAT
实现方式 字节码增强 拦截请求 字节码增强 代码埋点
代码侵入性
调用链粒度 方法级 接口级 方法级 代码级
JVM监控 支持 不支持 支持 支持
服务拓扑 自动生成 自动生成 需配置
存储扩展性 支持多DB 有限 HBase专用 复杂
告警功能 完善 基础 完善

性能基准测试

根据官方测试报告(单节点OAP,ES存储):

四、核心功能详解

1. 分布式追踪能力

  • 全链路追踪:跨进程、跨线程的请求跟踪

  • 智能采样:动态调整采样率平衡性能与数据完整性

  • 异常标记:自动标识调用链中的错误节点

2. 服务拓扑分析

自动生成的服务依赖图可显示:

  • 服务间调用关系

  • 流量方向与强度

  • 健康状态(颜色标识)

  • 关键指标(成功率、延迟)

3. 性能剖析

sql 复制代码
-- 示例:查询慢事务Top 5
SELECT service_name, avg_latency 
FROM endpoint_avg 
WHERE start_time > NOW() - 1h 
ORDER BY avg_latency DESC 
LIMIT 5

4. 告警体系

支持基于OLAP引擎的多维度告警规则:

  • 服务响应时间阈值

  • 错误率突增检测

  • 服务心跳丢失

  • JVM内存溢出预警

告警渠道覆盖:

  • 邮件

  • Webhook(支持钉钉、企业微信)

  • Slack

  • PagerDuty

五、典型应用场景

1. 微服务性能诊断

  • 定位跨服务调用的性能瓶颈

  • 分析分布式事务超时原因

  • 识别不合理的服务依赖

2. 云原生环境监控

  • Kubernetes Pod间通信分析

  • Service Mesh(Istio/Linkerd)可观测性

  • 容器资源使用关联分析

3. 生产环境运维

  • 灰度发布效果验证

  • 突发流量影响评估

  • 容量规划数据支持

六、SkyWalking环境搭建

1.SkyWalking下载

下载地址:Downloads | Apache SkyWalking

Skywalking主要是下载两个包:SkyWalking APM和Java Agent,Skywalking APM提供后端服务和UI服务,Java Agent集成进应用进行数据收集传输。

SkyWalking APM

Java Agent

2.SkyWalking部署(Windows)

SkyWalking APM说明

SkyWalking APM解压后得到apache-skywalking-apm-bin文件,重点关注以下3个目录:

  • bin目录下是启动脚本,一般用startup命令启动
  • config目录下是配置文件,主要需要关注的是application.yml文件,里面有存储策略、服务端口及查询策略的配置信息。
Java Agent说明

Java Agent解压后得到skywalking-agent文件:

  • skywalking-agent.jar:探针包,使用了java agent技术,可以拦截java应用的执行。
  • plugins目录:这个目录下主要放日志采集的插件,并且支持自定义插件。skywalking官方已经开发了大部分框架的插件,例如springmvc、dubbo等等。这个设计给skywalking赋予了极强的扩展性。
  • optional-plugins:备用插件库,这里的插件在执行时不会被加载,只有放在plugins目录下的插件才会被加载。这个目录相当于仓库,需要启用什么功能的日志采集,就把对应的插件拷贝到plugins目录。同理,如果想要不采集某种日志,就把对应的插件从plugins目录中删掉即可。
  • config目录:这里是探针和插件的配置。比如说配置应用名称(会体现在UI中)。
相关推荐
Code季风1 小时前
Java 高级特性实战:反射与动态代理在 spring 中的核心应用
java·spring boot·spring
椒哥1 小时前
Open feign动态切流实现
java·后端·spring cloud
佳佳_1 小时前
Lock4j 在多租户缓存插件中不起作用
spring boot·后端
RainbowSea1 小时前
用户中心项目部署上线03
linux·服务器·spring boot
失散132 小时前
大型微服务项目:听书——11 Redisson分布式布隆过滤器+Redisson分布式锁改造专辑详情接口
分布式·缓存·微服务·架构·布隆过滤器
程序员瓜叔2 小时前
JAVA知识点(四):SpringBoot与分布式、微服务架构
java·spring boot·架构
中东大鹅2 小时前
SpringBoot创建项目的方式
java·spring boot·github
Layux10 小时前
使用钉钉开源api发送钉钉工作消息
java·spring boot·钉钉
midsummer_woo10 小时前
基于springboot的在线教育系统(源码+论文)
vue.js·spring boot·mysql
Littlewith12 小时前
Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器
java·开发语言·spring boot·spring·java-ee·eclipse·tomcat