写点什么

Rainbond 通过插件整合 SkyWalking,实现 APM 即插即用

作者:Rex
  • 2021 年 11 月 29 日
  • 本文字数:2124 字

    阅读完需:约 7 分钟

Rainbond通过插件整合SkyWalking,实现APM即插即用

作者:张震

一. 简介

SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。支持分布式追踪、性能指标分析、应用和服务依赖分析等;它是一种现代 APM,专为云原生、基于容器的分布式系统而设计。


本文整合的目标要达成,运行在 Rainbond 上的应用,通过开启 Rainbond 的 SkyWalking 插件,自动对接 SkyWalking Server,灵活开启 APM,不需要时关闭插件,实现即插即用的 APM。

二. 整合架构

SkyWalking 对服务进行监控时服需要在被监控服务中启用 agent 服务,而 SkyWalking agent 需要配置到应用的启动命令,虽然对应用代码无侵入,但配置过程需要侵入应用。Rainbond 通过插件实现对应用的无侵入,将 SkyWalking 的 agent 制作成 Rainbond 的 初始化类型插件,在应用容器启动之前将 agent 的 jar 包拷贝到应用容器,应用容器就能加载 agent 并连接 SkyWalking Server,整个过程对应用容器无侵入,且拓展性强。对接其他 APM 也可以用类似方式,使用用户通过替换插件实现对接不同的 APM 工具。


下图展示了在 Rainbond 中使用 SkyWalking 对应用进行监控的结构


三. Agent 插件实现原理

Rainbond 插件体系是相对于 Rainbond 应用模型的一部分,插件主要用来实现应用容器扩展运维能力。由于运维工具的实现有较大的共性,因此插件本身可以被复用。插件必须绑定到应用容器时才具有运行时状态,用以实现一种运维能力,比如性能分析插件、网络治理插件、初始化类型插件。


具有运行时的插件的运行环境与所绑定的组件从以下几个方面保持一致:


  • 网络空间 这个一个至关重要的特性,网络空间一致使插件可以对组件网络流量进行旁路监听和拦截,设置组件本地域名解析等。

  • 存储持久化空间 这个特性使得插件与组件之间可以通过持久化目录进行文件交换。

  • 环境变量 这个特性使得插件可以读取组件的环境变量。


SkyWalking 与 Rainbond 融合的过程中,我们使用到了初始化类型插件,顾名思义这是一个在应用容器启动前能够进行初始化动作的的插件,其基本原理是利用 Kubernetes 的 init容器 实现的,Pod 能够包含多个容器,应用运行在这些容器里面,同时 Pod 也能够有一个或者多个先于应用容器启动的 init 容器,只有 init 容器运行成功后才会运行应用容器,在 Rainbond 中开通了该类型插件的组件会在应用容器启动之前运行插件中已定义的任务直至完成。所以只需定义在应用容器启动前,使用初始化类型容器将 agent 所需数据拷贝至对应目录下,这样后续服务则可以直接使用这些数据。

四. 通过 Rainbond 一键安装 SkyWalking

我们已将 SkyWalking 制作为应用并发布至应用市场,用户可基于开源应用商店一键安装。


  1. 安装 Rainbond;

  2. 在开源应用商店搜索 SkyWalking,点击安装即可一键安装;



3.安装完成,后续可通过 Rainbond 管理和运维 SkyWalking。



SkyWalking 服务端在架构上分为四个部分:探针服务、后端服务、存储服务和 UI:


  • 平台后端(oap-server) 支持数据聚合、分析和流处理,包括跟踪、指标和日志。

  • 存储(elasticsearch-7.13.4) 通过开放/可插拔接口存储 SkyWalking 数据。支持 ElasticSearch、H2、MySQL、TiDB、InfluxDB。

  • UI(skywalking-ui) 是高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。

  • 探针(agent) 收集数据并根据 SkyWalking 要求重新格式化数据(不同的探针支持不同的来源)。

五. 使用 SkyWalking 对微服务进行监控

预先准备环境

配置服务支持 SkyWalking 监控

  • 部署插件


在 Rainbond 团队界面点击插件后进入插件界面,点击新建插件,创建初始化类型插件


源码地址:https://github.com/goodrain/skywalking-agent.git



插件构建成功后即可使用,为 pig 服务的各组件开通此插件即可。


  • 挂载存储


为 pig 服务的各组件挂载存储,使其与插件共享该存储。



挂载路径为/tmp/agent,挂载类型为共享存储;该存储为初始化插件及该组件提供共享存储,共享同一份数据。


  • 添加环境变量


为 pig 各组件添加环境变量。



变量解释:



添加环境变量以后更新组件即可生效。


  • 建立依赖关系


将需要监控的各组件建立与 SkyWalking oap-server 服务的依赖关系,使其能够通过 127.0.0.1 的地址连接 oap-server,具体原理请参考服务间通信;或者开启 oap-server 的对外地址,在被监控端填写该地址,则无需建立依赖关系。

访问 SkyWalking

访问 skywalking-ui 对外端口,进入可视化界面。


  • 仪表盘



  • 服务调用拓扑图


六. 总结

基于 Rainbond 的插件机制与 SkyWalking 结合,无需改变软件自身运行环境,不需要向项目构建脚本添加逻辑,实现 SkyWalking 能力即插即用。除此之外,Rainbond 的插件机制具有开放性,通过插件机制对应用治理功能进行扩展,例如网络治理类、日志收集类、数据备份类插件,在对原应用逻辑无侵入的情况下,能够通过网络治理类插件对服务的性能进行分析,通过日志插件收集服务日志,对接 ELK 等日志收集系统;对于数据库等组件而言,使用备份插件对数据进行备份。



Rainbond 是一个开源的云原生应用管理平台,使用简单,不需要懂容器和 Kubernetes,支持管理多个 Kubernetes 集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。



用户头像

Rex

关注

还未添加个人签名 2018.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Rainbond通过插件整合SkyWalking,实现APM即插即用