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 用于跟踪特定的操作或请求。

相关推荐
西洼工作室5 分钟前
Spring Boot常用依赖大全:从入门到精通
java·spring boot·后端
北i15 分钟前
IOT集群扩容实践:问题剖析与解决策略
后端·物联网·kafka
加油冲丫23 分钟前
Java过滤器的基本概念
java·开发语言·后端·servlet
爱笑的眼睛1131 分钟前
HarmonyOS 组件复用面试宝典 [特殊字符]
华为·面试·harmonyos·harmonyos next
章鱼paul帝32 分钟前
浅谈 iOS 字典 NSDictionary 的底层实现原理
面试
MinIO官方账号41 分钟前
AIStor 的模型上下文协议 (MCP) 服务器:管理功能
运维·服务器·github
.生产的驴1 小时前
SpringBoot 服务器监控 监控系统开销 获取服务器系统的信息用户信息 运行信息 保持稳定
服务器·spring boot·分布式·后端·spring·spring cloud·信息可视化
jakeswang1 小时前
Java 项目中实现统一的 追踪ID,traceId实现分布式系统追踪
java·后端·架构
寒山李白2 小时前
Java 传输较大数据的相关问题解析和面试问答
java·开发语言·面试·传输
白总Server2 小时前
Golang dig框架与GraphQL的完美结合
java·大数据·前端·javascript·后端·go·graphql