Flask mikroszolgáltatások monitorozása Prometheus segítségével

Pár kód sor, és az alkalmazásod generálja a metrikákat, wow!

Ahhoz, hogy megértsd, hogyan működik a prometheus_flask_exporter, elegendő egy minimális példa:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

Ez minden, amire szükséged van a kezdéshez! Az importálás és a inicializáló sor hozzáadásával PrometheusMetrics, megkapod a metrikákat a kérések időtartamáról és a kérések számlálói, amelyek megjelennek a végpontban /metrics a Flask alkalmazásban, amelyben regisztrálva van, és az összes alapértelmezett metrikát, amelyet a Prometheus kliens könyvtárad szolgáltat..

Egyszerűen használható példát találhatsz a GitHub-tárolóban, amely elindít egy példányt egy demóalkalmazással, amely metrikákat generál, amelyek körülbelül így néznek ki: Prometheus és Grafanába Ezenkívül megtalálod a metrikák listáját a

Flask mikroszolgáltatások monitorozása Prometheus segítségével

példában, amelyek a vezérlőpulton jelennek meg, együtt a Prometheus kérdéseivel, amelyek kitöltik a paneleket. README A könyvtárban számos konfigurációs lehetőség található, nézd át a

Beállítás

projekt példáikat egy rövid magyarázattal. README Az alap konfiguráció a felső részen látható. Csak hozz létre egy példányt

, nevezzük el PrometheusMetrics, majd ezzel határozd meg azokat a további metrikákat, amelyeket gyűjteni szeretnél, dekorálva a függvényeket: metrikák@metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

  • A számlálók a hívásokat számolják, míg a többiek a hívások időtartama alapján gyűjtik a metrikákat. Metrikákat definiálhatsz minden egyeshez, potenciálisan használva a kérés vagy válasz jellemzőit. Például:

from flask import Flask, request from prometheus_flask_exporter import PrometheusMetricsapp = Flask(__name__)# csoportosítás végpont szerint, nem pedig útvonal szerint metrics = PrometheusMetrics(app, group_by='endpoint')@app.route('⁄collection⁄:collection_id⁄item⁄:item_id') @metrics.counter( 'cnt_collection', 'Hívások száma gyűjteményenként', labels={ 'collection': lambda: request.view_args['collection_id'], 'status': lambda resp: resp.status_code }) def get_item_from_collection(collection_id, item_id): pass

A fenti példa alapján, amikor a végpontra kattintasz,

növeli a számlálót, például /collection/10002/item/76 cnt_collection{collection = «10002», status = «200»} , és kapsz alapértelmezett metrikákat (minden végpontra az példában) az alap könyvtárból:flask_http_request_duration_seconds

  • — A Flask összes kérésének HTTP-kérelmeinek időtartama másodpercben módszer, útvonal és státusz szerint flask_http_request_total

  • — A HTTP-kérések összes száma módszerek és státuszok szerint — Az összes HTTP-kérés száma módszereken és státuszokon szerint

Lehetőségek vannak arra, hogy kihagyjuk bizonyos végpontok nyomkövetését, regisztráljunk további alapértelmezett metrikákat, kihagyjuk azokat, amelyek fent említve vannak, vagy ugyanazt a testreszabott metrikát alkalmazzuk több végpontra. Ismerkedjen meg a README projekttel, hogy megtudja, mi áll rendelkezésre.

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

@app.route('/')
def main():
    pass  # kérések alapértelmezés szerint nyomon követve

@app.route('/skip')
@metrics.do_not_track()
def skip():
    pass  # az alapértelmezett metrikák nem kerülnek gyűjtésre

# testreszabott metrika, amely több végponthoz is alkalmazható
common_counter = metrics.counter(
    'by_endpoint_counter', 'Kérések száma végpontok szerint',
    labels={'endpoint': lambda: request.endpoint}
)

@app.route('/common/one')
@common_counter
def endpoint_one():
    pass  # nyomon követve a testreszabott és az alapértelmezett metrikák szerint

@app.route('/common/two')
@common_counter
def endpoint_two():
    pass  # szintén nyomon követve a testreszabott és az alapértelmezett metrikák szerint

# további alapértelmezett metrikák regisztrálása
metrics.register_default(
    metrics.counter(
        'by_path_counter', 'Kérések száma a kérés útvonalai szerint',
        labels={'path': lambda: request.path}
    )
)

A könyvtár kényelmes kiterjesztéseket kínál népszerű többprocesszoros könyvtárakhoz, mint például uWSGI és Gunicorn. Kis példákat is találhat a célzott használati lehetőségekről, beleértve a többprocesszoros használatokat is.

Metrikák gyűjtése

Ahogy fent említettem, a könyvtár alapértelmezés szerint biztosít egy végpontot /metrics a Flask alkalmazásban, amely célként szolgálhat a Prometheus gyűjtőnek.

A fent említett irányítópult példájában a Prometheus-t az alapértelmezett beállításokkal célozhatja meg a következő konfigurációval:

scrape_configs:
  - job_name: 'példa'

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

Teljes példát tekinthet meg a GitHub tárolóban. Ez azt feltételezi, hogy a Prometheus képes megtalálni a Flask alkalmazás példányait a http://app:5000/metrics, ahol az alkalmazás domain neve potenciálisan több IP-címre is feloldható, például, amikor Kubernetes vagy Docker Swarm.

Ha nem megfelelő a metrikák végpontjának nyilvánossá tétele, mert nem szeretné, hogy külső hozzáférést engedélyezzen, könnyen letilthatja, ha megadja path=None az példány létrehozásakor 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)

Ezután használhatja start_http_server(port), hogy megnyissa ezt a végpontot egy másik HTTP-porton, 5099 a fent említett példában. Alternatívaként, ha elfogadja, hogy a végpont ugyanabban a Flask alkalmazásban van, de meg kell változtatnia az útvonalát /metrics, átadhat egy másik URI-t az útparaméterként, vagy használhatja register_endpoint(..), hogy ezt később állítsa be.

Hivatkozások

Ha úgy dönt, hogy kipróbálja, ne habozzon, nyisson egy issue-t a GitHubon, vagy hagyjon visszajelzést és javaslatokat!

Köszönöm!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster