微服务链路追踪——skywalking

8,783 阅读3分钟

前言

        skywalking是分布式系统的应用程序性能监视、分布式链路追踪工具,跟听云、博瑞等一系列服务器监控组件服务类似,开源的相关类似组件有zipkin、pinpoint等,由于笔者所在项目组准备升级springcloud,缺少相关链路监控组件,而zipkin属于springcloud1.0相关,因此暂时选择调研skywalking并对其进行搭建。         当前skywalking最新版本为6.4,本博客示例中使用nacos作为注册中心,springcloudgateway作为网关进行服务请求转发。

正文

skywalking架构

        如下图所示,整体主要分为三个部分:

  1. skywalking-agent:在被监控的服务启动时添加的探针,用来收集和推送数据到归集器,将数据通过gRPC方式发送给collector组件;
  2. skywalking-collector:链路数据归集器,接收agent发送的数据并做处理,数据可以保存在H2、ElasticSearch、mysql等;
  3. skywalking-web:web的可视化管理后台,对已经持久化的数据做回显,显示收集后的数据;

image

搭建skywalking

        搭建使用的各种服务版本如下:

nacos elasticsearch skywalking springcloudgateway
1.1.3 6.4.2 6.4.0 Greenwich.SR1

        搭建之前下载各个对应版本的包,并且需要保证对应端口不被占用,8848(nacos)、9200(es)、8080(skywalking-web)、11800、12800。

搭建共分为以下几步:1.nacos配置启动;2.es配置启动;3.skywalking-collector及skywalking-web配置启动;4.skywalking-agent与服务启动。

        1. 首先启动nacos,详见 nacos.io/zh-cn/docs/… ,本地访问 http://localhost:8848/nacos 可以看到管理页面。

        2. 其次配置和启动es,首先修改es配置,在下载的es目录 config/elasticsearch.yml,配置相应的节点名称及host地址、端口,如下:

cluster.name: CollectorDBCluster
node.name: CollectorDBCluster
network.host: 127.0.0.1
http.port: 9200

        ./elasticsearch -d 后台运行,本地访问 http://localhost:9200/ 出现下述数据表明es服务基本正常。

{
name: "CollectorDBCluster",
cluster_name: "CollectorDBCluster",
cluster_uuid: "NuJtMyOnShun26UWoXCQXw",
version: {
number: "6.4.2",
build_flavor: "default",
build_type: "tar",
build_hash: "04711c2",
build_date: "2018-09-26T13:34:09.098244Z",
build_snapshot: false,
lucene_version: "7.4.0",
minimum_wire_compatibility_version: "5.6.0",
minimum_index_compatibility_version: "5.0.0"
},
tagline: "You Know, for Search"
}

        3.接着准备启动skywalking,首先修改skywalking配置,config/application.yml 如下:

#注册到nacos配置
cluster:
  nacos:
    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
    # Nacos cluster nodes, example: 10.0.0.1:8848,10.0.0.2:8848,10.0.0.3:8848
    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}

#存储选择es,注意nameSpace配置要一致,注释掉h2;如果选择使用h2,则不需要修改
storage:
  elasticsearch:
    nameSpace: CollectorDBCluster
    clusterNodes: 127.0.0.1:9200
    indexShardsNumber: 2

        如果需要修改skywalking-web的端口号,需要修改webapp/webapp.yml。

        接着启动skywalking,linux在skywalking bin目录下执行./startup.sh,windows则执行startup.bat。此时我们应该能看到nacos控制台(http://localhost:8848/nacos) 的服务列表中有skywalking注册如列表中SkyWalking_OAP_Cluster,且能访问skywalking控制台(http://localhost:8080/)

image
image
        如果未能正常注册、或者skywalking后台无法正常访问,就去skywalking/log/目录下看一下日志是否有异常。

        4.将skywalking目录下agent附带到相应的项目服务中启动,如 java -javaagent:/software/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=127.0.0.1:11800 demo.jar 如果是在idea或eclipse中启动项目,则在项目启动的VM OPTIONS中增加参数 -javaagent:/software/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=127.0.0.1:11800

        上面的-Dskywalking.agent.service_name是指注册到skywalking的服务名称,而-Dskywalking.collector.backend_service指的是skywalking接收agent发送采集数据的服务及端口。 在启动了两个服务后,可以在后台、拓扑图中看到注册的两个服务及调用链,如下图所示。

image

结语

        以上就是skywalking+nacos+elasticsearch+demo-service的搭建整个过程,我在这其中也遇到不少问题,如版本契合问题、skywalking现有bug问题、粗心配置写错问题等,一开始没怎么注意官方文档,后续对照官方文档改过之后才完成,希望与大家多多交流。

参考文档: www.cnblogs.com/jackion5/p/…

blog.csdn.net/dpnice/arti…

github.com/apache/skyw…