最近工做上有個需求,須要把prometheus 採集到的數據上報到kafka消息隊列,看了下官方實現,prometheus 支持remote_write / remote_read 的方式擴展,能夠在此基礎上作文章。git
github 上面有個現成的插件,看了一下,主要存在如下一些問題: github
一、從環境變量讀取配置(不夠靈活,後續很差優化,不能作到配置熱加載) golang
二、把client 對象建立的邏輯放到了http handler裏面(每次prometheus 調用/write 接口,都要new一個對象...) 異步
三、使用golang kafka 插件sarama 的同步生產者方式寫數據(數據量大的狀況下,性能可能跟不上)ide
因而本身動手寫一個插件,練練手。性能
代碼比較簡單,就是以插件的方式部署適配器,接收prometheus 產生的數據並經過異步kafka 生產者模式,將數據輸送給kafka。優化
大體邏輯是這樣: 插件
一、從配置文件中獲取kafka相關配置 對象
二、本地監聽9201 端口提供http 服務供prometheus 寫入數據 接口
三、從/write API 獲取到prometheus監控數據後,將數據寫入到channel
四、起一個kafka 異步生產者,從channel裏面讀取監控數據,並寫入到kafka
代碼具體代碼:
https://gitee.com/pmghong/prometheus-kafka-adapter