Pár řádků kódu a vaše aplikace vygeneruje metriky, wow!
Abychom pochopili, jak prometheus_ fungujebaňka_exportérovi stačí minimální pří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še, co potřebujete, abyste mohli začít! Přidáním importu a řádku pro inicializaci PrometheusMetrics, získáte metriky trvání požadavku и počítadla požadavků, zobrazený v koncovém bodě /metriky aplikaci Flask, ve které je registrován, a také všechny výchozí metriky, které získáte ze základny .
můžeš najít v úložišti GitHub, ve kterém je instance spuštěna и spolu s ukázkovou aplikací pro generování metrik, které budou vypadat nějak takto:

Najdete zde také seznam indikátorů příklady, které se zobrazují na řídicím panelu, spolu s dotazy Prometheus, které naplňují řídicí panely.
Nastavení
V knihovně je mnoho možností konfigurace, podívejte se jejich projektové příklady se stručným vysvětlením.
Základní konfigurace je zobrazena výše. Stačí vytvořit instanci PrometheusMetrics, říkejme tomu metrikya poté jej použijte k definování dalších metrik, které chcete shromažďovat, zdobením funkcí:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Počítadla počítají hovory a ostatní shromažďují metriky na základě délky těchto hovorů. Pro každý z nich můžete definovat štítky, případně pomocí vlastností požadavku nebo odpovědi. Napří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', '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):
passVe výše uvedeném příkladu kliknutí na koncový bod /kolekce/10002/položka/76 způsobí například zvýšení počítadla cnt_collection{collection = "10002", status = "200"}a navíc získáte výchozí metriky (pro každý koncový bod v tomto příkladu) z výchozí knihovny:
flask_http_request_duration_seconds— Trvání požadavku HTTP v sekundách pro všechny požadavky Flask podle metody, cesty a stavuflask_http_request_total— Celkový počet požadavků HTTP podle metod a stavů
Existují možnosti přeskočit sledování konkrétních koncových bodů, protokolovat další výchozí metriky nebo přeskočit ty, které jsou uvedeny výše, nebo použít stejnou vlastní metriku na více koncových bodů. Překontrolovat projektu, abyste viděli, co je k dispozici.
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}
)
)Knihovna má praktická rozšíření pro oblíbené multiprocessingové knihovny, jako je uWSGI a Gunicorn. Můžete také najít malé příklady případů cíleného použití, včetně multiprocessingu.
Sbírka metrik
Jak bylo uvedeno výše, knihovna standardně poskytuje koncový bod /metriky v aplikaci Flask, která může sloužit jako cíl pro .
Ve výše uvedeném příkladu řídicího panelu můžete zacílit svůj Prometheus na aplikaci Flask s výchozím nastavením s touto konfigurací:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sViz celý příklad na . To předpokládá, že Prometheus může najít vaše instance aplikace Flask na http://app:5000/metrics, kde by se název domény aplikace mohl potenciálně přeložit na více IP adres, například při spuštění nebo .
Pokud vám vystavení koncového bodu metrik tímto způsobem nevyhovuje, možná proto, že k němu nechcete povolit externí přístup, můžete jej snadno deaktivovat předáním cesta=Žádná při vytváření instance 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)Pak můžete použít start_http_server(port)otevřít tento koncový bod na jiném portu HTTP, 5099 ve výše uvedeném příkladu. Případně, pokud jste spokojeni s tím, že koncový bod je ve stejné aplikaci Flask, ale musíte změnit jeho cestu /metriky, můžete buď předat jiný URI jako parametr cesty, nebo použít register_endpoint(..)nainstalovat později.
reference
— Tento vývozce lahví pro Prometheus
— Použití, příklady a možnosti konfigurace
— Příklady nastavení monitorování aplikací Flask různými způsoby
— Tento projekt je na PyPI
— Oficiální klientská knihovna Prometheus pro Python
Pokud se rozhodnete to zkusit, neváhejte otevřít problém na GitHubu nebo zanechte své komentáře, zpětnou vazbu a návrhy!
Děkujeme!
Zdroj: www.habr.com
