天天看點

Prometheus監控運維實戰十二:Exporter詳解

從廣義的層面上講,任何遵循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​​ 

容器

​​ca​​​​r​​dviso

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已經擷取到系統的相關名額。

Prometheus監控運維實戰十二:Exporter詳解

繼續閱讀