只需幾行程式碼,您的應用程式就會產生指標,哇!
為了理解 prometheus_ 是如何運作的燒瓶_出口商一個最小的例子就夠了:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
這就是您開始所需的全部內容! 透過新增導入和初始化行 PrometheusMetrics,你會得到指標 請求持續時間 и 請求計數器,顯示在端點處 /指標 它註冊的 Flask 應用程序,以及您從基礎獲取的所有預設指標
你可以找到
您也可以在以下位置找到指標清單:
調整
庫中有很多配置選項,看一下
基本配置如上所示。 只需建立一個實例 PrometheusMetrics,我們稱之為 度量,然後使用它透過裝飾函數來定義您想要收集的其他指標:
-
@metrics.counter(..)
-
@metrics.gauge(..)
-
@metrics.summary(..)
-
@metrics.histogram(..)
計數器對呼叫進行計數,其他計數器則根據這些呼叫的持續時間收集指標。 您可以為每個標籤定義標籤,可能使用請求或回應屬性。 例如:
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
# group by endpoint rather than path
metrics = PrometheusMetrics(app, group_by='endpoint')
@app.route('/collection/:collection_id/item/:item_id')
@metrics.counter(
'cnt_collection', 'Number of invocations per collection', labels={
'collection': lambda: request.view_args['collection_id'],
'status': lambda resp: resp.status_code
})
def get_item_from_collection(collection_id, item_id):
pass
在上面的範例中,按一下端點 /集合/10002/項目/76 會導致計數器增加,例如 cnt_collection{集合=“10002”,狀態=“200”},此外,您還將從預設庫中取得預設指標(對於本例中的每個端點):
-
flask_http_request_duration_seconds
— 依方法、路徑和狀態列出的所有 Flask 請求的 HTTP 請求持續時間(以秒為單位) -
flask_http_request_total
— 按方法和狀態劃分的 HTTP 請求總數
有一些選項可以跳過對特定端點的追蹤、記錄其他預設指標或跳過上面列出的指標,或將相同的自訂指標應用於多個端點。 查看
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
pass # requests tracked by default
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # default metrics are not collected
# custom metric to be applied to multiple endpoints
common_counter = metrics.counter(
'by_endpoint_counter', 'Request count by endpoints',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('/common/one')
@common_counter
def endpoint_one():
pass # tracked by the custom and the default metrics
@app.route('/common/two')
@common_counter
def endpoint_two():
pass # also tracked by the custom and the default metrics
# register additional default metrics
metrics.register_default(
metrics.counter(
'by_path_counter', 'Request count by request paths',
labels={'path': lambda: request.path}
)
)
該程式庫對流行的多處理庫(例如 uWSGI 和 Gunicorn)進行了方便的擴展。 您還可以找到目標用例的小範例,包括多重處理。
指標收集
如上所述,該庫預設提供一個端點 /指標 在 Flask 應用程式中,它可以作為
在上面的儀表板範例中,您可以使用以下配置將 Prometheus 定位到具有預設設定的 Flask 應用程式:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5s
完整範例請參見
如果以這種方式公開指標端點不適合您,也許是因為您不想允許外部存取它,您可以透過傳遞輕鬆停用它 路徑=無 建立實例時 PrometheusMetrics.
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app, path=None)
...
metrics.start_http_server(5099)
然後你可以使用 start_http_server(連接埠)若要在不同的 HTTP 連接埠上開啟此端點, 5099 在上面的例子中。 或者,如果您對同一 Flask 應用程式中的端點感到滿意,但需要將其路徑從 /指標,您可以傳遞另一個 URI 作為路徑參數,或使用 註冊端點(..)以便稍後安裝。
引用
-
rycus86/prometheus_flask_exporter — 普羅米修斯的這個瓶子出口商 -
普羅米修斯燒瓶出口商自述文件 — 用法、範例和設定選項 -
prometheus-flask-exporter 範例 — 以不同方式設定 Flask 應用程式監控的範例 -
PyPI 上的 prometheus-flask-exporter — 該項目位於 PyPI 上 -
普羅米修斯/client_python — Python 官方 Prometheus 用戶端函式庫
如果您決定嘗試一下,請隨時在 GitHub 上提出問題或留下您的評論、回饋和建議!
謝謝!
來源: www.habr.com