Pár riadkov kódu a vaša aplikácia generuje metriky, wow!
Aby ste pochopili, ako funguje prometheus_flask_exporter, stačí minimálny príklad:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('\/')
def main():
return 'OK'To je všetko, čo potrebujete na začiatok! Pridaním importu a inicializačného riadku PrometheusMetrics, získate metriky trvania požiadaviek a počítadlá požiadaviek, zobrazené na koncovom bode /metrics aplikácie Flask, v ktorej je registrované, ako aj všetky predvolené metriky, ktoré získate z základnej .
Môžete nájsť v repozitári GitHub, ktorý spúšťa inštanciu a spolu s ukážkovou aplikáciou na generovanie metrik, ktoré budú vyzerať približne takto:

Nájdete tiež zoznam metrík v príklade, ktoré sa zobrazujú na paneli, spolu so žiadosťami Prometheus, ktoré vyplňujú panely.
Nastavenie
Knižnica má množstvo konfiguračných možností, pozrite sa na projekty s ich príkladmi a stručným vysvetlením.
Základná konfigurácia je uvedená hore. Stačí vytvoriť inštanciu PrometheusMetrics, nazvime ju metrics, a potom s ňou definovať ďalšie metriky, ktoré chcete zhromažďovať, označovaním funkcií:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Čítače počítajú volania a ostatné zhromažďujú metriky v závislosti od trvania týchto volaní. Môžete definovať štítky pre každé z nich, potenciálne pomocou vlastností požiadavky alebo odpovede. Napríklad:
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', 'Počet invokácií na zbierku', labels={
'collection': lambda: request.view_args['collection_id'],
'status': lambda resp: resp.status_code
})
def get_item_from_collection(collection_id, item_id):
passV uvedenom príklade kliknutie na koncový bod /collection/10002/item/76 spôsobí zvýšenie počítadla, ako napríklad cnt_collection{collection = „10002“, status = „200“}, plus získate predvolené metriky (pre každý koncový bod v tomto príklade) z knižnice predvolene:
flask_http_request_duration_seconds— Doba trvania HTTP požiadaviek v sekundách pre všetky požiadavky Flask podľa metódy, cesty a stavuflask_http_request_total— Celkový počet HTTP požiadaviek podľa metód a stavov
Existujú možnosti preskočiť sledovanie určitých koncových bodov, registrovať ďalšie predvolené metriky alebo preskočiť tie, ktoré sú uvedené vyššie, alebo aplikovať rovnakú prispôsobenú metriku na viaceré koncové body. Zoznámte sa s projektom, aby ste zistili, čo je k dispozícii.
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
pass # požiadavky sú sledované predvolene
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # predvolené metriky nie sú zhromaždené
# prispôsobená metrika, ktorá sa aplikovať na viaceré koncové body
common_counter = metrics.counter(
'by_endpoint_counter', 'Počet požiadaviek podľa koncových bodov',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('/common/one')
@common_counter
def endpoint_one():
pass # sledovaný prispôsobenou a predvoľbou metrikou
@app.route('/common/two')
@common_counter
def endpoint_two():
pass # taktiež sledovaný prispôsobenou a predvoľbou metrikou
# registrovať ďalšie predvolené metriky
metrics.register_default(
metrics.counter(
'by_path_counter', 'Počet požiadaviek podľa cestných ciest',
labels={'path': lambda: request.path}
)
)Knižnica obsahuje užitočné rozšírenia pre populárne multiprocesorové knižnice, ako sú uWSGI a Gunicorn. Môžete tiež nájsť malé príklady cieľových scenárov použitia, vrátane multiprocesorových.
Zber metrík
Ako bolo spomenuté vyššie, knižnica predvolene poskytuje koncovú bod /metrics v aplikácii Flask, ktorý môže slúžiť ako cieľ pre .
V uvedenom príklade s panelom nástrojov môžete nasmerovať svoj Prometheus na aplikáciu Flask s predvolenými nastaveniami s takouto konfiguráciou:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sPozrite si úplný príklad v . To predpokladá, že Prometheus môže nájsť vaše inštancie aplikácie Flask na http://app:5000/metrics, kde názov domény aplikácie môže potenciálne resolvovať na niekoľko IP adries, napríklad pri prevádzke v alebo .
Ak vám takéto sprístupnenie koncového bodu metrík nevyhovuje, možno preto, že nechcete umožniť vonkajší prístup, môžete ho jednoducho vypnúť, ak predáte path=None pri vytváraní inštancie 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)Potom môžete použiť start_http_server(port), aby ste otvorili tento koncový bod na inom HTTP porte, 5099 v uvedenom príklade. Ako alternatívu, ak vám nevadí, že je koncový bod v tej istej aplikácii Flask, ale potrebujete zmeniť jeho cestu od /metrics, môžete buď zadať inú URI ako parameter cesty, alebo použiť register_endpoint(..), aby ste to neskôr nastavili.
Odkazy
— Tento exportér fliaš pre Prometheus
— Použitie, príklady a konfiguračné možnosti
— Príklady nastavenia monitorovania aplikácií Flask rôznymi spôsobmi
— Tento projekt na PyPI
— Oficiálna klientská knižnica Prometheus pre Python
Ak sa rozhodnete vyskúšať, neváhajte otvoriť issue na GitHub alebo zanechať svoje komentáre, recenzie a návrhy!
Ďakujeme!
Zdroj: habr.com
