Pár kód sor, és az alkalmazásod generálja a metrikákat, wow!
Ahhoz, hogy megértsd, hogyan működik a prometheus_flask_exporter, elegendő egy minimális példa:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('⁄')
def main():
return 'OK'Ez minden, amire szükséged van a kezdéshez! Az importálás és a inicializáló sor hozzáadásával PrometheusMetrics, megkapod a metrikákat a kérések időtartamáról és a kérések számlálói, amelyek megjelennek a végpontban /metrics a Flask alkalmazásban, amelyben regisztrálva van, és az összes alapértelmezett metrikát, amelyet a .
Egyszerűen használható példát találhatsz egy demóalkalmazással, amely metrikákat generál, amelyek körülbelül így néznek ki: és Ezenkívül megtalálod a metrikák listáját a

példában, amelyek a vezérlőpulton jelennek meg, együtt a Prometheus kérdéseivel, amelyek kitöltik a paneleket. A könyvtárban számos konfigurációs lehetőség található, nézd át a
Beállítás
projekt példáikat egy rövid magyarázattal. Az alap konfiguráció a felső részen látható. Csak hozz létre egy példányt
, nevezzük el PrometheusMetrics, majd ezzel határozd meg azokat a további metrikákat, amelyeket gyűjteni szeretnél, dekorálva a függvényeket: metrikák@metrics.counter(..)
@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)A számlálók a hívásokat számolják, míg a többiek a hívások időtartama alapján gyűjtik a metrikákat. Metrikákat definiálhatsz minden egyeshez, potenciálisan használva a kérés vagy válasz jellemzőit. Például:
from flask import Flask, request from prometheus_flask_exporter import PrometheusMetricsapp = Flask(__name__)# csoportosítás végpont szerint, nem pedig útvonal szerint metrics = PrometheusMetrics(app, group_by='endpoint')@app.route('⁄collection⁄:collection_id⁄item⁄:item_id') @metrics.counter( 'cnt_collection', 'Hívások száma gyűjteményenként', labels={ 'collection': lambda: request.view_args['collection_id'], 'status': lambda resp: resp.status_code }) def get_item_from_collection(collection_id, item_id): pass
A fenti példa alapján, amikor a végpontra kattintasz,növeli a számlálót, például /collection/10002/item/76 cnt_collection{collection = «10002», status = «200»} , és kapsz alapértelmezett metrikákat (minden végpontra az példában) az alap könyvtárból:flask_http_request_duration_seconds
— A Flask összes kérésének HTTP-kérelmeinek időtartama másodpercben módszer, útvonal és státusz szerintflask_http_request_total— A HTTP-kérések összes száma módszerek és státuszok szerint— Az összes HTTP-kérés száma módszereken és státuszokon szerint
Lehetőségek vannak arra, hogy kihagyjuk bizonyos végpontok nyomkövetését, regisztráljunk további alapértelmezett metrikákat, kihagyjuk azokat, amelyek fent említve vannak, vagy ugyanazt a testreszabott metrikát alkalmazzuk több végpontra. Ismerkedjen meg a projekttel, hogy megtudja, mi áll rendelkezésre.
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
pass # kérések alapértelmezés szerint nyomon követve
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # az alapértelmezett metrikák nem kerülnek gyűjtésre
# testreszabott metrika, amely több végponthoz is alkalmazható
common_counter = metrics.counter(
'by_endpoint_counter', 'Kérések száma végpontok szerint',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('/common/one')
@common_counter
def endpoint_one():
pass # nyomon követve a testreszabott és az alapértelmezett metrikák szerint
@app.route('/common/two')
@common_counter
def endpoint_two():
pass # szintén nyomon követve a testreszabott és az alapértelmezett metrikák szerint
# további alapértelmezett metrikák regisztrálása
metrics.register_default(
metrics.counter(
'by_path_counter', 'Kérések száma a kérés útvonalai szerint',
labels={'path': lambda: request.path}
)
)A könyvtár kényelmes kiterjesztéseket kínál népszerű többprocesszoros könyvtárakhoz, mint például uWSGI és Gunicorn. Kis példákat is találhat a célzott használati lehetőségekről, beleértve a többprocesszoros használatokat is.
Metrikák gyűjtése
Ahogy fent említettem, a könyvtár alapértelmezés szerint biztosít egy végpontot /metrics a Flask alkalmazásban, amely célként szolgálhat a .
A fent említett irányítópult példájában a Prometheus-t az alapértelmezett beállításokkal célozhatja meg a következő konfigurációval:
scrape_configs:
- job_name: 'példa'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sTeljes példát tekinthet meg a . Ez azt feltételezi, hogy a Prometheus képes megtalálni a Flask alkalmazás példányait a http://app:5000/metrics, ahol az alkalmazás domain neve potenciálisan több IP-címre is feloldható, például, amikor vagy .
Ha nem megfelelő a metrikák végpontjának nyilvánossá tétele, mert nem szeretné, hogy külső hozzáférést engedélyezzen, könnyen letilthatja, ha megadja path=None az példány létrehozásakor 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)Ezután használhatja start_http_server(port), hogy megnyissa ezt a végpontot egy másik HTTP-porton, 5099 a fent említett példában. Alternatívaként, ha elfogadja, hogy a végpont ugyanabban a Flask alkalmazásban van, de meg kell változtatnia az útvonalát /metrics, átadhat egy másik URI-t az útparaméterként, vagy használhatja register_endpoint(..), hogy ezt később állítsa be.
Hivatkozások
— Ez a Prometheus flask exporter
— Használat, példák és konfigurációs paraméterek
— Példák Flask alkalmazások monitorozására különböző módokon
— Ez a projekt a PyPI-n található
— A Prometheus hivatalos kliens könyvtára Pythonhoz
Ha úgy dönt, hogy kipróbálja, ne habozzon, nyisson egy issue-t a GitHubon, vagy hagyjon visszajelzést és javaslatokat!
Köszönöm!
Forrás: habr.com
