Një sërë kodesh dhe aplikacioni juaj gjeneron metrika, wow!
Për të kuptuar si funksionon prometheus_flask_exporter mjafton një shembull minimal:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('\/')
def main():
return 'OK'Kjo është e gjitha çfarë ju nevojitet për të filluar! Duke shtuar importin dhe një rresht për inicializimin e PrometheusMetrics, do të merrni metrikat e kohëzgjatjeve të kërkesave dhe numëruesve të kërkesave, të shfaqura në pikën fundore /metrics të aplikacionit Flask, ku është regjistruar, si dhe të gjitha metrikat e paracaktuar që merrni nga biblioteka .
Mund të gjeni në depoznitë GitHub, që aktivizon një instancë dhe bashkë me një aplikacion demonstrues për të gjeneruar metrika që do të duken diçka si kjo:

Gjithashtu do të gjeni një listë të treguesve në shembujt, që shfaqen në panelin e kontrollit, së bashku me kërkesat Prometheus që mbushin panelet.
Configuration
Biblioteka ka shumë opsione konfigurimi, shikoni në projektin për shembujt e tyre me një shpjegim të shkurtër.
Konfigurimi bazë është i shfaqur në krye. Thjesht krijoni një instancë PrometheusMetrics, le të e quajmë metricat, dhe pastaj me ndihmën e saj përcaktoni metrikat shtesë që dëshironi të mbledhni, duke dekoruar funksionet:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Numëruesit llogarisin thirrjet, ndërsa të tjerat mbledhin metrika në varësi të kohëzgjatjeve të këtyre thirrjeve. Mund të përcaktoni etiketat për secilën prej tyre, duke potencuar përdorimin e pronave të kërkesave ose përgjigjeve. Për shembull:
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
# gruponi sipas pikës fundore në vend të rrugës
metrics = PrometheusMetrics(app, group_by='endpoint')
@app.route('\/collection\/:collection_id\/item\/:item_id')
@metrics.counter(
'cnt_collection', 'Numri i thirrjeve për çdo koleksion', labels={
'collection': lambda: request.view_args['collection_id'],
'status': lambda resp: resp.status_code
})
def get_item_from_collection(collection_id, item_id):
passNë shembullin e mësipërm, shtypja në pikën fundore /collection/10002/item/76 do të çojë në rritjen e numëruesit, për shembull cnt_collection{collection = «10002», status = «200»}, plus do të merrni metrikat e paracaktuara (për çdo pikë fundore në këtë shembull) nga biblioteka e paracaktuar:
flask_http_request_duration_seconds â Koha e kĂ«rkesĂ«s HTTP nĂ« sekonda pĂ«r tĂ« gjitha kĂ«rkesat Flask sipas metodĂ«s, rrugĂ«s dhe statusitflask_http_request_total â Numri total i kĂ«rkesave HTTP sipas metodave dhe statusit
Ka janë mundësi për të anashkaluar ndjekjen e pikave të caktuara të përfundimit, për të regjistruar metrika shtesë si parazgjedhje ose për të anashkaluar ato që janë përmendur më sipër, ose për të aplikuar të njëjtën metrikë të personalizuar në disa pika përfundimi. Shihni projekti për të parë se çfarë është në dispozicion.
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('\/')
def main():
pass # kërkesat e gjurmuara si parazgjedhje
@app.route('\/skip')
@metrics.do_not_track()
def skip():
pass # metrikat parazgjedhëse nuk janë mbledhur
# metrikë e personalizuar për t'u aplikuar në disa pika përfundimi
common_counter = metrics.counter(
'by_endpoint_counter', 'Numri i kërkesave nga pikat e përfundimit',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('\/common\/one')
@common_counter
def endpoint_one():
pass # gjurmuar nga metrika e personalizuar dhe e parazgjedhur
@app.route('\/common\/two')
@common_counter
def endpoint_two():
pass # gjithashtu gjurmuar nga metrika e personalizuar dhe e parazgjedhur
# regjistroni metrika shtesë parazgjedhëse
metrics.register_default(
metrics.counter(
'by_path_counter', 'Numri i kërkesave sipas rrugëve të kërkesës',
labels={'path': lambda: request.path}
)
)Biblioteka ka zgjerime të dobishme për bibliotekat e njohura me shumë procese, si uWSGI dhe Gunicorn. Ju gjithashtu mund të gjeni shembuj të vegjël të përdorimeve të synuara, përfshirë ato me shumë procese.
Mbledhja e metrikave
Siç është përmendur më sipër, biblioteka ofron një pikë përfundimi /metrics në aplikacionin Flask, që mund të shërbejë si një qëllim për .
Në shembullin e mësipërm me panelin e kontrollit, mund të synoni Prometheusin tuaj në aplikacionin Flask me konfigurimet e parazgjedhura me një konfigurim të tillë:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sShihni një shembull të plotë në . Kjo supozon se Prometheusi mund të gjejë instancat tuaja të aplikacionit Flask në http://app:5000/metrics, ku emri i domenit të aplikacionit mund të zgjidhet potencialisht në disa adresa IP, për shembull, kur punoni në ose .
Nëse ky zbulim i pikës përfundimi të metrikave nuk ju përshtatet, ndoshta sepse dëshironi të parandaloni qasjen e jashtme në të, mund ta çaktivizoni lehtësisht duke kaluar path=None kur krijoni një instancë 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)Pastaj mund të përdorni start_http_server(port), për të hapur këtë pikë përfundimi në një port tjetër HTTP, 5099 në shembullin e mësipërm. Si alternativë, nëse ju përshtatet që pika përfundimi ndodhet në të njëjtin aplikacion Flask, por ju nevojitet të ndryshoni rrugën e saj nga /metrics, mund të kaloni një URI tjetër si parametrin e rrugës, ose përdorni register_endpoint(..), për të vendosur këtë më vonë.
Linket
 â Ky eksportues flask Ă«shtĂ« pĂ«r Prometheus
 â PĂ«rdorimi, shembuj dhe parametrat e konfigurimit
 â Shembuj tĂ« konfigurimit tĂ« monitorimit tĂ« aplikacioneve Flask nĂ« mĂ«nyra tĂ« ndryshme
 â Ky projekt nĂ« PyPI
 â Biblioteka zyrtare e klientit pĂ«r Prometheus pĂ«r Python
Nëse vendosni ta provoni, mos hezitoni të hapni një çështje në GitHub ose të lini komentet, vlerësimet dhe sugjerimet tuaja!
Faleminderit!
Burimi: habr.com
