從廣義的層面上講,任何遵循prometheus資料格式 ,可對其提供監控名額的程式都可以稱為exporter。在prometheus的社群中提供了豐富多樣的exporter供選擇,如前面用到的node_exporter。這些exporter不僅類型豐富,功能上也很強大,通過有效的使用可以極大的友善我們的運維監控工作。除此之外,prometheus還提供了支援多種開發語言的clinet libraries,用于滿足exporter的定制化開發需求。
本文将主要介紹工作中常用的exporter,以及如何通過clinet libraries開發自定義的exporter。
以前面使用過的node_exporter為例,由于作業系統本身并不直接支援prometheus,是以,隻能通過一個獨立運作的程式,從作業系統提供的相關接口将系統的狀态參數轉換為可供prometheus讀取的監控名額。除了作業系統外,如mysql、kafka、redis等媒體,都是通過這種方式實作的。這類exporter承擔了一個中間代理的角色。
由于prometheus項目的火熱,目前有部分開源産品直接在代碼層面使用prometheus的client library,提供了在監控上的直接支援,如kubernetes、etcd等産品。這類産品自身提供對應的metrics接口,prometheus可通過接口直接擷取相關的系統名額資料。這種方式打破了監控的界限,應用程式本身做為一個exporter提供功能。
下面表格是一些較常使用到的exporter及相關的代碼倉庫位址,内容覆寫了資料庫、主機、http、雲平台等多個層面。
<col>
類型
監控媒體
exporter
資料庫
mysql
mysql server exporter
elasticsearch
elasticsearch exporter
mongodb
mongodb exporter
redis
redis exporter
postgresql
postgresql exporter
硬體/作業系統
主機/linux
node exporter
gpu
nvidia gpu exporter
windows
windows exporter
ipmi
ipmi exporter
網絡裝置
snmp exporter
消息隊列
rabbitmq
rabbitmq exporter
kafka
kafka exporter
rocketmq
rocketmq exporter
http
apache
apache exporter
haproxy
haproxy exporter
nginx
nginx exporter
雲平台
阿裡雲
alibaba cloudmonitor exporter
aws
aws cloudwatch exporter
azure
azure monitor exporter
華為雲
huawei cloudeye exporter
騰訊雲
tencentcloud monitor exporter
其他
探針檢測
blackbox exporter
容器
cardviso
ssh
ssh exporter
除以上這些外,還有很多其他用途的exporter,有興趣的朋友可以自行檢視官網:https://prometheus.io/docs/instrumenting/exporters/。
雖然promethesu社群提供了豐富多樣的exporter給使用者使用,但由于各家公司的環境都有自身的特點,有時候可能無法在現有資源中找到合适的工具。此時,我們可以利用prometheus的clinet libraries,開發符合實際需要的自定義exporter。
clinet libraries支援的語言版本非常豐富,除了官方提供了go、java or scala、python和ruby幾種外,還有很多第三方開發的其他語言版本。本文我們将以python為例,示範exporter的開發。
示例:開發一個exporter,用于擷取系統網絡連數狀态為time_wait的數量名額
本示例将調用到的linux的指令如下 ,用于擷取系統的time_wait連接配接數量
使用pip安裝python的prometheus-client庫
在python開發中引入prometheus-client和commands庫,command庫用于執行linux系統指令。
定義一個gauge名額,名稱為time_wait_count,并添加标簽type
定義執行函數,函數調用上面的linux指令,用于擷取相關的名額資訊
現在,我們可以通過執行get_time_wait_count函數擷取到time_wait_count的名額value,但要做為一個exporter運作,我們還得支援http協定。
此處,可以用到prometheus_client的start_http_server子產品,該子產品支援做為http服務啟動。
完整的代碼如下:
将代碼儲存為mytest_exporter.py,在需要監控的伺服器上運作該程式
通路http://ip:8090/metrics,可看到該exporter已經擷取到系統的相關名額。