要使用python編寫Prometheus監控,需要你先開啟Prometheus集群。可以參考//www.jb51.net/article/148895.htm 安裝。在python中實現服務器端。在Prometheus中配置請求網址,Prometheus會定期向該網址發起申請獲取你想要返回的數據。
使用Python和Flask編寫Prometheus監控
Installation
pip install flaskpip install prometheus_client
Metrics
Prometheus提供4種類型Metrics:Counter
, Gauge
, Summary
和Histogram
Counter
Counter可以增長,并且在程序重啟的時候會被重設為0,常被用于任務個數,總處理時間,錯誤個數等只增不減的指標。
import prometheus_clientfrom prometheus_client import Counterfrom prometheus_client.core import CollectorRegistryfrom flask import Response, Flaskapp = Flask(__name__)requests_total = Counter("request_count", "Total request cout of the host")@app.route("/metrics")def requests_count(): requests_total.inc() # requests_total.inc(2) return Response(prometheus_client.generate_latest(requests_total), mimetype="text/plain")@app.route('/')def index(): requests_total.inc() return "Hello World"if __name__ == "__main__": app.run(host="0.0.0.0")
運行該腳本,訪問youhost:5000/metrics
# HELP request_count Total request cout of the host# TYPE request_count counterrequest_count 3.0
Gauge
Gauge與Counter類似,唯一不同的是Gauge數值可以減少,常被用于溫度、利用率等指標。
import randomimport prometheus_clientfrom prometheus_client import Gaugefrom flask import Response, Flaskapp = Flask(__name__)random_value = Gauge("random_value", "Random value of the request")@app.route("/metrics")def r_value(): random_value.set(random.randint(0, 10)) return Response(prometheus_client.generate_latest(random_value), mimetype="text/plain")if __name__ == "__main__": app.run(host="0.0.0.0")
運行該腳本,訪問youhost:5000/metrics
# HELP random_value Random value of the request# TYPE random_value gaugerandom_value 3.0
Summary/Histogram
Summary/Histogram概念比較復雜,一般exporter很難用到,暫且不說。
LABELS
使用labels來區分metric的特征
from prometheus_client import Counterc = Counter('requests_total', 'HTTP requests total', ['method', 'clientip'])c.labels('get', '127.0.0.1').inc()c.labels('post', '192.168.0.1').inc(3)c.labels(method="get", clientip="192.168.0.1").inc()
使用Python和asyncio編寫Prometheus監控
from prometheus_client import Counter, Gaugefrom prometheus_client.core import CollectorRegistryREGISTRY = CollectorRegistry(auto_describe=False)requests_total = Counter("request_count", "Total request cout of the host", registry=REGISTRY)random_value = Gauge("random_value", "Random value of the request", registry=REGISTRY)
新聞熱點
疑難解答