Çend rêzikên kodê û serîlêdana we metrîkan çêdike, wow!
Ji bo ku hûn fêm bikin ka prometheus_ çawa dixebiteflask_hinardekar mînakek hindik bes e:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'Ji bo ku hûn dest pê bikin her tiştê ku hûn hewce ne ev e! Bi lêzêdekirina import û rêzek ji bo destpêkirinê PrometheusMetrics, hûn ê metrîkan bistînin dema daxwazê и daxwaza counters, di dawiya dawî de tê nîşandan / metrics serîlêdana Flask ku pê re hatî qeyd kirin, û hem jî hemî metrîkên xwerû yên ku hûn ji bingehê digirin .
hûn dikarin bibînin di depoya GitHub de ku nimûneyê dimeşîne и digel serîlêdanek demo-yê ku metrîkên ku dê mîna vî xuya bikin çêbikin:

Her weha hûn ê navnîşek nîşanan jî tê de bibînin mînakên ku di dashboardê de xuya dibin, digel pirsên Prometheus ên ku tabloyan dagir dikin.
ligorî
Di pirtûkxaneyê de gelek vebijarkên veavakirinê hene, lê binêrin mînakên projeyên wan bi ravekirineke kurt.
Veavakirina bingehîn li jor tê nîşandan. Tenê mînakek çêbikin PrometheusMetrics, em jê re bêjin metrîk, û dûv re wê bikar bînin da ku pîvanên din ên ku hûn dixwazin bi xemilandina fonksiyonan berhev bikin destnîşan bikin:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Berhevkar bangan dihejmêrin, û yên din li gorî dirêjahiya wan bangan metrîkan berhev dikin. Hûn dikarin ji bo her yek ji van etîketan diyar bikin, bi potansiyel taybetmendiyên daxwaz an bersivê bikar bînin. Bo nimûne:
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):
passDi mînaka jorîn de, li ser xala dawîn bikirtînin /collection/10002/item/76 Mînakî, dê bibe sedem ku hejmar zêde bibe cnt_collection{collection = "10002", status = "200"}, plus hûn ê pîvanên xwerû (ji bo her xala dawiya vê nimûneyê) ji pirtûkxaneya xwerû bistînin:
flask_http_request_duration_seconds- Ji bo hemî daxwazên Flask-ê ji hêla rêbaz, rê û statûyê ve dirêjahiya daxwaza HTTP di çirkeyan deflask_http_request_total- Hejmara tevahî daxwazên HTTP ji hêla rêbaz û rewşan ve
Vebijark hene ku meriv şopandina xalên dawî yên taybetî biavêje, metrîkên xwerû yên din tomar bike an yên ku li jor hatine destnîşan kirin berbide, an jî heman metrîka xwerû li gelek xalên dawiyê bicîh bîne. Lêkolîn proje ku bibînin ka çi heye.
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}
)
)Pirtûkxane ji bo pirtûkxaneyên pirpêvajoya populer ên wekî uWSGI û Gunicorn pêvekên hêsan hene. Her weha hûn dikarin mînakên piçûk ên dozên karanîna armanckirî jî bibînin, di nav de pirpêvekirin.
Komkirina metrîkan
Wekî ku li jor behs kir, pirtûkxane ji hêla xwerû ve xalek dawî peyda dike / metrics di serîlêdana Flask de, ku dikare wekî armancek ji bo xizmetê bike .
Di mînaka dashboardê ya li jor de, hûn dikarin Prometheusê xwe bi vê veavakirinê ve bi serîlêdanek Flask-ê bi mîhengên xwerû armanc bikin:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sMînaka tevahî li binêre . Ev texmîn dike ku Prometheus dikare mînakên serîlêdana Flask-a we li ser bibîne http://app:5000/metrics, cihê ku navê domaina serîlêdanê bi potansiyel dikare çend navnîşanên IP-ê çareser bike, mînakî dema ku tê de xebitî an .
Ger eşkerekirina xala dawiya metrîkan bi vî rengî ne li gorî we ye, dibe ku ji ber ku hûn nexwazin destûr bidin gihîştina derveyî wê, hûn dikarin bi derbaskirina wê re bi hêsanî neçalak bikin. rê = Tune dema afirandina mînakek 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)Hingê hûn dikarin bikar bînin start_http_server (port)ji bo vekirina vê xala dawiyê li ser portek HTTP-ya cûda, 5099 di mînaka jorîn de. Wekî din, heke hûn ji xala dawîn a ku di heman serîlêdana Flask de ye kêfxweş in, lê hûn hewce ne ku riya wê ji / metrics, hûn dikarin URI-ya din wekî pîvana rê derbas bikin, an jî bikar bînin register_endpoint (..)ji bo sazkirina wê paşê.
references
- Ev şûşe ji bo Prometheus hinarde dike
- Bikaranîn, mînak û vebijarkên veavakirinê
- Mînakên sazkirina şopandina serîlêdana Flask bi awayên cihêreng
- Ev proje li ser PyPI ye
- Pirtûkxaneya fermî ya xerîdar Prometheus ji bo Python
Heke hûn biryar didin ku wê biceribînin, bi dilxwazî pirsgirêkek li ser GitHub vekin an şîrove, nerîn û pêşniyarên xwe bihêlin!
Spas!
Source: www.habr.com
