開發本身的分佈式監控Prometheus Exporter時遇到的坑

   這裏說下我在開發本身的Prometheus Exporter時遇到的幾個坑,所謂的坑,實際上是在開發過程當中須要注意到的幾個關鍵點,若是忽略,那麼可能會產生錯誤和非預期的結果。node

3c74000376a36ad3643e

  若是對Prometheus不瞭解的,能夠自行谷歌或百度一下,或者能夠看下我以前的一篇文章。Prometheus是基於Pull的工做模式,須要按期的從Agent端收集數據,併入庫,這裏的Agent被稱爲Exporter。官網和社區裏目前不少成熟的expoter能夠選擇,好比監控linux機器的node_exporter、監控mysql的mysqld_exporter等等。這裏的大多數都是用Go語言寫的,其實理解了Exporter和Prometheus的工做原理以後就知道,exporter其實就是將收集的數據轉化爲文本格式,並對外暴露接口,提供 http 請求,因此很容本身實現一個,沒必要拘泥於用那種語言,你能夠用Java、PHP或者Python等任何你擅長的。我這裏用Python Flask框架寫了一個監控vSphere Datastore的Exporter,開發過程當中須要注意一下幾點:python

  1. Exporter的總體文本數據格式:mysql

    Exporter的返回的是文本內容,其中以行爲單位,空行將被忽略, 文本內容最後一行爲空行;linux

    文本內容以「# HELP」開頭的行爲註釋,表示幫助信息,以「# TYPE」開頭的行表示此Metric的類型;git

    exporter有四種數據類型,分別爲:counter/gauge/histogram/summary。github

  2. Exporter每一行文本的格式sql

    1. 在每一行文本的最後不能有空格,不然會不識別flask

    2. 在每一Metric行表明一個Key、Value對,Value的值是float類型,若是有兩個Value值,最後框架

      一個會被認爲是時間戳進行保存,好比:ide

        http_requests_total{method="post",code="200"} 1027 1395066363000

    3. Metrics的Label的value值必需要用雙引號「」引發來

  3. Exporter的Content-Type必須是text類型:

    1. 這裏我flask返回頁面的Content-Type設置爲:text/plain

wKioL1nOacaAjHXsAADhjtwMq_o354.png

    4. Prometheus有本身的python的client:

   項目地址以下:

https://github.com/prometheus/client_python

  若是不想重複造輪子,能夠選擇用官網提供的lient端。

  5. Exporter接口的響應時間

     默認Prometheus是每隔15秒抓取一次數據,每次的timeout超時時間是10s,這個也能夠在配置文件裏自定義。要注意Exporter的接口響應時間必定要比server配置裏的小。

相關文章
相關標籤/搜索