写点什么

想看新指标?教你轻松写 prober 插件

用户头像
Obsuite
关注
发布于: 2021 年 03 月 05 日


prober 插件通过 API 方式采集打点数据,目前已有插件:


  • elasticsearch

  • github

  • haproxy

  • mongodb

  • mysql

  • nginx

  • prometheus

  • rabbitmq

  • redis

  • tengine

  • zookeeper


prober 插件是使用 telegraf


(https://www.influxdata.com/time-series-platform/telegraf/T) 插件接口封装而成,你可以:


  • 直接封装一个 telegraf

  • 写一个 telegraf 插件,然后再封装成 prober 插件


接下来用 src/modules/monapi/plugins/demo 为例,介绍插件的开发。


Telegraf 插件 开发


安全提示


需要实现一个这样的接口类型:




下面是 demo 插件的实现:




这样就有了一个 telegraf 的插件, 接下来将它封装成 prober 插件。


插件中 Gather 方法中的 acc 是一个接口,具体的实例由运行环境提供的, 在 prober 中运行插件时,acc 的实现在 src/modules/prober/manager/accumulator.go


Prober


prober 会定期从 monapi 获取 collectRule 列表,检查更新自己的插件实例。


  • create rule collector

  • update rule collector

  • delete rule collector


其中,update rule 是由 delete old,create new 来实现的。


monapi 之所以需要加载插件,是因为需要获取插件的参数描述,这样才能渲染出合适的 UI 界面,方便用户输入。 这是 demo 的参数描述:



有关 ui 的信息描述,放在了 structField 的 tag 中,详细的 tag 如下:



这样,mapapi 拿到结构体后,就可以知道如何渲染,填充结构体里的参数,然后将用户输入的数据存入数据库后,分发到各个 prober 上执行。


prober 获取规则后,通过插件的 TelegrafInput 方法,将 rule 转换成 telegraf.Input 实例。



测试


src/modules/monapi/plugins/demo/demo_test.go




部署


内置编译


  • 修改 src/modules/monapi/plugins/all/all.go,添加 demo

  • 重新编译 monapi & prober


外挂加载


将自己的插件编译成动态库文件(.so), 复制到 monapi &prober 工作目录下的 plugins/




观看视频讲解:www.bilibili.com/video/BV1MK…


用户头像

Obsuite

关注

混合云可观测性中台 2021.01.19 加入

Obsuite是来自滴滴的可观测性智能中台。微信服务号/B站:Obsuite;Github:https://github.com/didi/nightingale(滴滴夜莺)、https://github.com/didi/Logi-KafkaManager(滴滴Logi-KafkaManager)。

评论

发布
暂无评论
想看新指标?教你轻松写prober插件