美文网首页C#.NETASP.NET Core见识录
SkyWalking 分布式追踪系统

SkyWalking 分布式追踪系统

作者: BeckJin | 来源:发表于2018-09-09 19:37 被阅读55次

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

    service map

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

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

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

    5.x architecture

    说明:通过在应用程序中添加 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

    skywalking config

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

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

    skywalking bin

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

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

    skywalking ui

    Java 项目接入

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

    skywalking java agent

    .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 查看

    skywalking ui request log

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

    service request map

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

    skywalking ui spans

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

    skywalking ui topology map

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

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

    参考链接

    Apache SkyWalking
    SkyWalking-github
    SkyWalking-netcore
    SkyWalking-sample

    相关文章

      网友评论

      • d17d29863e8d:源码为什么下载不下来
        BeckJin:@cdoe 什么源码
      • d17d29863e8d:为什么:10800/访问不了?
        BeckJin:@cdoe 确定es连接成功了吗?看一下collector的日志
        d17d29863e8d:@BeckJin 安装了,es上没有自动创建索引
        BeckJin:@cdoe es安装了吗
      • d17d29863e8d:求助大佬
        d17d29863e8d:@BeckJin linux上也是,agent连接不了controller
        d17d29863e8d:@BeckJin 按照上面的操作,启动startup之后,web启动了,controller弹出框自动关闭了,页面没东西报500
        BeckJin:@cdoe 有什么需要帮忙的?

      本文标题:SkyWalking 分布式追踪系统

      本文链接:https://www.haomeiwen.com/subject/wrsvwftx.html