关于javascript:SpringCloud第十五篇微服务利剑之APM平台一Skywalking

51次阅读

共计 5847 个字符,预计需要花费 15 分钟才能阅读完成。

1. Skywalking 概述

Skywalking 与 2016 年 11 月 2 日由国人吴晟在 Github 上传 v1.0 版本,用于提供分布式链路追踪性能,从 5.x 开始,成为一个性能较为欠缺的 APM(Application Performance Management)零碎,2019 年 4 月 17 日从 Apache 孵化器毕业,正式成为 Apache 顶级我的项目。提供分布式追踪、服务网格遥测剖析、度量聚合和可视化一体化解决方案。官网对本人介绍是专为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)架构而设计。(理解源码可 + 求求: 1791743380)

2. Skywalking 次要性能

  • 服务,服务实例,端点指标剖析
  • 根本原因剖析
  • 服务拓扑图剖析
  • 服务,服务实例和端点依赖性剖析
  • 慢服务检测
  • 性能优化
  • 分布式跟踪和上下文流传
  • 数据库拜访指标、检测慢速数据库拜访语句(包含 SQL)
  • 告警

3. Skywalking 次要个性

  • 多种监控伎俩,语言探针和 service mesh
  • 多语言主动探针,Java,.NET Core 和 Node.JS
  • 多种后端存储反对
  • 轻量高效
  • 模块化,UI、存储、集群治理多种机制可选
  • 反对告警
  • 优良的可视化计划

4. Skywalking 架构简介

先看一下官网提供的架构图,如图:

[

](https://simple-spring-cloud-b…

Skywalking 总体由四个局部 agentcollectorwebapp-uistorage 组成。图 10-11 从上到下是应用层接入,能够应用无入侵性的 agent 探针接入,通过 HTTP 或者 gRPC 讲数据发送至 Skywalking 剖析平台 collectorcollector 对承受到的数据进行聚合剖析,最初存储至 storage 中,这里反对多种存储形式,比拟罕用的有 H2 和 ElasticSearch,最初能够由 webapp-ui 对所有的数据进行展现。

5. Spring Cloud 与 Skywalking 实战

5.1 Skywalking 部署构建

在介绍实战之前,咱们先简略介绍一下 Skywalking 部署构建计划。

这里存储形式笔者抉择应用 ElasticSearch,具体版本是 6.5.0,ElasticSearch 的构建形式抉择应用 Docker,间接应用 Linux 搭建有点简单,不适宜初学者,应用 Docker 构建简略不便。

笔者构建的一些前置条件:

java:1.8
CentOS:7.6

如果以后 CentOS 上没有 Docker 环境,能够应用上面的语句疾速构建:

yum install docker

当构建胜利后,能够应用上面的语句查看以后 Docker 的版本:

docker -v

笔者这里的输入是:

Docker version 1.13.1, build 7f2769b/1.13.1

装置好 Docker 当前,最好配置一下国内的镜像站,否则在网络不好的状况下可能呈现 Docker 下载失败等状况,能够应用上面的语句来批改镜像地址:

vi /etc/docker/daemon.json

笔者这里应用的是阿里云的镜像减速,如下:

{"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}

各位读者能够本人去阿里云上开明本人的镜像减速,具体不多做介绍。

应用 Docker 构建 ElasticSearch6.5.0,首先,须要下载 ElasticSearch6.5.0 的镜像,输出以下命令:

docker pull elasticsearch:6.5.0

期待程序下载实现,实现后就能够启动镜像了,命令如下:

docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.5.0

ElasticSearch 的默认启动内存是 1g,如果以后服务器的内存不足 1g,能够应用参数 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" 限度 ElasticSearch 的启动内存大小,残缺的语句如下:

docker run -d --restart=always -e ES_JAVA_OPTS="-Xms256m -Xmx256m" --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.5.0

启动胜利当前能够应用如下语句看一下是否启动胜利:

docker ps

后果如图:

[

](https://simple-spring-cloud-b…

ElasticSearch6.5.0 单节点版曾经构建实现,为了不便后续操作,须要批改一个 ElasticSearch 的命名,输出命令 docker exec -it es /bin/bash 进入容器文件目录,输出 vi config/elasticsearch.yml 进入 ElasticSearch 配置文件,批改 cluster.name 的值,笔者这里批改为 CollectorDBCluster,批改实现后,保留以后批改,输出exit 退出容器文件目录,输出 docker restart es 重启以后容器,在浏览器输出 http://192.168.44.128:9200/,看到如下信息能够证实 ElasticSearch6.5.0 单节点版曾经在失常的运行了。

{
  "name" : "V-N2_ZQ",
  "cluster_name" : "CollectorDBCluster",
  "cluster_uuid" : "r9bFZ90WRyqSpMz80u61Yg",
  "version" : {
    "number" : "6.5.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "816e6f6",
    "build_date" : "2018-11-09T18:58:36.352602Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Skywalking 构建,进入 Skywalking 官网,进入下载页面(http://skywalking.apache.org/downloads/),如图:

[

](https://simple-spring-cloud-b…

因为咱们是要在 CentOS 上运行,所以这里抉择 Linux 二进制版,就是曾经编译好的版本,无需咱们本人编译,下载至咱们的 CentOS 后,解压能够看到目录构造,如图:

[

](https://simple-spring-cloud-b…

  • agent:探针相干,前面会做更加具体的介绍。
  • bin:这里放的是 oapService 和 webappService 的启动脚本,当然也有执行两个脚本的合并脚本startup.sh
  • config:这里次要寄存的是 collector 的配置信息,咱们须要批改这里的 application.yml 中的无关 ElasticSearch 的配置,如下图:

[

](https://simple-spring-cloud-b…

批改 storage.elasticsearch.nameSpace 为咱们后面构建 ElasticSearch 设置的 cluster.name,笔者这里的值为CollectorDBCluster,同时批改storage.elasticsearch.clusterNodes 为咱们以后构建的 ElasticSearch 的地址。

  • logs:寄存 collector 和 webapp-ui 生成的日志。
  • webapp:这里寄存的是 Skywalking 展现 UI 的 jar 和配置文件。

Skywalking 中默认应用的端口有 8080、11800、12800,请保障这些端口未被占用,如需批改,能够批改 config 目录中的 application.ymlwebapp目录中的webapp.yml

接下来启动 collector 和 webapp-ui,进入 bin 目录中,执行命令./startup.sh,如:

[

](https://simple-spring-cloud-b…

关上浏览器拜访 http://192.168.44.128:8080/,能够看到 webapp-ui 的仪表盘,如图:

[

](https://simple-spring-cloud-b…

Skywalking 部署到这里就完结了,上面咱们开始介绍 Spring Cloud 如何与 Skywalking 整合应用。

5.2 Spring Cloud 整合 Skywalking 实战

先简略介绍一下案例内容,咱们将创立 4 个工程,别离为 Zuul-Service、Eureka-Service、Consumer-Service 和 Provider-Service,申请通过 Zuul-Service 拜访至 Consumer-Service 再拜访至 Provider-Service 实现一次链路调用。

整体架构图如图:

[

](https://springcloud-oss.oss-c…

具体实现代码列出,各位读者能够参考 GitHub 仓库(https://github.com/meteor1993/SpringCloudLearning/tree/master/chapter15),上面咱们介绍 Spring Cloud 是如何与 Skywalking 整合的。

这里咱们须要应用到 Skywalking 的探针 agent,咱们在工程 chapter15 的跟目录中新建一个文件夹,命名为skywalking,讲方才解压的 Skywalking 中的 agent 整个文件夹 copy 到skywalking,这里咱们启动时只须要配置 javaagen 命令加载 agent 探针即可,在 idea 中应用须要批改启动配置,点击右上角的Edit Configurations...,在关上的窗口中抉择Environment->VM Options,配置如下脚本:

-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=zuul-service
-Dskywalking.collector.backend_service=192.168.44.128:11800

如图:

[

](https://springcloud-oss.oss-c…

还能够应用 java -jar 的形式来加载 agent 探针,咱们将整个 maven 我的项目打包,运行 mvn install 的命令,应用 java -jar 的形式来启动,启动命令中减少启动参数,如下:

-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=consumer-service -Dskywalking.collector.backend_service=192.168.44.128:11800 -jar zuul-0.0.1-SNAPSHOT.jar

依次启动四个工程后,应用浏览器拜访:http://localhost:8080/client/hello?name=spring,多刷新几次后,咱们再应用浏览器拜访 http://192.168.44.128:8080/,如:

[

](https://simple-spring-cloud-b…

  • all_heatmap:所有服务响应工夫的热点图
  • all_p99:所有服务响应工夫的 p99 值

点击上边栏的拓扑图,能够看到以后咱们工程的一个依赖拓扑关系,如:

[

](https://simple-spring-cloud-b…

点击上边栏的追踪,能够看到右边是以后所有的拜访申请,轻易点击一个,能够在左边看到一个具体的链路追踪过程,如:

[

](https://simple-spring-cloud-b…

点击链路,能够看到一些标记信息,蕴含端点、跨度类型、胜利还是失败,以及一些 Exception 信息,如图:

[

](https://simple-spring-cloud-b…

点击仪表盘页面的 Service,能够看到一些服务相干的信息,如均匀响应工夫、均匀吞吐量、均匀时延统计,如图:

[

](https://simple-spring-cloud-b…

  • service_instance_sla:服务实例的成功率
  • service_instance_resp_time:服务实例的均匀响应工夫
  • service_instance_cpm:服务实例每分钟调用次数

点击仪表盘页面的 Endpoint,能够看到一些端点相干的信息,如图:

[

](https://simple-spring-cloud-b…

  • endpoint_cpm:端点每分钟调用次数
  • endpoint_avg:端点均匀响应工夫
  • endpoint_sla:端点成功率
  • endpoint_p99:端点响应工夫的 p99 值

点击仪表盘页面的 Instance,能够看到一些 JVM 相干的信息,如图:

[

](https://simple-spring-cloud-b…

至此,Spring Cloud 与 Skywalking 的介绍就完结了,感兴趣的敌人能够返回 Github 的官方网站进行查问。

6. 小结

这里总结一下整个案例的启动程序:

  1. 启动 ElasticSearch
  2. 启动 collector
  3. 启动 web-ui(或者应用整合脚本启动)
  4. 启动 Agent(Eureka、provider、consumer、zuul)
  5. 利用调用
  6. 拜访 web-ui 查看统计信息

以上启动程序供各位读者参考,请各位读者最好依照以上程序启动,因为不同的组件之前其实是有相互依赖关系的,如果随便更改启动程序可能会造成某些未知问题。

正文完
 0