Golang 基於Prometheus Node_Exporter 開發自定義腳本監控
公司是今年決定將一些傳統應用從虛擬機上遷移到Kubernetes上的,項目多而亂,所以遷移工作進展緩慢,爲了建立統一的監控平臺,我們使用的是在Kubernetes集羣內部署Prometheus-operator,不得不說Prometheus-operator對k8s的監控支持的非常好,helm安裝後會把Prometheus、Alertmanger、Grafana、以及NodeExporter都給安裝完成,打開Grafana k8s中所有監控指標和圖標都已經創建好,大大降低監控部署的複雜性。但是對於我們項目遷移較慢的環境,Promethues只監控k8s集羣當然是不行的,所以我們選擇使用在虛擬機上部署Node_Exporter來監控虛擬機的各項指標,但是Node_Exporter只能監控系統指標,我們可能想要業務的一些監控,比如(文件狀態監控,業務日誌監控...都是一些傳統軟件留下來的坑),這樣Node_Exporter就顯得力不從心了,而且每個項目監控的一些指標並不相同,所以開發統一Exporter不但耗時還會出現一些兼容性和運維複雜性的問題,所以根據原來zabbix自定義監控項的思路考慮對Node_Exporter進行二次開發,增加一個自定義腳本監控項
Node_Exporter源碼目錄結構
通過collector目錄下源碼文件名可以看到具體監控項通過單獨的代碼文件去採集
新建custom_scripts.go 開始編寫自定義腳本監控項採集器
- 定義struct
- 定義所要用到的變量
- 定義init函數去註冊collector,NewCoustomScriptCollector 返回CoustomScriptCollector結構體
- 實現*Unix執行腳本函數
- 註冊Collector接口Update方法
主要邏輯:遍歷目錄下的腳本文件,給腳本文件增加執行權限,然後執行腳本,腳本輸出格式Key=Value,取key、value生成metrics數據
在腳本目錄放入測試腳本
編譯運行
查看metrics數據
最後展示的話可以在grafana中添加圖表,也可在alertmanger添加報警規則,具體可以參考Prometheus-Operator實戰