Flask mikrozerbitzuen jarraipena Prometheus-ekin

Kode lerro pare bat eta zure aplikazioak metrikak sortzen ditu, wow!

Prometheus_ nola funtzionatzen duen ulertzekomatraz_esportatzaile gutxieneko adibide bat nahikoa da:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/')
def main():
    return 'OK'

Hori da hasteko behar duzun guztia! Inportazio bat eta hasierarako lerro bat gehituz PrometheusMetrics, metrikak lortuko dituzu eskaeraren iraupena ΠΈ eskatzeko kontagailuak, amaierako puntuan bistaratzen da /metrikoak erregistratuta dagoen Flask aplikazioa, baita oinarritik lortzen dituzun neurri lehenetsi guztiak ere Prometheus bezeroen liburutegia.

aurki dezakezu adibide erraz erabiltzeko instantzia exekutatzen duen GitHub biltegian Prometeo ΠΈ Grafana demo aplikazio batekin batera, antzeko itxura izango duten metrikak sortzeko:

Flask mikrozerbitzuen jarraipena Prometheus-ekin

Adierazleen zerrenda ere aurkituko duzu README aginte-panelean agertzen diren adibideak, aginte-panelak betetzen dituzten Prometheus-en kontsultekin batera.

doikuntza

Liburutegian konfigurazio aukera asko daude, begiratu README proiektu horien adibideak azalpen labur batekin.

Oinarrizko konfigurazioa goian erakusten da. Sortu besterik ez instantzia bat PrometheusMetrics, deitu dezagun metrics, eta, ondoren, erabili funtzioak apainduz bildu nahi dituzun metrika gehigarriak definitzeko:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Kontadoreek deiak zenbatzen dituzte, eta beste batzuek dei horien iraupenaren araberako neurketak biltzen dituzte. Hauetako bakoitzaren etiketak defini ditzakezu, eskaera edo erantzun propietateak erabiliz. Adibidez:

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

Goiko adibidean, amaierako puntuan klik eginez /bilduma/10002/item/76 kontagailua handitzea eragingo du, adibidez cnt_collection{bilduma = "10002", egoera = "200"}, gehi neurketa lehenetsiak (adibide honetako amaierako puntu bakoitzeko) liburutegi lehenetsitik lortuko dituzu:

  • flask_http_request_duration_seconds β€” HTTP eskaeraren iraupena segundotan Flask eskaera guztientzat, metodoaren, bidearen eta egoeraren arabera

  • flask_http_request_total β€” HTTP eskaera kopurua guztira metodoen eta egoeraren arabera

Amaiera-puntu zehatzen jarraipena saltatzeko, neurketa lehenetsi osagarriak erregistratzeko edo goian zerrendatutakoak saltatzeko aukerak daude, edo neurketa pertsonalizatu bera hainbat puntutan aplikatzeko. Errebisatu README proiektua eskuragarri dagoena ikusteko.

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}
    )
)

Liburutegiak luzapen egokiak ditu uWSGI eta Gunicorn bezalako prozesamendu anitzeko liburutegi ezagunetarako. Bideratutako erabilera kasuen adibide txikiak ere aurki ditzakezu, prozesaketa anitzekoa barne.

Metrikoen bilduma

Goian esan bezala, liburutegiak amaiera-puntu bat eskaintzen du lehenespenez /metrikoak Flask aplikazio batean, helburu gisa balio dezakeena Prometeo eraikitzailea.

Goiko aginte-panelaren adibidean, zure Prometheus ezarpen lehenetsiekin Flask aplikazio batera bideratu dezakezu konfigurazio honekin:

scrape_configs:
  - job_name: 'example'

    dns_sd_configs:
      - names: ['app']
        port: 5000
        type: A
        refresh_interval: 5s

Ikusi adibide osoa helbidean GitHub biltegiak. Honek suposatzen du Prometheus-ek zure Flask aplikazioaren instantziak aurki ditzakeela http://app:5000/metrics, non aplikazioaren domeinu-izena IP helbide anitzetara ebatzi liteke, adibidez, exekutatzen denean Kubernetes edo Docker swarm.

Metrikoen amaierako puntua horrela erakustea ez bazaizu komeni, agian kanpoko sarbidea baimendu nahi ez duzulako, erraz desgaitu dezakezu pasatuz. bidea=Inor ez instantzia bat sortzean 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)

Ondoren, erabil dezakezu start_http_zerbitzaria(ataka)amaierako puntu hau beste HTTP ataka batean irekitzeko, 5099 goiko adibidean. Bestela, amaierako puntua Flask aplikazio berean egotearekin pozik bazaude, baina bere bidea aldatu behar baduzu /metrikoak, bide-parametro gisa beste URI bat pasa dezakezu edo erabili erregistro_amaiera(..)geroago instalatzeko.

Erreferentziak

Probatzea erabakitzen baduzu, anima zaitez arazo bat ireki GitHub-en edo utzi zure iruzkinak, iritziak eta iradokizunak!

Eskerrik asko!

Iturria: www.habr.com

Gehitu iruzkin berria