SpringCloud下skywalking的快速入门

SkyWalking 是观察性分析平台和应用性能管理系统(APM, Application Performance Management) , 由个人开发者 吴晟 于2015年开源 , 2017年加入Apache孵化器 。
它提供分布式跟踪、服务网格遥测分析、度量聚合和可视化的功能 , 支持Java、.Net、PHP、NodeJs、Golang、LUA语言探针 , 以及Envoy+Istio构建的Service Mesh , 支持 OpenTracing 规范 。
SkyWalking设计原则

  • 保持可监控性
  • 拓扑、指标和跟踪于一体
  • 轻量级
  • 可插拔
  • 便于部署
  • 与其他系统的可交互性
SkyWalking架构SkyWalking总体的架构示意图如下:
SpringCloud下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后台及UI2.1 下载包SkyWalking在下载页面提供了最新版本的整合包 , 包含了 Agent 、 OAP 和 UI 三个组件 , 但是 , 在Dockerhub上是将 OAP ( ) 和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.02.2 配置OAP 的配置集中在 config/application.yml 中 , 比较重要的配置有如下几个
cluster:# 配置SkyWalking的集群方式 , 默认是单节点 , 支持zk、k8s、consul、etcd和nacosselector: ${SW_CLUSTER:standalone}core:selector: ${SW_CORE:default}default:# 对外暴露Http接口的地址以及端口12800restHost: ${SW_CORE_REST_HOST:0.0.0.0}restPort: ${SW_CORE_REST_PORT:12800}# 对外暴露gRPC接口的地址及端口11800gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}gRPCPort: ${SW_CORE_GRPC_PORT:11800}storage:# 默认的数据库是H2selector: ${SW_STORAGE:H2}elasticsearch7:# 对应ES的cluser_name , 即前面提到的docker-clusternameSpace: ${SW_NAMESPACE:"docker-cluster"}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}