【SkyWalking】如何在业务系统中控制SkyWalkingAgent的生命周期

写在前面

文章基于SkyWalking-oap-9.7.0版本,agent版本为9.1.0。

使用场景

在业务系统使用SkyWalking时,希望通过统一的应用来管理agent信息,例如运维系统 / 流水线系统等,使用SkyWalking的ui来管理,就会多出一套系统维护的成本,我们可以通过对SkyWalking的代码进行改造,实现agent数据统一化管理。

改造方案

在agent启动和停止阶段,加入一个grpc的调用,通过agent给oap服务传递的信息,由oap进行对业务系统的接口调用,上报agent的生命周期信息及心跳数据。

改造代码

agent部分

上线

前往apm-sniffer -> apm-agent-core -> remote目录下,找到ServiceManagementClient文件

在run方法中加入自定义的grpc请求代码,其中blockingStud是grpc-proto生成的文件名,online方法和Message类是proto文件中定义的方法名及实体类。

加入成功后,在agent启动时,就会将agent定义的serviceName和instanceName参数传给oap后端

下线

在ServiceManagementClient文件中,找到shutdown部分,加入下面的代码,在服务停止时,agent会先进行下线消息通知,再进行agent自身的停止逻辑。 需要特别注意的是,修改shutdown的方法后,需要调整BootService接口的执行顺序,否则会出现serviceBlockingStud为null的情况,导致下线通知失败。

ServiceManager中需要调整的部分如下,先通过反射获取到上面修改的ServiceManagementClient,先进行下线通知,然后一次对其他的BootService进行停止。

oap部分

在SkyWalking代码中,找到oap-server -> server-receiver-plugin目录,在下面新建一个用于接受agent上线/下线通知的新模块,核心代码为继承Grpc生成的类文件,并实现GRPCHandler接口,将Grpc服务交给oap统一管理。 在online和offline方法中,接收到agent上报的信息,经过自定义整合后,通过http或其他请求方式,传递给业务系统,进行持久化或其他处理。

相关推荐
shengjk141 分钟前
当10万天分区来袭:一个让StarRocks崩溃、Kudu拒绝、HDFS微笑的架构故事
后端
一 乐44 分钟前
鲜花销售|基于springboot+vue的鲜花销售系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
T.O.P_KING1 小时前
Common Go Mistakes(IV 字符串)
开发语言·后端·golang
盒马盒马1 小时前
Rust:Trait 标签 & 常见特征
开发语言·后端·rust
韩立学长1 小时前
基于Springboot儿童福利院规划管理系统o292y1v8(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
y1y1z1 小时前
Spring国际化
java·后端·spring
weixin_307779131 小时前
Jenkins ASM API 插件:详解与应用指南
java·运维·开发语言·后端·jenkins
程序员爱钓鱼1 小时前
Node.js 与前端 JavaScript 的区别:不仅仅是“运行环境不同”
后端·node.js
程序员爱钓鱼1 小时前
用 Go 做浏览器自动化?chromedp 带你飞!
后端·go·trae
ByteX1 小时前
springboot 项目某个接口响应特别慢排查
java·spring boot·后端