Koodiread ja teie rakendus genereerib mÔÔdikud, vau!
Kuidas prometheus_ töötab, et sellest aru saadaflask_exporter'i puhul on piisav minimaalne nÀide:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'See on kÔik, mis on vajalik alustamiseks! Lisades impordi ja initsialiseerimisread PrometheusMetrics, saate mÔÔdikud pÀringute kestuse ja pÀringute loendurid, mis kuvatakse Flaski rakenduse lÔpp-punktis, kus see on registreeritud, ning kÔik vaikimisi mÔÔdikud, mida saate baasilt /metrics Prometheuse klientraamatukogast .
kasutajasÔbralik nÀide koos demonstraatsioonirakendusega, et genereerida mÔÔdikud, mis nÀevad vÀlja enam-vÀhem sellised: ja Leiate ka nÀidise mÔÔdikute nimekirja

, mis kuvatakse armatuurlaual koos Prometheusele esitatud pÀringutega, mis tÀidavad paneele. Raamatukogus on palju konfiguratsioonivalikuid, vaadake nende nÀiteid
Seadistamine
projekti alt koos lĂŒhikese selgitusega. Aluskonfiguratsioon on nĂ€idatud ĂŒlal. Looge lihtsalt instants
, nimetame selle PrometheusMetrics, nimetame seda mÔÔdikutest, ja seejÀrel mÀÀrake tÀiendavad mÔÔdikud, mida soovite koguda, funktsioone dekoreerides:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Kalkulaatorid loendavad kutseid, samas kui ĂŒlejÀÀnud koguvad mÔÔdikud vastavalt nende kutsete kestusele. Saate mÀÀrata silte igale neist, kasutades potentsiaalselt pĂ€ringu vĂ”i vastuse omadusi. NĂ€iteks:
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
# grupp endpointi jÀrgi, mitte tee jÀrgi
metrics = PrometheusMetrics(app, group_by='endpoint')
@app.route('/collection/:collection_id/item/:item_id')
@metrics.counter(
'cnt_collection', 'Kutsete arv iga kollektsiooni kohta', labels={
'collection': lambda: request.view_args['collection_id'],
'status': lambda resp: resp.status_code
})
def get_item_from_collection(collection_id, item_id):
passEespooltoodud nÀites viib lÔpp-punkti vajutamine /collection/10002/item/76 selle kahjuks suurendamiseni, nÀiteks cnt_collection{collection = «10002», status = «200»}, pluss saate vaikemÔÔdikud (iga lÔpp-punkti jaoks selles nÀites) vaikimisi raamatukogust:
flask_http_request_duration_seconds â HTTP-pĂ€ringu kestus sekundites kĂ”igi Flaski pĂ€ringute jaoks meetodi, tee ja staatuse jĂ€rgiflask_http_request_total â KĂ”igi HTTP-pĂ€ringute koguarv meetodite ja staatuste lĂ”ikes
On olemas vĂ”imalusi teatud lĂ”pp-punktide jĂ€lgimise vahelejĂ€tmiseks, lisada vaikimisi tĂ€iendavaid mÔÔdikuid vĂ”i vahele jĂ€tta ĂŒlaltoodud mÀÀratud mÔÔdikud, vĂ”i rakendada sama kohandatud mÔÔdikut mitmele lĂ”pp-punktile. Tutvuge projektiga, et teada saada, mis on saadaval.
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
pass # pÀringud jÀlgitakse vaikimisi
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # vaikimisi mÔÔdikuid ei koguta
# kohandatud mÔÔdik, mida rakendada mitmele lÔpp-punktile
common_counter = metrics.counter(
'by_endpoint_counter', 'PÀringute arv lÔpp-punktide kaupa',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('/common/one')
@common_counter
def endpoint_one():
pass # jÀlgitakse kohandatud ja vaikimisi mÔÔdikute poolt
@app.route('/common/two')
@common_counter
def endpoint_two():
pass # jÀlgitakse samuti kohandatud ja vaikimisi mÔÔdikute poolt
# registreeri tÀiendavad vaikimisi mÔÔdikud
metrics.register_default(
metrics.counter(
'by_path_counter', 'PÀringute arv pÀringu teede kaupa',
labels={'path': lambda: request.path}
)
)Raamatukogus on mugavad laiendused populaarsetele mitme protsessori raamatukogudele, nagu uWSGI ja Gunicorn. Samuti vÔite leida vÀikeseid nÀiteid sihtotstarbelistest kasutusvariantidest, sealhulgas mitme protsessoriga.
MÔÔdiku kogumine
Nagu eespool mainitud, pakub raamatukogu vaikimisi lÔpp-punkti /metrics Flaski rakenduses, mis vÔib olla sihtpunktiks .
Ălaltoodud nĂ€ites olev sööstur vĂ”imaldab teil suunata oma Prometheuse Flaski rakendusele vaikeseadetega sellise konfiguratsiooniga:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sVaata tÀisnÀidet . See eeldab, et Prometheus suudab leida teie Flaski rakenduse instantsid http://app:5000/metrics, kus rakenduse domeeninimi vÔib potentsiaalselt resolveeruda mitmele IP-aadressile, nÀiteks töötades vÔi .
Kui selline mÔÔdikute lÔpp-punkti avalikustamine teile ei sobi, vÔib-olla seetÔttu, et te ei soovi sellele vÀljastpoolt juurdepÀÀsu, saate selle hÔlpsasti keelata, edastades path=None instantsi loomisel 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)SeejĂ€rel saate kasutada start_http_server(port), et avada see lĂ”pp-punkt teisel HTTP-porti 5099 ĂŒlaltoodud nĂ€ites. Alternatiivselt, kui teile sobib, et lĂ”pp-punkt on samas Flaski rakenduses, kuid peate muutma selle teed /metrics, saate kas edastada teise URI teekonna parameetrina vĂ”i kasutada register_endpoint(..), et seada see hiljem.
Lingid
 â See on Prometheuse flaski eksportija
 â Kasutamine, nĂ€ited ja konfiguratsiooni parameetrid
 â NĂ€ited Flaski rakenduste jĂ€lgimise seadistamiseks erinevatele viisidele
 â See projekt on PyPIs
 â Prometheuse ametlik klientide teek Pythonile
Kui otsustate proovida, Àrge kartke avada teemat GitHubis vÔi jÀtta oma kommentaare, tagasisidet ja ettepanekuid!
AitÀh!
Allikas: habr.com
