# 监控改造之路1

入职新公司已经三个月了，据说招我来的目的就是为了做监控的需求，因为我之前有过设计监控告警平台的一些经验吧……

## 现状

新公司监控解决方案是大家所熟知的Prometheus+Grafana那一套，对于来说也算是驾轻就熟了。由于团队是做大数据相关的，对ZooKeeper(后文简称zk)有比较强的依赖(zk是部署在K8s中的)，所以我首先了解了一下之前是如何实现对zk的监控：

是通过jmx实现的，以下是wiki上对jmx的释义：

> JMX是Java平台上为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议，灵活的开发无缝集成的系统、网络和服务管理应用。

openai是这么描述的：

> JMX代表Java管理扩展，是Java平台上的一种管理和监控技术。它允许应用程序提供一个MBean（管理bean）接口，这个接口暴露了应用程序的运行时属性、性能统计信息和方法操作。这些MBean可以被远程管理和监控，通过JMX客户端可以实时查看和修改这些MBean的状态。

我觉得openai的描述我更容易理解，具体实现步骤如下所示：

1. 团队开发了一个exporter的http server；
    
2. exporter负责从支持 jmx 的接口(如 zk )获取监控数据，并将其转化为 prometheus metrics格式；
    
3. prometheus从exporter中抓取数据；
    

## 改造

这么做也不是不可以，至少功能上是实现了，但是直觉上我觉得不应该这么复杂，毕竟prometheus几乎成为了监控的一套标准，zk虽然比较老，但应用广泛，也应该有支持才对呀，于是翻阅了zk的官方文档，果然，只需要配置一下即可

> ### **Prometheus**
> 
> * Running a [Prometheus](https://prometheus.io/) monitoring service is the easiest way to ingest and record ZooKeeper's metrics.
>     
> * Pre-requisites:
>     
> * enable the `Prometheus MetricsProvider` by setting `metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider` in the zoo.cfg.
>     

这里背景需要稍微说明一下：在我入职之前，团队其它人均是3年以下工作经验，对监控完全没有概念，能够从0做到1，我个人觉得已经是不错的了。

## 总结

* 搜索：笔者觉得搜索是一项挺重要的能力的，特别是要学会用google+英文搜索，可以大大提高解决问题的能力，现在有了openai，更方便了。
    
* 借鉴：笔者认为，非底层技术的软件公司，不太能遇到或者解决难度很大的技术问题，我们遇到的许多问题，别人可能都已经解决过了，创新当然是好的，但如果能够参考、借鉴前人的做法，大概率能帮助我们减少弯路。
    

参考

* [https://zookeeper.apache.org/doc/r3.6.3/zookeeperMonitor.html](https://zookeeper.apache.org/doc/r3.6.3/zookeeperMonitor.html)
