Prometheus 數據監控 on Python Client (一)


Prometheus 數據監控 for Python Client  (一)

Prometheus 是一個開源的時序數據庫,網上主要的應用方向都是用於服務器和容器等生產信息監控。

Prometheus對於Python有官方的庫支持,地址https://github.com/prometheus/client_python#instrumenting

以下根據一些網上資料整理一些筆記:

  • 首先數據模型:

<metric name>{<label name>=<label value>, ...} value

metric可以類比為sql中的表,label可以類比為sql中的鍵,最后的value為表中的值、

Prometheus中的metric,label,value要符合規范,詳見Metric and Label Naming

  • Prometheus在Python-client下使用Gauge這個數據類型示例:
from prometheus_client import Gauge 

g = Gauge('my_inprogress_requests', 'Description of gauge') 

g.set(value) #value自己定義,但是一定要為 整數或者浮點數

如果需要定義一些label,則

from prometheus_client import Gauge 
g = Gauge('my_inprogress_requests', 'Description of gauge',['mylabelname'])
'''第一個參數是Metric Name,第二個參數是對該值的描述,第三個參數是list()形式的labelname'''
g.labels(mylabelname='str').set(value) #value自己定義,但是一定要為 整數或者浮點數
#'str'是labelname 的 lebel value
#此時一定要注意,定義Gague標簽的時候是一個列表,列表可以存多個lablename,類型是字符串
#在給lable定義value的時候也要注意,mylablename 這里是一個方法,或者說是一個變量了,一定要注意.
 
        

啟動一個http

from prometheus_client import Gauge,start_http_server 
from prometheus_client import Gauge 
a = Gauge('a', 'Description of gauge') 
a.set(345) #value自己定義,但是一定要為 整數或者浮點數 
g = Gauge('g', 'Description of gauge',['mylabelname']) 
g.labels(mylabelname='jastme').set(123) #value自己定義,但是一定要為 整數或者浮點數 
#此時一定要注意,定義Gague標簽的時候是一個列表,列表可以存多個lablename,類型是字符串 
#在給lable定義value的時候也要注意,mylablename 這里是一個方法,或者說是一個變量了,一定要注意. 
start_http_server(8000) 

這樣就可以通過http訪問到數據,這是個靜態頁面。如果需要做一個動態頁面,則

from prometheus_client import Gauge,start_http_server 
import random 
from prometheus_client import Gauge 
a = Gauge('a', 'Description of gauge') 
a.set(random.random()) #value自己定義,但是一定要為 整數或者浮點數 
g = Gauge('g', 'Description of gauge',['mylabelname']) 
#此時一定要注意,定義Gague標簽的時候是一個列表,列表可以存多個lablename,類型是字符串 
#在給lable定義value的時候也要注意,mylablename 這里是一個方法,或者說是一個變量了,一定要注意. 
start_http_server(8000) 
while True: 
g.labels(mylabelname='jastme').set(random.random()) 

這樣g的值就是隨機的,而a的值一直是固定的。

  • 關於內存

使用作監控的時候,內存是吃得很快的。但是在api數量很少的時候,如果老是出現內存嚴重不足的狀態, 那很可能是用法有問題。

它們的數據格式,(從調用者的角度看)都是類似(省去了時間戳):

job name(label1=value1, label2=value2, label3=value3) = value

在influxdb里job name應該是指db name, label是tag。注意了, label的不同值不要太多!比如label1對應的value1的不同的值,不能太多,否則查詢非常非常吃內存。如

api_count(method=POST, userID=1) = 100

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM