Imigqa embalwa yekhodi kanye nohlelo lwakho lokusebenza lukhiqiza amamethrikhi, wow!
Ukuze uqonde ukuthi i-prometheus_ isebenza kanjanii-flask_othumela ngaphandle isibonelo esincane sanele:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
Yilokho kuphela okudingayo ukuze uqalise! Ngokungeza ukungenisa kanye nomugqa wokuqalisa I-PrometheusMetrics, uzothola amamethrikhi ubude besicelo ΠΈ izicelo zokubala, kuboniswe ekugcineni /amamethrikhi uhlelo lokusebenza lwe-Flask ebhaliswe ngalo, kanye nawo wonke amamethrikhi azenzakalelayo owathola kusisekelo
ungathola
Uzothola nohlu lwezinkomba ku
Yenza ngokwezifiso
Ziningi izinketho zokumisa emtapweni wolwazi, bheka
Ukucushwa okuyisisekelo kukhonjisiwe ngenhla. Vele udale isibonelo I-PrometheusMetrics,asiyibize amamethrikhi, bese uyisebenzisela ukuchaza amamethrikhi engeziwe ofuna ukuwaqoqa ngokuhlobisa imisebenzi:
-
@metrics.counter(..)
-
@metrics.gauge(..)
-
@metrics.summary(..)
-
@metrics.histogram(..)
Izibali zibala amakholi, kanti ezinye ziqoqa amamethrikhi asuselwe kubude besikhathi salezo zingcingo. Ungachaza amalebula ngakunye kwalokhu, okungenzeka usebenzise izici zokucela noma zokuphendula. Ngokwesibonelo:
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
Esibonelweni esingenhla, ngokuchofoza iphuzu lokugcina /iqoqo/10002/item/76 izobangela ukuba ikhawunta ikhule, isibonelo cnt_collection{collection = "10002", status = "200"}, futhi uzothola amamethrikhi azenzakalelayo (ephoyinti lesiphetho ngalinye kulesi sibonelo) kusuka kulabhulali ezenzakalelayo:
-
flask_http_request_duration_seconds
- Ubude besicelo se-HTTP ngemizuzwana yazo zonke izicelo ze-Flask ngendlela, indlela kanye nesimo -
flask_http_request_total
- Isamba senani lezicelo ze-HTTP ngezindlela nezimo
Kunezinketho zokweqa ukulandelelwa kwamaphoyinti athile okugcina, ungene kumamethrikhi azenzakalelayo engeziwe noma weqe lawo asohlwini olungenhla, noma usebenzise imethrikhi yangokwezifiso efanayo kumaphoyinti okugcina amaningi. Hlola
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}
)
)
Umtapo wolwazi unezandiso ezilula zemitapo yolwazi esebenza kaningi efana ne-uWSGI ne-Gunicorn. Ungathola futhi izibonelo ezincane zezimo zokusetshenziswa eziqondisiwe, okuhlanganisa ukucutshungulwa okuningi.
Iqoqo lamamethrikhi
Njengoba kushiwo ngenhla, umtapo wolwazi uhlinzeka ngesiphetho ngokuzenzakalelayo /amamethrikhi kuhlelo lokusebenza lwe-Flask, olungasebenza njengendawo okuhloswe ngayo
Esibonelweni sedeshibhodi esingenhla, ungakhomba i-Prometheus yakho kuhlelo lokusebenza lwe-Flask enezilungiselelo ezizenzakalelayo ngalokhu kulungiselelwa:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5s
Bona isibonelo esigcwele kokuthi
Uma ukuveza indawo yokugcina yamamethrikhi ngale ndlela kungakufanelanga, mhlawumbe ngenxa yokuthi awufuni ukuvumela ukufinyelela kwangaphandle kukho, ungakwazi ukukukhubaza kalula ngokudlula. indlela=Akukho lapho udala isibonelo I-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)
Khona ungasebenzisa qala_http_iseva(imbobo)ukuze uvule lesi siphetho endaweni ehlukile ye-HTTP, 5099 kulesi sibonelo esingenhla. Ngaphandle kwalokho, uma ujabulile ngokuthi isiphetho sisohlelweni olufanayo lwe-Flask, kodwa udinga ukushintsha indlela yakho ukusuka ku- /amamethrikhi, ungadlula enye i-URI njengepharamitha yendlela, noma usebenzise rejista_iphoyinti lokugcina(..)ukuyifaka kamuva.
izithenjwa
-
rycus86/prometheus_flask_exporter - Lo mthumeli webhodlela we-Prometheus -
i-prometheus-flask-exporter README - Ukusetshenziswa, izibonelo nezinketho zokumisa -
izibonelo ze-prometheus-flask-exporter - Izibonelo zokusetha ukugadwa kwe-Flask application ngezindlela ezahlukene -
i-prometheus-flask-exporter ku-PyPI β Le phrojekthi iku-PyPI -
prometheus/client_python - Umtapo wezincwadi osemthethweni weklayenti le-Prometheus wePython
Uma unquma ukuyizama, zizwe ukhululekile ukuvula udaba ku-GitHub noma ushiye imibono, impendulo, neziphakamiso zakho!
Siyabonga!
Source: www.habr.com