Dažas koda rindas un jÅ«su lietotne Ä£enerÄ metrikas, wow!
Lai saprastu, kÄ darbojas prometheus_flask_ekspress ieraksta pietiek ar minimÄlu piemÄru:
no flask import Flask
no prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route(' / ')
def main():
return 'OK'Tas ir viss, kas nepiecieÅ”ams, lai sÄktu! Pievienojot importu un inicializÄcijas rindu PrometheusMetrics, jÅ«s saÅemsiet metrikas pieprasÄ«jumu ilguma un pieprasÄ«jumu skaitÄ«tÄjus, kas tiek parÄdÄ«ti Flask lietojumprogrammas galapunktÄ, kurÄ tas ir reÄ£istrÄts, kÄ arÄ« visas noklusÄjuma metrikas, kuras jÅ«s saÅemat no pamata /metrics Prometheus klienta bibliotÄkas .
vieglu lietojamu piemÄru kopÄ ar demonstrÄcijas lietojumprogrammu metrikas Ä£enerÄÅ”anai, kas izskatÄ«sies aptuveni tÄ: un JÅ«s arÄ« atradÄ«siet rÄdÄ«tÄju sarakstu

piemÄrÄ, kas tiek rÄdÄ«ts vadÄ«bÄ, kopÄ ar Prometheus vaicÄjumiem, kas aizpilda paneļus. BibliotÄkÄ ir daudz konfigurÄcijas opciju, skatiet
Iestatījumi
projekta piemÄrus ar Ä«su skaidrojumu. PamatkonfigurÄcija ir parÄdÄ«ta augÅ”pusÄ. VienkÄrÅ”i izveidojiet instanci
, nosauksim to par PrometheusMetricsmetrics , un tad ar tÄs palÄ«dzÄ«bu definÄjiet papildu metrikas, kuras vÄlaties vÄcÄt, dekoriÄjot funkcijas:@metrics.counter(..)
@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)SkaitÄ«tÄji skaita izsaukumus, bet pÄrÄjie vÄc metrikas atkarÄ«bÄ no Å”o izsaukumu ilguma. JÅ«s varat definÄt atzÄ«mes katram no tiem, potenciÄli izmantojot pieprasÄ«juma vai atbildes Ä«paŔības. PiemÄram:
no flask import Flask, request no prometheus_flask_exporter import PrometheusMetricsapp = Flask(__name__)# grupÄt pÄc galapunkta, nevis ceļa metrics = PrometheusMetrics(app, group_by='endpoint')@app.route(' / collection / :collection_id / item / :item_id') @metrics.counter( 'cnt_collection', 'Izsaukumu skaits katrai kolekcijai', etiketÄm={ 'collection': lambda: request.view_args['collection_id'], 'status': lambda resp: resp.status_code }) def get_item_from_collection(collection_id, item_id): pass
IepriekÅ” minÄtajÄ piemÄrÄ nospiežot uz galapunktapalielinÄs skaitÄ«tÄjs, piemÄram /collection/10002/item/76 cnt_collection{collection = Ā«10002Ā», status = Ā«200Ā»} , kÄ arÄ« jÅ«s saÅemsiet noklusÄjuma metrikas (katrai galapunktam Å”ajÄ piemÄrÄ) no noklusÄjuma bibliotÄkas:flask_http_request_duration_seconds
ā HTTP pieprasÄ«juma ilgums sekundÄs visiem Flask pieprasÄ«jumiem pÄc metodes, ceļa un statusaĀ flask_http_request_totalā KopÄjais HTTP pieprasÄ«jumu skaits pÄc metodÄm un statusiemĀ ā KopÄjais HTTP pieprasÄ«jumu skaits pÄc metodÄm un statusiem
Ir iespÄjas izlaist noteiktu punktu izsekoÅ”anu, reÄ£istrÄt papildu noklusÄjuma metrikas vai izlaist iepriekÅ” minÄtÄs, vai piemÄrot to paÅ”u pielÄgoto metriku vairÄkiem punktiem. IepazÄ«stieties ar projekta, lai uzzinÄtu, kas ir pieejams.
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}
)
)BibliotÄkÄ ir Ärti paplaÅ”inÄjumi populÄrÄm daudzprocesoru bibliotÄkÄm, piemÄram, uWSGI un Gunicorn. JÅ«s arÄ« varat atrast nelielus piemÄrus mÄrÄ·a izmantoÅ”anas gadÄ«jumiem, tostarp daudzprocesoriem.
Metriku vÄkÅ”ana
KÄ minÄts iepriekÅ”, bibliotÄka pÄc noklusÄjuma nodroÅ”ina beigu punktu /metrics Flask lietotnÄ, kas var kalpot par mÄrÄ·i .
IepriekÅ” minÄtajÄ paneļa piemÄrÄ varat norÄdÄ«t savu Prometheus uz Flask lietotni ar noklusÄjuma iestatÄ«jumiem ar Å”Ädu konfigurÄciju:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sSkatiet pilnu piemÄru . Tas pieÅem, ka Prometheus var atrast jÅ«su Flask lietotnes instancÄm uz http://app:5000/metrics, kur programmas domÄna nosaukums var potenciÄli atrisinÄties uz vairÄkiem IP adresÄm, piemÄram, darbojoties vai .
Ja Å”Äda metriku gala punkta atklÄÅ”ana jums nepiestÄv, iespÄjams, jo nevÄlaties atļaut piekļuvi tam no Ärpuses, jÅ«s varat viegli to atslÄgt, nododot path=None veidojot instanci 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)Tad jÅ«s varat izmantot start_http_server(port), lai atvÄrtu Å”o beigu punktu citÄ HTTP portÄ, 5099 iepriekÅ” minÄtajÄ piemÄrÄ. AlternatÄ«vi, ja jums ir labi, ka beigu punkts atrodas tajÄ paÅ”Ä Flask lietotnÄ, bet jums jÄmaina tÄ ceļŔ no /metrics, jÅ«s varat vai nu nodot citu URI kÄ ceļa parametru, vai izmantot register_endpoint(..), lai to izveidotu vÄlÄk.
Saites
Ā ā Å is ir Prometheus Flask eksportÄtÄjs
Ā ā IzmantoÅ”ana, piemÄri un konfigurÄcijas opcijas
Ā ā Flask lietojumprogrammu uzraudzÄ«bas iestatīŔanas piemÄri dažÄdos veidos
Ā ā Å is projekts ir pieejams PyPI
Ā ā OficiÄlÄ Prometheus klienta bibliotÄka Python valodÄ
Ja nolemsiet izmÄÄ£inÄt, nevilcinieties atvÄrt jautÄjumu GitHub vai atstÄt savus komentÄrus, atsauksmes un ieteikumus!
Paldies!
Avots: habr.com
