作者:张震

一. 简介

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各组件添加环境变量。

变量解释:

变量值 简介
-Dskywalking.agent.service_name=** 在SkyWalking UI中展示的服务名
-Dskywalking.collector.backend_service=Host:Port SkyWalking oap-server的访问地址,用来接收skywalking trace数据
-javaagent:/tmp/agent/skywalking-agent.jar 指定需要注入的jar包地址

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

  • 建立依赖关系

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

访问SkyWalking

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

  • 仪表盘

  • 服务调用拓扑图

六. 总结

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


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

Rainbond通过插件整合SkyWalking,实现APM即插即用的更多相关文章

  1. 云原生PaaS平台通过插件整合SkyWalking,实现APM即插即用

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

  2. Rainbond通过插件整合ELK/EFK,实现日志收集

    前言 ELK 是三个开源项目的首字母缩写:Elasticsearch.Logstash 和 Kibana.但后来出现的 FileBeat 可以完全替代 Logstash的数据收集功能,也比较轻量级.本 ...

  3. WordPress-Word图片上传插件整合教程-Xproer.WordPaster

    插件下载(PHP):wordpress 3.7.1, 说明:由于许多插件可能使用相同钩子,导致冲突,所以提供手支方式整合. 1.上传插件目录. 说明:WordPress 3.7.1 使用的是TinyM ...

  4. WordPress 3.7.1-web截屏插件整合教程-Xproer.ScreenCapture

    插件下载(PHP):wordpress 3.7.1, 说明:由于许多插件可能使用相同钩子,导致冲突,所以提供手支方式整合. 1.上传插件目录. 说明:WordPress 3.7.1 使用的是TinyM ...

  5. 利用 Skywalking 搭建 APM(应用性能管理)— 安装与配置

    1.什么是 Skywalking Skywalking 是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计.它通过探针自动收集所需的指标,并进行分布式追踪.通过这些调用链路以及指标 ...

  6. SpringCloud微服务实战——搭建企业级开发框架(三十三):整合Skywalking实现链路追踪

      Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点.是一款基于分 ...

  7. 使用JMX Exporter监控Rainbond上的Java应用

    场景 Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据.当您的 Java 应用部署在Rainbond上后 可通过 ...

  8. 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking

    目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...

  9. 轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷

    以往有篇文章介绍 EFK(Kibana + ElasticSearch + Filebeat)的插件日志收集.Filebeat 插件用于转发和集中日志数据,并将它们转发到 Elasticsearch ...

随机推荐

  1. 【UE4 设计模式】简单工厂模式 Simple Factory Pattern

    概述 描述 又称为静态工厂方法 一般使用静态方法,根据参数的不同创建不同类的实例 套路 创建抽象产品类 : 创建具体产品类,继承抽象产品类: 创建工厂类,通过静态方法根据传入不同参数从而创建不同具体产 ...

  2. 类图示例-订单系统 / Class Diagram - Order System

    类图示例-订单系统 / Class Diagram - Order System 什么是类图? 类图通过显示它的类和它们之间的关系来概述系统.类图是静态的 - 它们显示交互的内容,但不显示交互时会发生 ...

  3. python3中的bytes和string

    原文链接:https://www.cnblogs.com/abclife/p/7445222.html python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分.文本总是 ...

  4. FastAPI 学习之路(五十九)封装统一的json返回处理工具

    这之前的接口,我们返回的格式都是每个接口异常返回的数据格式都会不一样,我们处理起来没有那么方便,我们可以封装一个统一的json处理. 那么我们看下如何来实现呢 from fastapi import ...

  5. 单片机I/O口推挽与开漏输出详解(力荐)

    推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止. 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电 ...

  6. jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例

    本文实例讲述了jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能.分享给大家供大家参考,具体如下: 弹出层:两种方式 一是打开网页就自动弹出层二是点击弹出 <!DOCTYPE html ...

  7. Python super(Todo,self).__init__() TypeError: super() argument 1 must be type, not classobj

    示例如下 class A(): def __init__(self):pass class B(A): def __init__(self): super(A, self).__init__() 当调 ...

  8. JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字

    public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静 ...

  9. 折腾systemd-nspawn运行centos7

    Archlinux创建Debian/Ubuntu的systemd-nspawn容器是很简单的,因为有debootstrap软件.某天我突然想装个centos7玩玩,搜了半天没发现有什么类似于deboo ...

  10. 权限控制-RBAC(Role-Based Access Control)

    RBAC是基于角色的权限访问控制,在RBAC中角色与权限相连,用户通过成为某个角色而得到角色的权限,这就极大的简化了权限的管理,用户和角色多对多,角色和权限多对多,由此产生用户表.角色表.权限表,用户 ...