写点什么

专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking 介绍及搭建】

  • 2022 年 6 月 02 日
  • 本文字数:3963 字

    阅读完需:约 13 分钟

专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】

@[TOC]

前言. 当前企业级分布式微服务集群架构图

服务链路追踪已成为不可或缺的一环


一. skywalking 是什么

skywalking 是一个优秀的国产开源框架,2015 年由个人吴晟(华为开发者)开源 , 2017 年加入 apache 孵化器。skywalking 是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器化技术(docker、K8s、Mesos)架构而设计,它是一款优秀的 APM(Application Performance Management)工具。skywalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

二. 为什么需要服务追踪

  • 在微服务架构下,由于进行了服务拆分,一次请求往往需要涉及多个服务,每个服务可能是由不同的团队开发,使用了不同的编程语言,有可能部署在不同的机器上,分布在不同的数据中心。服务跟踪系统可以跟踪记录一次用户请求都发起了哪些调用,经过哪些服务处理,并且记录每一次调用所涉及的服务的详细信息,通过查看完整的调用链路,形成拓补图可以更加直观的了解业务,也可以针对当前的系统进行分析,是否需要扩容、优化接口、失败缓解,还有通过日志快速定位是调用失败的环节。

  • SkyWalking 专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的 APM 系统。SkyWalking 通过加载探针的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。Apache SkyWalking (Incubating)目前支持多种语言,其中包括 Java,.Net Core ,Node.js 和 Go 语言。

  • 目前 skywalking 已经支持从 6 个可视化维度剖析分布式系统的运行情况。总览视图是应用和组件的全局视图,其中包括组件应用数量应用的告警波动,慢服务列表以及应用吞吐量;拓扑图从应用依赖关系出发,展现整个应用的拓扑关系;应用视图则是从单个应用的角度,展现应用的上下游关系,TopN 的服务和服务器,JVM 的相关信息以及对应的主机信息。服务视图关注单个服务入口的运行情况以及此服务的上下游依赖关系,依赖度,帮助用户针对单个服务的优化和监控;调用链展现了调用的单次请求经过的所有埋点以及每个埋点的执行时长;告警视图根据配置阈值针对应用、服务器、服务进行实时告警。


SkyWalking 中默认使用的端口有 8080、11800、12800,请保证这些端口未被占用 。

三 链路追踪框架对比

  1. Zipkin 是 Twitter 开源的调用链分析工具,目前基于 springcloud sleuth 得到了广泛的使用,特点是轻量,使用部署简单。

  2. Pinpoint 是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能强大,接入端无 代码侵入。

  3. SkyWalking 是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能较强,接入端 无代码侵入。目前已加入 Apache 孵化器。

  4. CAT 是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。


3.1 性能对比

模拟了三种并发用户:500,750,1000。使用 jmeter 测试,每个线程发送 30 个请求,设置思考时间为 10ms。使用的采样率为 1,即 100%,这边与生产可能有差别。pinpoint 默认的采样率为 20,即 50%,通过设置 agent 的配置文件改为 100%。zipkin 默认也是 1。组合 起来,一共有 12 种。下面看下汇总表:



从上表可以看出,在三种链路监控组件中,skywalking 的探针对吞吐量的影响最小,zipkin 的吞吐量居中。pinpoint 的探针对吞吐量的 影响较为明显,在 500 并发用户时,测试服务的吞吐量从 1385 降低到 774,影响很大。然后再看下 CPU 和 memory 的影响,在内部服务器 进行的压测,对 CPU 和 memory 的影响都差不多在 10%之内。

四. 链路追踪的实际应用预览

4.1 捋清业务

我们都知道,在一般场景下,我们很难直观的了解系统的运行、业务的流程,因为传统的都是文字需求说明和枯燥的代码。通过链路追踪,可以根据调用链路来捋清楚服务间的调用关系,如果 API 设计符合规范,甚至可以直观的了解调用的服务作用。这对于刚刚接触系统的开发人员十分重要。

4.2 分析耗时

链路的基本功能,服务间的调用耗时记录,如果服务耗时过长,会影响整体的用户体验,甚至会抛出超时异常等,这样的情况在微服务架构中也是时有发生。


4.3 可视化错误

微服务调用链路发生错误,可以直观的显示查看,定位到被调用服务的接口,及时排查微服务中错误原因。


4.4 优化链路

显示完整的调用链路,根据业务分析合理性、可读性、健壮性,是否重复调用某一个服务,是否链路过长,有没有可以优化的,链路是否清晰。有些场景比较复杂,比如数据中心比较分散,服务分布在不同的数据中心,但是服务中心之间因为地域原因,距离远,延迟高,这可能不符合设计要求,因此就要根据链路来找到最近的数据中心,然后配置调用最近的数据中心的服务。


4.5 生成网络拓扑

通过服务追踪系统中记录的链路信息,可以生成一张系统的网络调用拓扑图,它可以反映系统都依赖了哪些服务,以及服务之间的调用关系是什么样的,可以一目了然。除此之外,在网络拓扑图上还可以把服务调用的详细信息也标出来,也能起到服务监控的作用。


4.6 SkyWalking 主要功能特性

  1. 多种监控手段,可以通过语言探针和 service mesh 获得监控的数据;

  2. 支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;

  3. 轻量高效,无需大数据平台和大量的服务器资源;

  4. 模块化,UI、存储、集群管理都有多种机制可选;

  5. 支持告警;

  6. 优秀的可视化解决方案;

五. 使用 Docker 安装部署 SkyWalking

5.1 查看官网版本

官网:http://skywalking.apache.org/下载:http://skywalking.apache.org/downloads/Github:https://github.com/apache/skywalking/文档: https://skywalking.apache.org/docs/main/v8.4.0/readme/中文文档: https://skyapm.github.io/document-cn-translation-of-skywalking/



从官网可以看出 最新版本已经 9.0 版本了,但是我们使用 es 作为存储最好是使用明确存储了方式的版本 8.7.0

5.1 拉取镜像

5.1.1 尝鲜版

docker pull elasticsearch:7.12.0 
默认es存储数据镜像 docker pull apache/skywalking-oap-server:8.7.0-es7
webUI界面镜像 docker pull apache/skywalking-ui:8.7.0
制作微服项目镜像 docker pull openjdk:8-alpine3.9
复制代码

5.1.2 稳定版

docker pull elasticsearch:7.9.0 
默认es存储数据镜像 docker pull apache/skywalking-oap-server:8.1.0-es7
webUI界面镜像 docker pull apache/skywalking-ui:8.1.0
制作微服项目镜像 docker pull openjdk:8-alpine3.9
复制代码

5.1.3 备份镜像

最新版:docker save apache/skywalking-oap-server:8.7.0-es7 apache/skywalking-ui:8.7.0 elasticsearch:7.12.0 -o skywalking8.7.0.tar 
稳定版:docker save apache/skywalking-oap-server:8.1.0-es7 apache/skywalking-ui:8.1.0 elasticsearch:7.9.1 -o skywalking8.1.0.tar
复制代码

5.2 docker-compose 启动 SkyWalking

5.2.1 docker-compose 的安装

  • 下载 v2.2.2 版本的 docker-compose


curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composeln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version
复制代码


  • 添加可执行权限


sudo chmod +x /usr/local/bin/docker-compose
复制代码


  • 测试安装是否成功


5.2.2 编写 SkyWalking 的 docker-compose 文件

这里使用最新版本的 Skywalking 镜像


version: '3'services:   es7:    image: elasticsearch:7.12.1    container_name: es7    environment:      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch      - "discovery.type=single-node" #以单一节点模式启动      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小    volumes:      - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载      - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载    ports:      - 9200:9200      - 9300:9300
oap: image: apache/skywalking-oap-server:8.7.0-es7 container_name: oap depends_on: - es7 links: - es7 ports: - "11800:11800" - "12800:12800" healthcheck: test: [ "CMD-SHELL", "/skywalking/bin/swctl ch" ] interval: 30s timeout: 10s retries: 3 start_period: 10s environment: SW_STORAGE: elasticsearch7 SW_STORAGE_ES_CLUSTER_NODES: es7:9200 SW_HEALTH_CHECKER: default TZ: Asia/Shanghai SW_TELEMETRY: prometheus JAVA_OPTS: "-Xms2048m -Xmx2048m"
ui: image: apache/skywalking-ui:8.7.0 container_name: ui depends_on: - oap links: - oap ports: - "8088:8080" #为了防止8080端口冲突 这里用8088端口映射 environment: SW_OAP_ADDRESS: http://oap:12800 TZ: Asia/Shanghai
复制代码


启动服务


docker-compose up -d
复制代码


查看启动


docker-compose ps
复制代码


5.2.3 测试 SkyWalking 的 UI 界面

在浏览器输入 服务器地址:8088例如:http://192.168.198.120:8088


六 总结

skywalking 就介绍到这里,本章节仅仅只是入门,简单使用 skywalking,实际上里面还有很多功能没有介绍,有兴趣的同学可以按照上面的教程安装部署,然后自己探索一下。在现在微服务架构比较流行的环境下,如果没有一个调用链追踪框架,会导致很难排查线上服务调用的问题。skywalking 是目前发展势头最快的技术框架的技术框架,因为对代码是无侵入性的,所以目前很多公司都采用 skywalking。


以上是根据《官方文档》、观看《图灵架构师课堂》时做的笔记、自己私下练习并成功应用到公司测试环境中。



发布于: 刚刚阅读数: 8
用户头像

还未添加个人签名 2022.06.02 加入

还未添加个人简介

评论

发布
暂无评论
专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】_云原生_掂掂三生有幸_InfoQ写作社区