Flaski mikroteenuste jÀlgimine Prometheuse abil

Paari koodirida ja teie rakendus genereerib mÔÔdikud, vau!

Kuna on oluline mÔista, kuidas prometheus_flask_exporter töötab, 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, mis on vajalik alustamiseks! Lisa import ja rea algatamiseks PrometheusMetrics, saate mÔÔdikud pÀringute kestuse ja pÀringu loendurid, mis kuvatakse Flaski rakenduse lÔpp-punktis, kus ta on registreeritud, samuti kÔik vaike mÔÔdikud, mis tulevad baasist /metrics Prometheuse kliendi teek Leiate.

kasutajasÔbraliku nÀite GitHubi hoidlast, mis kÀivitab instantsi koos demonstreeriva rakendusega, et genereerida mÔÔdikud, mis nÀevad vÀlja umbes nii: Prometheus ja Grafana Leiate ka mÔÔdikute nimekirja

Flaski mikroteenuste jÀlgimine Prometheuse abil

README nÀiteks, mis kuvatakse armatuurlaudade peal koos Prometheuse pÀringutega, mis tÀidavad armatuure. Teegis on palju konfiguratsioonivÔimalusi, vaata

Seadistamine

projekti nĂ€iteid lĂŒhikese selgitusega. nĂ€iteks, mis kuvatakse armatuurlaudade peal koos Prometheuse pĂ€ringutega, mis tĂ€idavad armatuure. Baaskonfiguratsioon on esitatud ĂŒleval. Lihtsalt loo instants

, nimetame seda PrometheusMetricsmetrics , ja seejÀrel mÀÀrake lisamÔÔdikud, mida soovite koguda, funktsioone dekoreerides:@metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

  • Loendurid loevad kutsed, samas kui ĂŒlejÀÀnud koguvad mÔÔdikud nende kutsumise kestuse alusel. VĂ”ite mÀÀrata silte igaĂŒhe jaoks, potentsiaalselt kasutades pĂ€ringu vĂ”i vastuse atribuute. NĂ€iteks:

from flask import Flask, request from prometheus_flask_exporter import PrometheusMetricsapp = Flask(__name__)# rĂŒhmitamine lĂ”pp-punkti, mitte tee jĂ€rgi metrics = PrometheusMetrics(app, group_by='endpoint')@app.route('\/collection\/collection_id\/item\/item_id') @metrics.counter( 'cnt_collection', 'Kutsede arv kogumise kaupa', 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 lĂ”pp-punkti klikkimine

tÔstab loendurit, nÀiteks /collection/10002/item/76 cnt_collection{collection = "10002", status = "200"} , pluss, saate vaikemÔÔdikud (iga lÔpp-punkti jaoks selles nÀites) vaiketeegist:flask_http_request_duration_seconds

  • — HTTP pĂ€ringu kestus sekundites kĂ”ikide Flaski pĂ€ringute, meetodi, tee ja staatuse jĂ€rgi flask_http_request_total

  • — KĂ”igi HTTP pĂ€ringute koguarv meetodite ja staatuste kaupa — Üldine HTTP-pĂ€ringute arv meetodite ja staatuste kaupa

On olemas vĂ”imalusi teatud lĂ”pp-punktide jĂ€lgimise vahelejĂ€tmiseks, registreerida vaikimisi tĂ€iendavad mÔÔdikud vĂ”i vahele jĂ€tta ĂŒlaltoodud ning rakendada sama kohandatud mÔÔdikut mitmele lĂ”pp-punktile. Tutvuge nĂ€iteks, mis kuvatakse armatuurlaudade peal koos Prometheuse pĂ€ringutega, mis tĂ€idavad armatuure. projektiga, et nĂ€ha, mis on saadaval.

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

@app.route('‍/')
def main():
    pass  # vaikimisi jÀlgitavad pÀringud

@app.route('‍/skip')
@metrics.do_not_track()
def skip():
    pass  # vaikimisi mÔÔdikud ei koguta

# kohandatud mÔÔdik, mida rakendatakse 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 jÀrgi

@app.route('‍/common/two')
@common_counter
def endpoint_two():
    pass  # jÀlgitakse samuti kohandatud ja vaikimisi mÔÔdikute jÀrgi

# registreeri tÀiendavad vaikimisi mÔÔdikud
metrics.register_default(
    metrics.counter(
        'by_path_counter', 'PÀringute arv pÀringute teede kaupa',
        labels={'path': lambda: request.path}
    )
)

Raamatukogus on mugavad laiendused populaarsete mitmeprotsessoriliste raamatukogude jaoks, nagu uWSGI ja Gunicorn. Samuti leiate vÀikseid nÀiteid sihtotstarbeliste kasutusvÔimaluste kohta, sealhulgas mitmeprotsessoriliste.

MÔÔdikute kogumine

Nagu eespool mainitud, pakub raamatukogu vaikimisi lÔpp-punkti /metrics Flaski rakenduses, mis vÔib teenida sihtmÀrgiks Prometheuse kogumisele.

Eespool toodud juhtumi jaoks, kus armatuurlaud on, saate suunata oma Prometheuse Flaski rakendusele vaikeseadistuste jÀrgi sellise konfiguratsiooniga:

scrape_configs:
  - job_name: 'example'

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

Vaadake tÀielikku nÀidet GitHubi hoidlas. See eeldab, et Prometheus suudab leida teie Flaski rakenduse instantsid http://app:5000/metrics, kus rakenduse domeeninimi vÔib potentsiaalselt lahendada mitmele IP-aadressile, nÀiteks töötades Kubernetes vÔi Docker Swarm.

Kui see mÔÔdikute lÔpp-punkt ei sobi teile, vÔib-olla seetÔttu, et te ei soovi sellele vÀlispÀÀsu lubada, 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 nagu eespool nÀidatud. Alternatiivselt, kui te pole vastu, et lÔpp-punkt oleks samas Flaski rakenduses, kuid peate selle tee muutma /metrics, saate kas edastada teise URI teede parameetrina vÔi kasutada register_endpoint(..), et seada see hiljem.

Viidatud lingid

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

AitÀh!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster