Skywalking OAP定制开发全入门

本文详细介绍了如何扩展Skywalking OAP,包括编写graphqls接口、使用ES数据源实现接口内部逻辑,以及在遇到问题时如何解决,如字段分词问题。通过实战步骤,帮助读者掌握Skywalking的定制开发。
摘要由CSDN通过智能技术生成

Skywalking与前端交互扩展开发(一文全掌握)

最近发现很多技术男都是lsp(手动狗头),所以我也先来一张美女镇楼,给大家提提神,别看我的文章看困了,哈哈。
在这里插入图片描述
对于想要扩展Skywalking OAP端的小伙伴们估计很容易发现一个问题,在官方和网上的资料很少,而且讲的都太浅显了。鄙人不才,作为一个研究了蛮久Skywalking的混子,打算写一篇oap实战的文章,并以此作为切入点来聊聊如果扩展和踩坑血泪史。

研发需求:

统计使用skywalking页面的pv(如果有说可以安装前端监控agent就能解决问题的杠精,请出门右转😄)
绘制的pv需求草图如下:
在这里插入图片描述

需求拆解:

  • 编写graphqls文件的接口
  • 编写前端代码【本文略】
  • 使用ES作为数据源,完成接口的内部实现

实战开始:

Tip1:一般开源项目往往不会使用spring系列,所以一般来说都是通过系统生命周期的管理,一般套路是prepare() --> start() --> run() —>after() --> notify() 酱紫,在这些偏前面的方法里植入注册逻辑,再偏后面的方法里去获取对象来处理,就能达到spring的getBean的效果。
Tip2: 因为skywalking-oap是模块化的,但是有时候我们想要一个环绕的非业务性的通用逻辑,例如事件机制,记日志,配置中心(oap中配置中心依赖中间件,且模块层级偏深,个人感觉不是很好),导致了很难跨模块获取信息。这一点在后续的文章中再细聊吧。

编写graphqls文件的接口

直接看代码,不懂graphql语法也没关系,照葫芦画瓢即可。

## ------------------  前端埋点 ------------------ ##

type PVData {
   
    # 访问的页面名称
    pageName: String
    #pv数值
    pv: Int
    # 当前时间戳
    dayTimestamp: Long
}

# 天级别的时间段
input DayDuration {
   
    # 开始时间戳
    start: Long!
    # 结束时间戳
    end: Long!
}

extend type Query {
   
    # 仅支持天级别的查询
    getPV(duration: DayDuration!): [PVData]
}

input UpdatePVRequest {
   
    # 访问的页面名称(前端映射好)
    pageName: String!
    # 开始访问时间,UNIX时间戳
    timestamp: Long!
}

type UpdatePVResponse {
   
    # True means change successfully.
    status: Boolean!
    message: String!
}

extend type Mutation {
   
    updatePV(updatePVRequest: UpdatePVRequest!): UpdatePVResponse!
}

使用ES作为数据源,完成接口的内部实现

结合上面Tip1讲的和接下来的代码细品 O(∩_∩)O~~

注册好graphql文件

修改GraphQLQueryProvider添加我们所需要的数据结构体,在prepare方法里面添加注册逻辑

.file("query-protocol/buried-point.graphqls")
.resolvers(new BuriedPointQuery(getManager()), new BuriedPointMutation(getManager()))
注册好Controller层

修改CoreModule,在addQueryService加我们所需的service

// add BuriedPointQueryService and BuriedPointQueryService
classes.add(BuriedPointQueryService.class);
classes.add(BuriedPointMutationService.class);
编写Controller接口代码
// 查询类型的实现
public class BuriedPointQuery implements GraphQLQueryResolver {
   
    private final ModuleManager moduleManager;
    private BuriedPointQueryService buriedPointQueryService;

    public BuriedPointQuery(ModuleManager moduleManager) {
   
        this.moduleManager = moduleManager;
    }

    private BuriedPointQueryService getBuriedPointQueryService() {
   
        if (buriedPointQueryService == null) {
   
            this.buriedPointQueryService = moduleManager.find(CoreModule.NAME)
                    .provider()
                    .getService(BuriedPointQueryService.class);
        }
        return buriedPointQueryService;
    }

    public List<PVData> getPV(DayDuration duration) throws IOException {
   
        return getBuriedPointQueryService().getPV(duration);
    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SkyWalking OAP(Open Application Platform)是一个开源的分布式应用性能监控和分析平台。它提供了面的应用程序性能监控和分析功能,可以帮助开发人员和运维团队实时监控和诊断分布式系统的性能问题。 SkyWalking OAP 的主要特点包括: 1. 分布式追踪:SkyWalking OAP 可以跟踪分布式系统中的请求流程,包括跨进程和跨服务的调用链追踪。通过可视化的调用链图,可以清晰地了解请求在系统中的流转情况,方便排查性能问题。 2. 应用性能监控:SkyWalking OAP 可以监控应用程序的性能指标,包括响应时间、吞吐量、错误率等。通过实时监控这些指标,可以及时发现并解决性能问题,提升应用程序的稳定性和可靠性。 3. 跨语言支持:SkyWalking OAP 支持多种编程语言,包括Java、.NET、Node.js、Python等。无论是使用哪种语言开发的应用程序,都可以通过集成相应的 SkyWalking Agent 来实现性能监控和追踪。 4. 插件化架构:SkyWalking OAP 的架构设计具有良好的可扩展性和灵活性。它采用插件化的方式,可以方便地集成各种数据源和存储后端,满足不同场景下的监控和分析需求。 5. 数据可视化:SkyWalking OAP 提供了丰富的数据可视化功能,可以通过仪表盘、图表等形式展示监控数据。用户可以根据自己的需求自定义仪表盘,并进行数据分析和趋势预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值