Apache SkyWalking 是一个开源的可观测性平台,专为分布式系统、微服务和云原生架构设计。它提供了一套全面的工具,用于收集、分析、聚合和可视化服务和应用程序的性能数据。以下是 SkyWalking 的基础知识和主要功能:
SkyWalking 的核心概念
- 服务(Service): 表示一组为传入请求提供相同行为的工作负载,例如一个微服务。在使用 SkyWalking 的 agent 或 SDK 时,可以自定义服务名称13。
- 服务实例(Service Instance): 服务中的每个工作负载被称为一个实例。一个服务可以包含一个或多个实例13。
- 端点(Endpoint): 服务中用于接收请求的路径,如 HTTP URI 或 gRPC 服务类+方法签名13。
- 进程(Process): 操作系统进程。在某些场景中,一个服务实例可能运行多个进程13。
SkyWalking 的主要功能
-
服务拓扑发现:
- 自动发现服务之间的依赖关系,并构建服务拓扑图,帮助理解系统的架构。
- 示例:通过 SkyWalking 的 UI 界面,可以直观地看到服务之间的调用关系。
-
分布式追踪:
- 跟踪请求在不同服务之间的调用链,帮助定位性能问题和错误。
- 示例:使用 SkyWalking 的分布式追踪功能,可以快速找到导致性能问题的服务或代码。
-
性能指标监控:
- 收集和分析各种性能指标,如响应时间、吞吐量、错误率等,提供实时的性能视图。
- 示例:通过 SkyWalking 的性能指标监控,可以实时查看服务的平均响应时间和每分钟调用次数。
-
告警:
- 基于预定义的规则,当性能指标超过阈值时发出告警,帮助及时发现问题。
- 示例:设置当服务的平均响应时间超过 500ms 时自动发送告警邮件。
-
日志分析:
- 收集和分析应用程序的日志,帮助诊断问题和了解系统行为。
- 示例:通过 SkyWalking 的日志分析功能,可以快速找到导致系统错误的日志记录。
SkyWalking 的优势
- 支持多种语言: Java、.NET Core、PHP、Node.JS、Golang 等5。
- 代码无侵入: 支持 Java 自动探针,配置简单即可实现指标和调用链的埋点5。
- 多种存储支持: ElasticSearch、MySQL、TiDB、H2 等5。
使用 SkyWalking 的步骤
-
安装 SkyWalking:
- 从 SkyWalking 官网 下载并安装 SkyWalking。
-
配置探针:
- 在应用程序中集成 SkyWalking 的探针或 SDK,以收集性能数据。
-
查看性能数据:
- 通过 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 用于跟踪特定的操作或请求。