Apache SkyWalking:分布式系统的可观测性平台

Apache SkyWalking 是一个开源的可观测性平台,专为分布式系统、微服务和云原生架构设计。它提供了一套全面的工具,用于收集、分析、聚合和可视化服务和应用程序的性能数据。以下是 SkyWalking 的基础知识和主要功能:

SkyWalking 的核心概念

  • 服务(Service): 表示一组为传入请求提供相同行为的工作负载,例如一个微服务。在使用 SkyWalking 的 agent 或 SDK 时,可以自定义服务名称13
  • 服务实例(Service Instance): 服务中的每个工作负载被称为一个实例。一个服务可以包含一个或多个实例13
  • 端点(Endpoint): 服务中用于接收请求的路径,如 HTTP URI 或 gRPC 服务类+方法签名13
  • 进程(Process): 操作系统进程。在某些场景中,一个服务实例可能运行多个进程13

SkyWalking 的主要功能

  1. 服务拓扑发现:

    • 自动发现服务之间的依赖关系,并构建服务拓扑图,帮助理解系统的架构。
    • 示例:通过 SkyWalking 的 UI 界面,可以直观地看到服务之间的调用关系。
  2. 分布式追踪:

    • 跟踪请求在不同服务之间的调用链,帮助定位性能问题和错误。
    • 示例:使用 SkyWalking 的分布式追踪功能,可以快速找到导致性能问题的服务或代码。
  3. 性能指标监控:

    • 收集和分析各种性能指标,如响应时间、吞吐量、错误率等,提供实时的性能视图。
    • 示例:通过 SkyWalking 的性能指标监控,可以实时查看服务的平均响应时间和每分钟调用次数。
  4. 告警:

    • 基于预定义的规则,当性能指标超过阈值时发出告警,帮助及时发现问题。
    • 示例:设置当服务的平均响应时间超过 500ms 时自动发送告警邮件。
  5. 日志分析:

    • 收集和分析应用程序的日志,帮助诊断问题和了解系统行为。
    • 示例:通过 SkyWalking 的日志分析功能,可以快速找到导致系统错误的日志记录。

SkyWalking 的优势

  • 支持多种语言: Java、.NET Core、PHP、Node.JS、Golang 等5
  • 代码无侵入: 支持 Java 自动探针,配置简单即可实现指标和调用链的埋点5
  • 多种存储支持: ElasticSearch、MySQL、TiDB、H2 等5

使用 SkyWalking 的步骤

  1. 安装 SkyWalking:

  2. 配置探针:

    • 在应用程序中集成 SkyWalking 的探针或 SDK,以收集性能数据。
  3. 查看性能数据:

    • 通过 SkyWalking 的 UI 界面查看服务拓扑图、性能指标和分布式追踪信息。

代码示例

以下是一个简单的 Java 应用程序中使用 SkyWalking 的示例:

java 复制代码
import org.apache.skywalking.apm.agent.core.context.ContextManager;
import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
import org.apache.skywalking.apm.agent.core.context.tag.StringTag;
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;

public class MyService {
    public void doSomething() {
        // 创建一个新的 Span
        AbstractSpan span = ContextManager.createEntrySpan("my-span");
        
        try {
            // 添加标签
            span.tag("key", "value");
            
            // 模拟业务逻辑
            Thread.sleep(100);
            
            // 完成 Span
            span.complete();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

在这个示例中,我们创建了一个新的 Span,并添加了一个标签。Span 用于跟踪特定的操作或请求。

相关推荐
南篱6 分钟前
JS 拷贝的"分身术":深拷贝 vs 浅拷贝
javascript·面试
snakeshe10107 分钟前
使用SpringBoot快速实现短信验证码登录与Flyway+MyBatis最佳实践
后端
打野二师兄12 分钟前
Spring Boot 自动配置:从 2.x 到 3.x 的进化之路
java·spring boot·后端
追逐时光者23 分钟前
一款实用的 Visual Studio 发布部署插件,助力提高部署效率!
后端·.net
你我约定有三1 小时前
分布式微服务--RPC:原理、使用方式、与 HTTP/REST 的区别与选择
java·开发语言·分布式·后端·微服务·rpc
SparkX开源AI知识库2 小时前
SparkX结合Ollama搭建本地知识库
后端
RainbowSea2 小时前
伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 01
vue.js·spring boot·后端
CLO_se_2 小时前
嵌软面试——ARM Cortex-M寄存器组
arm开发·面试·职场和发展
天天码行空2 小时前
Radash: 新一代前端工具库平替Lodash库
前端·javascript·github