SkyWalking 是观察性分析平台和应用性能管理系统(APM, Application Performance Management),由个人开发者 吴晟 于2015年开源,2017年加入Apache孵化器。

它提供分布式跟踪、服务网格遥测分析、度量聚合和可视化的功能,支持Java、.Net、PHP、NodeJs、Golang、LUA语言探针,以及Envoy+Istio构建的Service Mesh,支持 OpenTracing 规范。

SkyWalking设计原则

  • 保持可监控性
  • 拓扑、指标和跟踪于一体
  • 轻量级
  • 可插拔
  • 便于部署
  • 与其他系统的可交互性

SkyWalking架构

SkyWalking总体的架构示意图如下:

SkyWalking 在逻辑上可以分为四个组件:

  • Probes收集数据并转换为SkyWalking要求的格式,发送给后台。宏观的看,Probe包含三种形式:语言级的原生Agent这种 Agent 跟随目标系统一起运行,就像其代码的一部分,例如SkyWalking的Java Agent,用 -javaagent 命令行参数去操纵(修改和注入)执行时的代码。其他方式的 Agent ,使用目标语言库所提供的hook或拦截等机制。Service Mesh probeService Mesh probe从 sidecar 、 service mesh 中 servie 的 control panel 或 proxy 获取数据。第三方工具库直接接收外部数据,用第三方库所提供的工具,将该数据转化为SKyWalking的格式发送到后端
  • Platform backendSkyWalking的后台,又称为 OAP(Observability Analysis Platform) ,将数据进行聚合、分析以及UI的页面流程控制
  • StorageSkyWalking的数据持久层,目前已支持像 ElasticSearch 、 MySql 、 TiDB 、 H2 等常见的各种持久化库
  • UI用于展示数据

另外,SkyWalking也提供了 CLI 可以用命令行进行操作和查询。

SpringCloud中SkyWalking的使用

1. 配置数据库

SkyWalking默认启用了H2的数据库,在生产级,更适合的显然是ElasticSearch(当然, H2 下我也遇到了入库时报 Agent 生成的 traceId 长度超过200的错误)。

方便起见,直接用 ES的 Docker 镜像启用ES集群,本文选用7.9.2的镜像文件。

$sudo docker pull elasticsearch:7.9.2# 此处为方便后续容器使用ES,为其创建一个网络$sudo docker network create esnw# 仅启动一个单节点做演示$sudo docker run -d --name elasticsearch --net esnw -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.2

注:

Docker启动的ES,默认 cluster_name 是 docker-cluster , 如有需要,可以提前改好,后续需指定

2. 配置并启用OAP后台及UI

2.1 下载包

SkyWalking在下载页面 http://skywalking.apache.org/downloads/ 提供了最新版本的整合包,包含了 Agent 、 OAP 和 UI 三个组件,但是,在Dockerhub上是将 OAP ( https://hub.docker.com/r/apache/skywalking-oap-server) 和UI( https://hub.docker.com/r/apache/skywalking-ui)是拆分开来了的。

注:

由于ES6和7 API的变动, OAP 的分别为6和7单独打了一个包,x.y.z-es6是支持ES6的,x.y.z-es7是支持ES7的,由于我们的数据库选用的是ES7,所以要下的是es7最新的包

$sudo docker pull apache/skywalking-oap-server:8.1.0-es7$sudo docker pull apache/skywalking-ui:8.1.0

2.2 配置

OAP 的配置集中在 config/application.yml 中,比较重要的配置有如下几个

cluster:  # 配置SkyWalking的集群方式,默认是单节点,支持zk、k8s、consul、etcd和nacos  selector: ${SW_CLUSTER:standalone}core:  selector: ${SW_CORE:default}  default:    # 对外暴露Http接口的地址以及端口12800    restHost: ${SW_CORE_REST_HOST:0.0.0.0}    restPort: ${SW_CORE_REST_PORT:12800}    # 对外暴露gRPC接口的地址及端口11800    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}    gRPCPort: ${SW_CORE_GRPC_PORT:11800}storage:  # 默认的数据库是H2  selector: ${SW_STORAGE:H2}  elasticsearch7:    # 对应ES的cluser_name,即前面提到的docker-cluster    nameSpace: ${SW_NAMESPACE:"docker-cluster"}    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}

此处,我们只需要将 SW_STORAGE 的默认值从 H2 改为 elasticsearch7 即可,如果之前改过ES的 cluster_name ,此处要将 SW_NAMESPACE 的默认值做对应修改。

Docker的配置,也可直接通过在启动时指定变量值进行改动。

2.3 启动

如果是整合包,则解压后,直接进入bin目录用startup脚本即可同时启动 OAP 和 UI 服务。

Docker启动:

# 启动OAP$sudo docker run --name oap --network esnw --restart always -d -p 11800:11800 -p12800:12800 -e SW_STORAGE=elasticsearch7 -e# 启动UI$docker run --name oap-ui --network esnw --restart always -d -p 8080:8080 -e SW_OAP_ADDRESS=oap:12800 apache/skywalking-ui:8.1.0

注:

SkyWalking的UI有个坑,不支持反向代理,具体可参见 github issue #2675

3. 配置并启用Agent

SkyWalking对于Java项目十分友好,默认提供的 Agent 就是Java的,使用 JavaAgent 进行字节码注入实现拦截。SkyWalking是遵循 OpenTracing 规范的,下图是 OpenTracing 中定义的数据结构。

其中,

  • SpanContext:负责上线文信息保持和传递
  • Trace: 一次调用的完整记录Span: 一次调用中的某个节点/步骤,类似于一层堆栈信息,Trace是由多个Span组成,Span本身也是可以嵌套自身的数据结构Tag: 节点/步骤中的关键信息Log: 节点/步骤中的日志,例如抛出的异常栈Baggage: 主要用于运行时跨Span或跨实例的上下文传递

3.1 配置

从前面下载页下载的整合包里,把整个 agent 目录拷到项目文件里,或者单独放在某个位置。

activationsbootstrap-plugins# 配置文件存放目录config# agent运行时生成的日志保存在此目录logs# 可选用的插件,默认不启用optional-plugins# 可选用的reporter插件,默认不启用optional-reporter-plugins# 默认启用的插件放于此目录plugins# 拦截探针实现skywalking-agent.jar

暂时没有需要修改的配置,就不去更改配置文件了。

optional-plugins 里的插件默认是不启用的,如果要启用,需要将其移动到 plugins 目录。

optional-plugins 里,有几个可选插件是值得我们注意的:

  • apm-spring-annotation-plugin-8.1.0.jar该插件可追踪Spring上下文中被 @Bean , @Service , @Component 和 @Repository 注解的方法,该插件一旦启用,会产生大量的span,从而消耗更多的资源,所以默认是把它放到了可选插件中。
  • apm-spring-cloud-gateway-2.1.x-plugin-8.1.0.jar该插件将从SpringCloudGateway产生的span与后续相同链路的span合并到一起进行追踪,如果没有这个插件,一个REST请求,如/api/hello,经过SC Gateway到达服务a时,将会在UI上展示两个跟踪记录而非一条(服务a也必须启用skywalking agent)。该插件依赖spring-webflux-5.x-plugin。但该插件应该只对Spring Cloud Gateway启用。
  • apm-trace-ignore-plugin-8.1.0.jar该插件可以自定义过滤掉一些路径,不被追踪。使用时,需要把 /agent/optional-plugins/apm-trace-ignore-plugin/apm-trace-ignore-plugin.config 拷贝到 /agent/config 目录,然后修改其内容增加想要过滤掉的路径,例如:trace.ignore_path=/your/path/1/**,/your/path/2/**
  • apm-customize-enhance-plugin-8.1.0.jar该插件可以通过指定增强文件来实现方法级的精细拦截及span生成的定义,而不用写代码。具体参见: 这里

为方便测试,我们将apm-spring-annotation-plugin-8.1.0.jar和apm-spring-cloud-gateway-2.1.x-plugin-8.1.0.jar 拷入 plugins 目录启用。

3.2 启动

在启动SC项目文件时,增加JVM参数:

-javaagent:agentskywalking-agent.jar -Dskywalking.agent.service_name= -Dskywalking.collector.backend_service=:11800

其中, Java Agent 默认采用的gRPC调用,所以端口默认为11800。

启动时, Agent 会根据jar包所在位置自动寻找config目录下的 agent.config 文件读取配置。

至此,SkyWalking的初步整合已经完毕,可以向SpringCloud Gateway发送一个请求到具体的微服务,等待几秒后,可在 UI 的 拓扑图 页面中看到整个微服务的拓扑,在 追踪 页面中看到查找到刚才所发请求的整个链路调用过程以及所消耗的时间以及具体的log等。

本文由EdisonXu - 徐焱飞 创作,采用 CC BY 4.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

本文链接为 http://edisonxu.com/2020/10/13/skywalking-intro.html

skywalking es7_SpringCloud下skywalking的快速入门相关推荐

  1. [git]Windows环境下 git Github 快速入门

    二.创建本地仓库 Git安装完成后有一个Git Bash,打开Git Bash.输入如下命令: cd d: mkdir learngit cd learngit 上述命令表示切换到电脑D盘,然后创建一 ...

  2. html基本标签主板要下哪些驱动,快速入门用户指南 HTML 版本主板和套件

    英特尔®服务器主板 S3210SHLX 的快速入门用户指南 开始 集成 参考 感谢您购买英特尔®服务器主板 S3210SHLX. 以下信息将帮助您将您的新服务器主板集成到服务器机箱. 英特尔®服务器主 ...

  3. Enterprise Library 缓存应用程序块快速入门

    Enterprise Library 快速入门是简单的.易于理解的应用程序块关键特性的示例,使用了一个实现了常规场景的漫游集合来说明这些特性. 如果要理解一个应用程序块,快速入门将是理想的起始点,并且 ...

  4. automake linux,Linux下automake软件编译与发布快速入门

    Linux下automake软件编译与发布快速入门 2008-04-22 eNet&Ciweek 进入编辑界面,输入内容如下: AUTOMAKE_OPTIONS=foreign bin_PRO ...

  5. C++网络编程快速入门(二):Linux下使用select演示简单服务端程序

    目录 select参数解释 select使用规范 select使用缺点 基本流程 实例代码 通信效果演示 往期文章 select参数解释 extern int select (int __nfds, ...

  6. Dart语言——45分钟快速入门(下)

    类和对象 类的定义 // Dart中定义一个类 class Person {String name;int age;Person(String name, int age) {this.name = ...

  7. linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器

    原标题:Linux 下的这些高效指令,是你快速入门运维的神器 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它 ...

  8. ih5怎么切换下一个页面_ih5快速入门(二)

    快速入门第二章,使用一个简单案例来帮助大家,第一章所介绍的都会涉及到 大家先浏览一下案例 首先我们先看首页是如何做的,在这里会运用到动效 事件 同时也会在这里告诉大家音乐如何放进去,以及点击左上角可以 ...

  9. Python语言快速入门(下)

    前言 本图文是本期图文的下篇,可能篇幅较长大概有10000多字,很高兴您能阅读,也感谢您的关注支持!这期下篇主要还是接着上次的内容继续,在上篇中我介绍了关于Python环境的安装.基本数据处理.输入输 ...

最新文章

  1. 计算机操作系统作业答案,计算机操作系统作业及答案
  2. 结构型模式--装饰模式
  3. @大学生,送给步入大学生活的你,高速学编程。
  4. OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)
  5. 参会人员管理系统C语言代码,某小型会议参会人员管理系统
  6. Web Hacking 101 中文版 十、跨站脚本攻击(二)
  7. Python 命令行非阻塞输入
  8. dell 2950 raid阵列冷迁移方法
  9. Linux下手动挂载新增磁盘
  10. php web表格导出,javascript将web表格导出成excel
  11. 2015第35周六转相见恨晚的知识列表
  12. JMeter-配置元件-HTTP授权管理器
  13. 斯坦福大学开源四足机器人pupper腿部组装(上)
  14. pwn暑假训练(九) emem原来昨天是8今天是9
  15. 插曲(1)dht11的连接
  16. Flink DataSet API
  17. 洛谷 P2842 LJJ算数
  18. 思科服务器管理口装系统,cisco思科统一计算系统UCS B系列刀片服务器推荐
  19. sqlserver 行列转换适用一定格式报表的统计
  20. vue项目引入外部字体文件

热门文章

  1. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)
  2. “std::invoke”: 未找到匹配的重载函数
  3. pyqt5 QMainWindow 居中
  4. shell下function报错
  5. freeimage例子资料整理
  6. 60 Celery队列
  7. 程序世界的秘密(中)
  8. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习
  9. 广东省一本大学哪些学计算机,2020年广东省内一本大学有哪些(一本大学一览表)...
  10. c多线程并发处理方式_ElasticSearch 并发的处理方式:锁和版本控制