Flaski mikroteenuste jÀlgimine Prometheusega

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 Kuidas leida.

kasutajasÔbralik nÀide GitHubi hoidlates, mis kÀivitab instantsi koos demonstraatsioonirakendusega, et genereerida mÔÔdikud, mis nÀevad vÀlja enam-vÀhem sellised: Prometheus ja Grafana Leiate ka nÀidise mÔÔdikute nimekirja

Flaski mikroteenuste jÀlgimine Prometheusega

, mis kuvatakse armatuurlaual koos Prometheusele esitatud pÀringutega, mis tÀidavad paneele. README Raamatukogus on palju konfiguratsioonivalikuid, vaadake nende nÀiteid

Seadistamine

projekti alt koos lĂŒhikese selgitusega. README 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):
    pass

Eespooltoodud 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Ă€rgi

  • flask_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 README 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 Prometheuse kogujale.

Ü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: 5s

Vaata tÀisnÀidet GitHubi hoidlast. 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 Kubernetes vÔi Docker Swarm.

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

Kui otsustate proovida, Àrge kartke avada teemat GitHubis vÔi jÀtta oma kommentaare, tagasisidet ja ettepanekuid!

AitÀh!

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster