La socodka Flask Microservices oo leh Prometheus

Dhowr sadar oo kood ah iyo codsigaagu wuxuu abuuraa cabbir, wow!

Si loo fahmo sida prometheus_ u shaqeeyofalaash_dhoofiye tusaale ugu yar ayaa ku filan:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

Taasi waa waxa kaliya ee aad u baahan tahay si aad u bilowdo! Adigoo ku dara soo dejinta iyo khadka bilowga PrometheusMetrics, waxaad heli doontaa cabbirro muddada codsiga ΠΈ xisaabiyeyaasha codsiga, oo lagu soo bandhigay barta dhamaadka / cabbir Codsiga Flask-ka ee uu ku diiwaan gashan yahay, iyo sidoo kale dhammaan cabbirada caadiga ah ee aad ka hesho saldhigga Maktabada macmiilka Prometheus.

waad ka heli kartaa fududahay in la isticmaalo tusaale gudaha kaydka GitHub ee maamula tusaalaha Prometheus ΠΈ Grafana oo ay la socoto arjiga demo si loo soo saaro cabbirro u ekaan doona sidan:

La socodka Flask Microservices oo leh Prometheus

Waxa kale oo aad ka heli doontaa liiska tilmaamayaasha README Tusaalooyinka ka muuqda dashboard-ka, oo ay la socdaan su'aalaha Prometheus ee buux dhaafiyay dashboard-yada.

sixitaanka

Waxaa jira fursado badan oo qaabeynta maktabadda, fiiri README tusaalooyin mashruuc oo iyaga ka mid ah oo leh sharraxaad kooban.

Qaabeynta aasaasiga ah ayaa lagu muujiyay kor. Kaliya samee tusaale PrometheusMetrics, aan wacno jaangooyooyinka, ka dibna u isticmaal si aad u qeexdo cabbirada dheeraadka ah ee aad rabto inaad ururiso adoo qurxinaya hawlaha:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Xisaabiyayaashu waxay tiriyaan wicitaannada, kuwa kalena waxay ururiyaan cabbirro ku salaysan muddada wicitaannadaas. Waxaad u qeexi kartaa summada mid kasta oo kuwan ka mid ah, iyadoo laga yaabo inaad isticmaasho codsi ama guryaha jawaabta. Tusaale ahaan:

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

Tusaalaha kore, adigoo gujinaya barta dhamaadka /ururinta/10002/item/76 waxay sababi doontaa in miiska miiska uu kordho, tusaale ahaan cnt_collection{ururinta = "10002", status = "200"}, oo lagu daray waxaad ka heli doontaa cabbirada caadiga ah (dhibic kasta ee tusaalahan) maktabadda caadiga ah:

  • flask_http_request_duration_seconds - Muddada codsiga HTTP ee ilbiriqsiyo gudahood dhammaan codsiyada Flask ee habka, dariiqa iyo heerka

  • flask_http_request_total - Wadarta tirada codsiyada HTTP ee hababka iyo xaaladaha

Waxaa jira xulashooyin lagu boodi karo raadraaca dhibcaha dhamaadka gaarka ah, geliso cabbirada caadiga ah ee dheeraadka ah ama ka boodboodka kuwa kor ku xusan, ama lagu dabaqo mitirka caadiga ah isla dhibcaha dhamaadka badan. Baadhid README mashruuc si aad u aragto waxa la heli karo.

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

Maktabadu waxay leedahay kordhin ku habboon maktabadaha hab-socodka badan ee caanka ah sida uWSGI iyo Gunicorn. Waxa kale oo aad heli kartaa tusaalooyin yaryar oo ah kiisaska isticmaalka la beegsaday, oo ay ku jiraan hab-socodka badan.

Metrics ururinta

Sida kor ku xusan, maktabaddu waxay si toos ah u bixisaa barta dhamaadka / cabbir ku jira codsiga Flask, kaas oo u adeegi kara bartilmaameed Prometheus dhise.

Tusaalaha dashboard-ka sare, waxaad ku beegsan kartaa Prometheus-kaaga arjiga Flask oo leh habayn aan caadi ahayn oo leh qaabayntan:

scrape_configs:
  - job_name: 'example'

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

Tusaale buuxa ka eeg Goobaha GitHub. Tani waxay u malaynaysaa in Prometheus uu ka heli karo tusaalaha codsigaaga Flask http://app:5000/metrics, halkaas oo magaca arjigu uu ku xalin karo cinwaano badan oo IP ah, tusaale ahaan marka gudaha loo galayo Kubureteska ama Docker raxan.

Haddii soo bandhigida halbeegyada dhamaadka habkan kuma habboona, laga yaabee inaadan rabin inaad u oggolaato gelitaanka dibadda, waxaad si fudud u baabi'in kartaa adigoo gudbaya waddo=Ma jirto marka la abuurayo tusaale 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)

Markaa waad isticmaali kartaa start_http_server(dekedda)si loo furo bartan dhamaadka deked HTTP ka duwan, 5099 Tusaalaha kore. Haddii kale, haddii aad ku faraxsan tahay in dhamaadka barta lagu jiro isla codsiga Flask, laakiin waxaad u baahan tahay inaad ka beddesho jidkeeda / cabbir, waxaad u gudbin kartaa URI kale oo ah cabbirka waddada, ama isticmaal diiwaan_dhamaadka(..)si loo rakibo hadhow.

tixraacyada

Haddii aad go'aansato inaad isku daydo, xor u noqo inaad arrin ka furto GitHub ama ka tag faallooyinkaaga, faallo-celinta, iyo soo jeedintaada!

Waad ku mahadsan tahay!

Source: www.habr.com

Add a comment