走进SkyWalking-基础概念及使用[#1]

前言

由于之前项目的业务需求而使用了微服务的架构体系,而微服务架构中对于服务的监控治理能力甚为重要,所以在分析了市面上常见的一些链路追踪框架之后,最终选择了国产开源框架SkyWalking,同时它也是Apache基金会中的孵化项目,项目VP为吴晟大佬

最初使用它的本意仅仅是因为其服务之间链路追踪的功能,了解使用之后,发现其功能强大远不止如此,正如官方文档中所说的那样,SkyWalking是一个开源的可观测平台,用于从服务和云原生基础设施收集, 分析, 聚合及可视化数据的应用程序性能监控系统(Application Performance Monitoring)。

基础架构和概念

我们先来看看SkyWalking官网上的基础架构图,

img

乍一下看可能有点似懂非懂,但细看可以发现,图中的架构体系所表现的功能还是非常全面强大的。大概总结下,从逻辑组成上,它的架构可以分为四个部分:

  • 探针:主要是用来收集各个应用服务资源的数据,像图中的GUI/CLI、一些metrics系统、不同语言的应用系统(包括前后端),然后通过Http或gRPC的方式来上报系统中需要被监控的数据指标。
  • 平台后端:用来对收集的系统监控数据进行处理、分析和聚合,同时支撑上游用户界面数据展示的API的观测分析平台(Observability Analysis Platform),简称为OAP平台。
  • 存储:用来保存那些从各个服务资源收集的数据,默认是使用H2用来存储,也支持其他数据库,像Mysql、Elasticsearch、TiDB等等,同时官方也发布了更贴合SkyWalking的自研数据库BanyanDB,现在处于完善迭代中。但是目前实际项目中使用Elasticsearch作为存储可能更为常见。
  • 用户界面:这是一套官方开源的UI平台,相信这对于开发运维来说是极其友好方便的,同时其UI风格也是非常简洁美观的,很符合程序员的高级审美。

那说完它的架构体系,我们再来看看它其中定义的一些基础概念,首先既然要监控应用系统数据,那肯定得知道需要监控的系统资源是什么,所以SkyWalking中将其定义划分为三种:

  • 服务:官言是对请求提供相同行为的一组工作负载,其实就是服务的提供者,只不过通常这些服务是以集群的方式部署存在。
  • 服务实例:就是服务集群中的某一个服务的实例,比如A机器上的服务A,B机器上的服务B。
  • 端点:服务中的请求路径,可以理解为接口API,注意的是它不仅仅是Http的接口,还包括rpc中的调用方法。

部署使用

准备

目前SkyWalking的官方最新版本为v8.8.1,本文就先以当前版本的上一个版本,也就是v8.7.0为例部署使用,存储我们用的是Elasticsearch 7.x的版本(后面的SkyWalking都会选择es7的版本)。这里我们有两种选择去准备SkyWalking软件包:

源码构建:

  1. 提前安装好Jdk1.8+ 版本和Maven 3.6+ 版本;
  2. 下载源码,一种通过git从官方Github上进行pull,一种从Apache官网下载页面下载。
# 下载源码,二选一
# git pull
$ git clone -b v8.7.0 --recurse-submodules https://github.com/apache/skywalking.git
 cd skywalking/
# 官方下载
$ wget https://archive.apache.org/dist/skywalking/8.7.0/apache-skywalking-apm-8.7.0-src.tgz
  # 解压
$ tar -zxvf apache-skywalking-apm-8.7.0-src.tgz
$ cd apache-skywalking-apm-8.7.0-src/
$
# maven构建
$ ./mvnw clean package -Dmaven.test.skip
$
# 查看编译结果
$ cd apm-dist-es7/target
$ tar -zxvf apache-skywalking-apm-es7-8.7.0.tar.gz
$ cd apache-skywalking-apm-bin-es7
$ ls -ls
total 92
 0 drwxrwxr-x  9 1001 1002   176 Jul 30 21:15 agent # agent插件包
 0 drwxr-xr-x  2 root root   241 Nov  5 10:49 bin # 启动脚本文件
 4 drwxr-xr-x 11 root root  4096 Nov  5 10:49 config # SkyWalking OAP Server 配置文件
 0 drwxr-xr-x  2 root root    68 Nov  5 10:49 config-examples
32 -rwxrwxr-x  1 1001 1002 31480 Jul 30 20:32 LICENSE
 4 drwxrwxr-x  3 1001 1002  4096 Nov  5 10:49 licenses
32 -rwxrwxr-x  1 1001 1002 32519 Jul 30 20:32 NOTICE
16 drwxrwxr-x  2 1001 1002 12288 Jul 30 21:34 oap-libs # SkyWalking OAP Server 依赖包
 4 -rw-rw-r--  1 1001 1002  1951 Jul 30 20:32 README.txt
 0 drwxr-xr-x  3 root root    30 Nov  5 10:49 tools
 0 drwxr-xr-x  2 root root    53 Nov  5 10:49 webapp # SkyWalking UI

自己通过源码编译虽然稍微麻烦点,但是可以对当前版本的源码中一些未修复的issue,特别是当前项目中已经产生的问题进行修改并应用。

官方安装包: 官网下载页面下载操作系统对应的发布版,

$ mkdir skywalking
$ cd skywalking
# 下载
$ wget https://archive.apache.org/dist/skywalking/8.7.0/apache-skywalking-apm-es7-8.7.0.tar.gz
$ tar -zxvf apache-skywalking-apm-es7-8.7.0.tar.gz
$ cd apache-skywalking-apm-bin-es7
$ ls -ls
total 92
 0 drwxrwxr-x  9 1001 1002   176 Jul 30 21:15 agent # agent插件包
 0 drwxr-xr-x  2 root root   241 Nov  5 10:49 bin # 启动脚本文件
 4 drwxr-xr-x 11 root root  4096 Nov  5 10:49 config # SkyWalking OAP Server 配置文件
 0 drwxr-xr-x  2 root root    68 Nov  5 10:49 config-examples
32 -rwxrwxr-x  1 1001 1002 31480 Jul 30 20:32 LICENSE
 4 drwxrwxr-x  3 1001 1002  4096 Nov  5 10:49 licenses
32 -rwxrwxr-x  1 1001 1002 32519 Jul 30 20:32 NOTICE
16 drwxrwxr-x  2 1001 1002 12288 Jul 30 21:34 oap-libs # SkyWalking OAP Server 依赖包
 4 -rw-rw-r--  1 1001 1002  1951 Jul 30 20:32 README.txt
 0 drwxr-xr-x  3 root root    30 Nov  5 10:49 tools
 0 drwxr-xr-x  2 root root    53 Nov  5 10:49 webapp # SkyWalking UI

其中SkyWalking OAP 服务的配置文件位置是config/application.yml( 配置参数说明文档) ,大部分配置是通过application.yml OS系统环境变量设置的,其中一些支持上游管理系统的动态设置(动态配置文档)。

SkyWalking UI服务的配置文件位置:webapp/webapp.yml。

部署
单机部署

首先我们需要准备好Elasticsearch 服务,如果项目中已经有现成的,直接拿来用即可。部署流程如下:

1.搭建SkyWalking OAP服务:先修改OAP的配置文件,以设置Elasticsearch作为存储的数据库,

$ vi config/application.yml

storage:
  selector: ${SW_STORAGE:elasticsearch7}
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:"elasticsearch"}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
    # trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
    # trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
    dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
    user: ${SW_ES_USER:""}
    password: ${SW_ES_PASSWORD:""}
secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} 
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes
superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} 
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
    resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
    segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
    profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
    advanced: ${SW_STORAGE_ES_ADVANCED:""}

这里面storage.selector配置项用来设置具体的存储器,默认为 S W S T O R A G E : h 2 , 这 里 修 改 为 {SW_STORAGE:h2},这里修改为 SWSTORAGE:h2{SW_STORAGE:elasticsearch7}。然后storage.elasticsearch7配置项中修改nameSpaceclusterNodes,如果eleasticsearch开启了认证,需要修改userpassword。更多参数的意义和设置参考官方参数文档,这里不在细说。

2.启动 SkyWalking OAP服务:

$ bin/oapServiceInit.sh
SkyWalking OAP started successfully!

打开logs/skywalking-oap-server.log日志文件,查看是否有错误日志,是否真正启动成功。首次启动时,因为 SkyWalking OAP 会创建大量的 Elasticsearch 的索引,所以可能会比较慢。SkyWalking后端支持多个存储实现器。它们中的大多数可以在后端启动时自动初始化存储,例如Elasticsearch 、Database。但是根据存储情况,会发生一些意外情况,例如 When create Elastic Search indexes concurrently, because of several backend instances startup at the same time.,发生了变化,Elastic Search的API会毫无例外地被阻止,而且这在k8s之类的容器管理平台中更有可能发生,那就需要启动Init模式。

2021-11-14 23:04:39,465 - org.apache.skywalking.oap.server.starter.OAPServerStartUp -2214 [main] INFO [] - OAP starts up in init mode successfully, exit now...

3.启动SkyWalking UI 服务:

$ bin/webappService.sh
SkyWalking Web Application started successfully!

打开 logs/logs/webapp.log 日志文件,查看是否有错误日志,是否真正启动成功。如果需要修改 SkyWalking UI 服务的参数,可以编辑 webapp/webapp.yml 配置文件。例如说:

  • server.port:SkyWalking UI 服务端口。
  • spring.cloud.discovery.client.simple.instances.oap-service:SkyWalking OAP 服务地址数组,因为 SkyWalking UI 界面的数据,是通过请求 SkyWalking OAP 服务来获得的。注意的是,8.7.0版本的UI后台由于引入了zuul对静态资源的代理,所以OAP地址不再是通过collector.ribbon.listOfServers来设置的。

4.访问UI界面:

浏览器打开http://127.0.0.1:8080,如下图

image-20211112172856118

当然跟图中不同的是这时候打开的界面是没有任何数据的,那是因为我们还没启动需要监控的应用系统,并将探针挂载上去收集数据。

5.启动 jar 应用,并配置 SkyWalking Agent:

启动项目的 Shell 脚本上,通过-javaagent参数进行配置SkyWalking Agent:agent/skywalking-agent.jar,在启动日志中可以看到SkyWalking Agent 被加载的日志。

$ java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=application_name -Dskywalking.collector.backend_service=ip:11800 -jar yourApp.jar

这当中更多的变量,可以在agent/config/agent.config查询看配置。

集群部署

生产项目中,通常为了保证服务的高可用性,都是通过集群来部署的,部署流程如下:

1.搭建Elasticsearch 服务集群,或者项目中已有的集群。

2.搭建注册中心的集群,目前 SkyWalking 支持 Zookeeper、Kubernetes、Consul、Nacos 作为注册中心,由于本身项目中用的Nacos,所以这里我选择Nacos 作为注册中心。

3.搭建SkyWalking OAP服务集群,集群模式下OAP服务的配置和启动基本与单机模式相差不多,但是集群模式下我们需要将 SkyWalking OAP 服务注册到注册中心上,所以我们需要修改以下配置,

$ vi config/application.yml

cluster:
  selector: ${SW_CLUSTER:nacos}
  nacos:
    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}
    # Nacos Configuration namespace
    namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
  • cluster.selector配置项用来设置具体的注册中心,默认为${SW_CLUDTER:standalone},这里修改为${SW_CLUDTER:nacos}
  • cluster.nacos配置项修改hostPortnamespace

4.搭建SkyWalking UI 服务集群,配置和启动基本与单机模式相差不多,同时使用 Nginx 进行负载均衡。另外在设置 SkyWalking UI 的spring.cloud.discovery.client.simple.instances.oap-service地址时,也需要设置多个 SkyWalking OAP 服务的地址数组。

  1. 启动jar应用,并配置 SkyWalking Agent,配置基本与单机模式相差不多,但在设置 SkyWaling Agent 的SW_AGENT_COLLECTOR_BACKEND_SERVICES地址时,需要设置多个 SkyWalking OAP 服务的地址数组。

总结

我们先了解了SkyWalking的基本架构,然后又示例进行安装部署使用,但是这只是基础,相信在UI界面中,你会看到很多的监控指标,而这些指标的意义你肯定是需要去查阅了解的,除此之外,SkyWalking还有很多强大的功能和扩展也是需要在使用中慢慢摸索的。

最重要的是这么厉害的一个开源框架,难道你不对它的源码垂涎三尺吗?

img


身未动,心已远。

把一件事做到极致就是天分!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值