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

相关推荐
Asthenia04123 分钟前
Feign结构与请求链路详解及面试重点解析
后端
左灯右行的爱情6 分钟前
缓存并发更新的挑战
jvm·数据库·redis·后端·缓存
brzhang9 分钟前
告别『上线裸奔』!一文带你配齐生产级 Web 应用的 10 大核心组件
前端·后端·架构
shepherd11111 分钟前
Kafka生产环境实战经验深度总结,让你少走弯路
后端·面试·kafka
南客先生16 分钟前
多级缓存架构设计与实践经验
java·面试·多级缓存·缓存架构
袋鱼不重23 分钟前
Cursor 最简易上手体验:谷歌浏览器插件开发3s搞定!
前端·后端·cursor
互联网搬砖老肖25 分钟前
运维打铁:域名详解及常见问题解决
运维·github
zayyo25 分钟前
Vue.js性能优化新思路:轻量级SSR方案深度解析
前端·面试·性能优化
嘻嘻哈哈开森26 分钟前
Agent 系统技术分享
后端
用户40993225021226 分钟前
异步IO与Tortoise-ORM的数据库
后端·ai编程·trae