首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Prometheus监控有所思:多标签埋点及Mbean

使用 grafana+prometheus+jmx 作为普通的监控手段,是比较有用的。我之前的文章介绍了相应的实现办法。https://www.cnblogs.com/yougewe/p/11140129.html

但是,按照之前的实现,我们更多的只能是监控 单值型的数据,如请求量,tps 等等,对于复杂组合型的指标却不容易监控。

这种情况一般带有一定的业务属性,比如想监控mq中的每个topic的消费情况,每类产品的实时订单情况等等。当然,对于看过完整的 prometheus 的监控数据的同学来说,会觉得很正常,因为你会看到如下的数据:

这里面的 name 就是普通标签嘛,同理于其他埋点咯。应该是可以实现的。

而它则是重在单值的监控,所以,用它我们是实现不了带指标的数据的监控了。

那怎么办呢?三个办法!

1. 直接替换原有的 metrics-core 组件为 prometheus 的client 组件,因为官方是支持这种操作的;

2. 使用 prometheus-client 组件与 metrics-core 组件配合,各自使用各自的功能;

3. 自行实现带标签的埋点,这可能是基于 MBean 的;

以上这几种方案,各有优劣。方案1可能改动太大,而且可能功能不兼容不可行; 方案2可能存在整合不了或者功能冲突情况,当然如果能整合,绝对是最好的; 方案3实现复杂度就高了,比如监控值维护、线程安全、MBean数据吐出方式等等。

好吧,不管怎么样,我们还是都看看吧。

一、 使用 prometheus-client 埋点实现带标签的监控

1. 引入 pom 依赖

2. 框架注册监控

3. 业务埋点数据

4. 获取埋点数据信息

可以看出,效果咱们是实现了。但是,对于已经运行的东西,要改这玩意可能不是那么友好。主要有以下几点:

1. 暴露数据方式变更,原来由javaagent进行统一处理的数据,现在可能由于应用端口的不一,导致收集的配置会变更,不一定符合运维场景;

2. 需要将原来的埋点进行替换;

二、 prometheus-client 与 metrics-core 混合埋点

不处理以前的监控,将新监控带标签数据吐入到 jmx_exportor 中。

我们试着使用如上的埋点方式:

好像数据是不会进入的到 jmx_exportor 的。这也不奇怪,毕竟咱们也不了解其原理,难道想靠运气取胜??  细去查看 metrics-core 组件的埋点实现方案,发现其是向 MBean 中吐入数据,从而被 jmx_exportor 抓取的。

而 prometheus-client 则是通过 CollectorRegistry.defaultRegistry 进行注册实例的。

所以,好像原理上来讲是不同的。至于到底为什么不能监控到数据,那还不好说。至少,你可以学习 metrics-core 使用 MBean 的形式将数据导出。这是我们下一个方案要讨论的事。

这里我可以给到一个最终简单又不失巧合的方式,实现两个监控组件的兼容,同时向 jmx_exportor 进行导出。如下:

1. 引入 javaagent 依赖包

2. 使用 agent 的工具类进行埋点

因为 javaagent 里面提供一套完整的 client 工具包,所以,我们可以使用。

3. 原样使用 jmx_exportor 就可以导出监控数据了

为什么换一个包这样就可以了?

因为 jmx_exportor 也是通过注册 CollectorRegistry.defaultRegistry 来进行收集数据的,我们只要保持与其实例一致,就可以做到在同一个jvm内共享数据了。

三、 基于 MBean自行实现带标签的埋点

最后,见证奇迹的时刻。结果如下:

很明显,这是一个糟糕的实现,不要学他。仅为了演示效果。

所以,总结下来,自然是使用方案2了。两个组件兼容,实现简单,性能也不错。如果只是为了使用,到此就可以了。不过你得明白,以上方案有取巧的成分在。

四、 原理: jmx_exportor 是如何获取数据的?

jmx_exportor 也是可以通过 http_server 暴露数据。

所以,可以主要逻辑是 HTTPMetricHandler 处理。来看看。

五、 原理: jmx_exportor 是如何获取Mbean 的数据的?

jmx_exportor 有一个 JmxScraper, 专门用于处理 MBean 的值。

六、 原理: jmx_exportor 为什么输出的格式是这样的?

prometheus 的数据格式如下,如何从埋点数据转换?

是一个输出格式问题,也是一协议问题。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210321A014J700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券