Kolvi mikroteenuste jälgimine Prometheusega

Paar koodirida ja teie rakendus loob mõõdikud, vau!

Et mõista, kuidas prometheus_ töötabkolb_eksportijale piisab minimaalsest näitest:

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, mida vajate, et alustada! Lisades impordi ja lähtestamise rea PrometheusMetrics, saate mõõdikuid taotluse kestus и päringu loendurid, kuvatakse lõpp-punktis /meetrika rakendus Flask, millega see on registreeritud, ja kõik baasist saadavad vaikemõõdikud Prometheuse kliendiraamatukogu.

leiad lihtne kasutada näide eksemplari käitavas GitHubi hoidlas Prometheus и grafana koos demorakendusega mõõdikute loomiseks, mis näevad välja umbes sellised:

Kolvi mikroteenuste jälgimine Prometheusega

Siit leiate ka indikaatorite loendi README näited, mis kuvatakse armatuurlaual, koos Prometheuse päringutega, mis täidavad armatuurlaudu.

reguleerimine

Teegis on palju konfiguratsioonivalikuid, vaadake README projektinäiteid neist koos lühikese selgitusega.

Põhikonfiguratsioon on näidatud ülal. Lihtsalt looge eksemplar PrometheusMetrics, nimetame seda meetrikaja seejärel kasutage seda täiendavate mõõdikute määratlemiseks, mida soovite koguda, kaunistades funktsioone:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Loendurid loevad kõnesid ja teised koguvad mõõdikuid nende kõnede kestuse alusel. Saate määratleda igaühe jaoks sildid, kasutades potentsiaalselt päringu või vastuse atribuute. Näiteks:

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

Ülaltoodud näites klõpsates lõpp-punktil /collection/10002/item/76 põhjustab näiteks loenduri tõusu cnt_collection{kogu = "10002", olek = "200"}, lisaks saate vaikemõõdikud (selle näite iga lõpp-punkti jaoks) vaiketeegist:

  • flask_http_request_duration_seconds — HTTP päringu kestus sekundites kõigi Flaski päringute jaoks meetodi, tee ja oleku järgi

  • flask_http_request_total — HTTP-päringute koguarv meetodite ja olekute kaupa

On valikuid konkreetsete lõpp-punktide jälgimise vahelejätmiseks, täiendavate vaikemõõdikute logimiseks või ülalloetletute vahelejätmiseks või sama kohandatud mõõdiku rakendamiseks mitmele lõpp-punktile. Kontrollige README projekti, et näha, mis on saadaval.

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

Teegil on mugavad laiendused populaarsete multitöötlusteekide jaoks, nagu uWSGI ja Gunicorn. Samuti võite leida väikeseid näiteid sihitud kasutusjuhtudest, sealhulgas multitöötlusest.

Mõõdikute kogumine

Nagu eespool mainitud, pakub teek vaikimisi lõpp-punkti /meetrika kolvirakenduses, mis võib olla sihtmärgiks Prometheuse ehitaja.

Ülaltoodud armatuurlaua näites saate oma Prometheuse sihtida sellise konfiguratsiooniga vaikeseadetega Flask-rakendusele:

scrape_configs:
  - job_name: 'example'

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

Vaadake täielikku näidet aadressil GitHubi hoidlad. See eeldab, et Prometheus leiab teie Flaski rakenduse eksemplarid http://app:5000/metrics, kus rakenduse domeeninimi võib potentsiaalselt muutuda mitmeks IP-aadressiks, näiteks sisselülitamisel Kubernetes või Dockeri sülem.

Kui mõõdikute lõpp-punkti sel viisil avaldamine teile ei sobi, võib-olla seetõttu, et te ei soovi sellele välist juurdepääsu lubada, saate selle hõlpsalt keelata, kui path=Puudub eksemplari 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)

Siis saate kasutada start_http_server(port)selle lõpp-punkti avamiseks teises HTTP-pordis, 5099 ülaltoodud näites. Teise võimalusena, kui olete rahul sellega, et lõpp-punkt on samas Flask rakenduses, kuid peate muutma selle teed /meetrika, saate tee parameetrina edastada teise URI või kasutada register_endpoint(..)selle hiljem installimiseks.

Viited

Kui otsustate seda proovida, avage GitHubis probleem või jätke oma kommentaarid, tagasiside ja soovitused!

Tänan!

Allikas: www.habr.com

Lisa kommentaar