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

相关推荐
codingandsleeping4 小时前
浏览器的缓存机制
前端·后端
self-discipline6345 小时前
【Java】Java核心知识点与相应面试技巧(七)——类与对象(二)
java·开发语言·面试
追逐时光者5 小时前
面试官问:你知道 C# 单例模式有哪几种常用的实现方式?
后端·.net
Asthenia04125 小时前
Numpy:数组生成/modf/sum/输出格式规则
后端
Asthenia04125 小时前
NumPy:数组加法/数组比较/数组重塑/数组切片
后端
Asthenia04126 小时前
Numpy:limspace/arange/数组基本属性分析
后端
Asthenia04126 小时前
Java中线程暂停的分析与JVM和Linux的协作流程
后端
Asthenia04126 小时前
Seata TCC 模式:RootContext与TCC专属的BusinessActionContext与TCC注解详解
后端
自珍JAVA6 小时前
【代码】zip压缩文件密码暴力破解
后端
拉不动的猪6 小时前
刷刷题47(react常规面试题2)
前端·javascript·面试