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

相关推荐
逛逛GitHub15 分钟前
本周 6 个最火火火火 GitHub 项目,AI 杀疯了。
github
南囝coding16 分钟前
100% 用 AI 做完一个新项目,从 Plan 到 Finished 我学到了这些
前端·后端
Homeey17 分钟前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
shykevin33 分钟前
Rust入门
开发语言·后端·rust
Lisonseekpan37 分钟前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
晴殇i1 小时前
前端架构中的中间层设计:构建稳健可维护的组件体系
前端·面试·代码规范
学历真的很重要1 小时前
LangChain V1.0 Messages 详细指南
开发语言·后端·语言模型·面试·langchain·职场发展·langgraph
申阳1 小时前
Day 7:05. 基于Nuxt开发博客项目-首页开发
前端·后端·程序员
多则惑少则明1 小时前
高频面试八股文用法篇(十五)如何高效操作字符串?
面试·职场和发展
bcbnb2 小时前
HTTP抓包分析神器,Fiddler使用教程、代理设置与HTTPS调试全指南(开发者实战分享)
后端