51

SkyWalking 分布式追踪系统

 5 years ago
source link: http://beckjin.com/2018/09/09/skywalking/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,所以会深深的感受到 “银弹” 这个词是不存在的,每种架构都有其优缺点 。

7bANRbn.png!web

面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是所谓的APM(应用性能管理)。

目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,这里主要介绍一下 SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。

下面是 SkyWalking 5.x 的架构图,6.x 会有些变化,目前还没有 Release。

n2emUjQ.png!web

说明:通过在应用程序中添加 SkyWalking Agent,就可以将接口、服务、数据库、MQ等进行追踪,将追踪结果通过 HTTP 或 gRPC 发送到 SkyWalking Collecter,SkyWalking Collecter 经过分析和聚合,将结果存储到 Elasticsearch 或 H2,SkyWalking 同时提供了一个 SkyWalking UI 的可视化界面,UI 以 GraphQL + HTTP 方式获取存储数据进行展示。

上面的架构图看似模块有点多,但在实际使用时我们并不需要关注太多的实现方式,HTTP、gRPC 、GraphQL 这些都是其内部架构使用到的技术,我们只需安装 SkyWalking Collecter、Elasticsearch 或 H2,然后在需要追踪的服务内配置少量的代码(Java 项目通过修改 JVM 参数即可),最后通过 SkyWalking UI 查看结果。

下面基于 Windows 环境使用 SkyWalking-netcore 来介绍一下 SkyWalking,可以把 SkyWalking-netcore 是 SkyWalking 的 .NET Core Agent。

环境要求

  1. JDK8+
  2. Elasticsearch 5.x
  3. 8080,10800,11800,12800 端口不被占用

Elasticsearch下载安装 参考官方教程, 安装完成后需要对 config/elasticsearch.yml 做如下修改:

# 修改
# 如果 cluster.name 不设置为 CollectorDBCluster ,则需要修改 SkyWalking 的配置文件
cluster.name: CollectorDBCluster   
network.host: 0.0.0.0
# 增加
thread_pool.bulk.queue_size: 1000

如果是 linux 环境,Elasticsearch 安装可能没有那么顺利,请参考 Linux 环境下安装 Elasticsearch 5.x、6.x 问题汇总

下载 SkyWalking

SkyWalking 个人建议直接下载官方编译好的, 下载地址

启动 SkyWalking

NrMzIzU.png!web

config/application.yml 内有所有的默认配置,可以发现默认是使用 Elasticsearch 进行数据存储的,所以在启动 SkyWalking 之前,确保 Elasticsearch 已启动。

SkyWalking 的启动包括两部分,一个是 SkyWalking Collector ,一个是 SkyWalking UI,SkyWalking 解压后的 bin 目录:

aaEraeR.png!web

bat 为 windows 环境使用,sh 为 linux 环境使用,我们可以分别其他 collectorService 和 webappService,也可以通过 startup 一次性全部启动,从 startup 中的命令可以知道其实就是分别启动 collectorService 和 webappService。

如果一切顺利( 不顺利请多看几遍 快速入门 ),这时候就可以通过 http://localhost:8080 来查看 SkyWalking UI 了(默认全是0,截图是测试效果),默认账号/密码:admin/admin。

2MN7feb.png!web

Java 项目接入

参考 部署 skywalking javaagent ,skywalking-agent.jar 位于下载包的 agent 目录下,具体效果这里就不测试了

emY7b2U.png!web

.NET Core 项目接入

参考 skywalking-netcore

新建一个.NET Core API 项目,安装 Nuget 包:

Install-Package SkyWalking.AspNetCore

修改 Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    //......
    services.AddSkyWalking(option =>
    {
        option.ApplicationCode = "WebAPIService1";
        option.DirectServers = "localhost:11800";
    });
}

这时候启动程序,请求的追踪结果就会被记录下来,通过 SkyWalking UI 查看

fIfYJzF.png!web

单个服务的效果并不明显,看不出请求跨度、链路关系,下面是一个多服务的例子( 下载源码 ),依赖关系图如下:

QNNJVna.png!web

目前 SkyWalking 的 .NET Core Agent 支持通过 HttpClient 发送的请求和 通过 EntityFramework 进行数据库操作的跟踪,其他的作者在支持的路上。根据以上的关系图搭建好项目后,访问接口后结果如下:

6vIJNff.png!web

一共有4各跨度,先访问 WenAPIService1,然后发送 HttpClient 请求,转到 WenAPIService2,WenAPIService2 执行操作 DB 的命令,每个跨度的耗时一目了然。

yi6Bviu.png!web

服务关系的拓扑图,调用链路径也非常清晰。

SkyWalking UI 使用上并不复杂,搭建好之后每个操作使用一下就了解了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK