'n Paar reëls kode en jou toepassing genereer statistieke, sjoe!
Om te verstaan hoe prometheus werk_fles_uitvoerder 'n minimale voorbeeld is genoeg:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'Dit is al wat jy nodig het om te begin! Deur 'n invoer en 'n lyn vir inisialisering by te voeg PrometheusMetrics, sal jy metrieke kry versoek duur и versoek tellersvertoon by die eindpunt /metrieke die Flask-toepassing waarmee dit geregistreer is, plus enige verstekmaatstawwe wat jy van die basis af kry .
jy kan vind in die GitHub-bewaarplek wat die instansie begin и saam met 'n demo-toepassing vir die generering van statistieke wat so iets sal lyk:

Jy sal ook 'n lys van aanwysers vind in voorbeelde wat in die dashboard verskyn, saam met Prometheus-navrae wat die dashboards vul.
aanpassing
Die biblioteek het baie konfigurasie opsies, kyk gerus na projekteer hul voorbeelde met 'n kort verduideliking.
Die basiese konfigurasie word hierbo getoon. Instansieer net PrometheusMetrics, kom ons noem dit statistieke, en gebruik dit dan om bykomende maatstawwe te definieer wat jy wil versamel deur funksies te versier:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Die tellers tel oproepe, en die res versamel maatstawwe gebaseer op die duur van daardie oproepe. Jy kan etikette vir elk van hierdie definieer, moontlik deur versoek- of reaksie-eienskappe te gebruik. Byvoorbeeld:
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):
passIn die voorbeeld hierbo, klik op die eindpunt /versameling/10002/item/76 sal die teller laat toeneem, bv. cnt_collection{versameling = "10002", status = "200"}, plus jy sal die verstek statistieke (vir elke eindpunt in hierdie voorbeeld) van die verstek biblioteek kry:
flask_http_request_duration_seconds- HTTP-versoekduur in sekondes vir alle Flesk-versoeke volgens metode, pad en statusflask_http_request_total- Totale aantal HTTP-versoeke volgens metodes en statusse
Daar is opsies om die dop van sekere eindpunte oor te slaan, bykomende verstekmaatstawwe te registreer of dié hierbo oor te slaan, of dieselfde pasgemaakte maatstaf op veelvuldige eindpunte toe te pas. Uitteken projek om te sien wat beskikbaar is.
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}
)
)Die biblioteek het handige uitbreidings vir gewilde multiverwerkerbiblioteke soos uWSGI en Gunicorn. Jy kan ook klein voorbeelde van teikengebruiksgevalle vind, insluitend multiverwerkings.
Versameling van statistieke
Soos hierbo genoem, verskaf die verstekbiblioteek 'n eindpunt /metrieke in 'n Flask-toepassing, wat kan dien as 'n teiken vir .
In die dashboard-voorbeeld hierbo kan jy jou Prometheus teiken op 'n Flask-toepassing met verstekinstellings soos hierdie:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sSien volledige voorbeeld by . Dit veronderstel dat Prometheus jou Flask-toepassingsgevalle by kan vind http://app:5000/metrics, waar die toepassingsdomeinnaam moontlik na veelvuldige IP-adresse kan omskep, soos wanneer dit ingevoer word of .
As die blootlegging van die metrieke eindpunt soos hierdie jou nie pas nie, miskien omdat jy nie eksterne toegang daartoe wil toelaat nie, kan jy dit maklik deaktiveer deur te slaag pad=Geen wanneer instansieer 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)Dan kan jy gebruik begin_http_bediener (poort)om hierdie eindpunt op 'n ander HTTP-poort oop te maak, 5099 in die voorbeeld hierbo. Alternatiewelik, as jy tevrede is dat die eindpunt in dieselfde Flask-toepassing is, maar sy pad moet verander vanaf /metrieke, jy kan óf 'n ander URI as die padparameter deurgee óf gebruik register_eindpunt(..)om dit later te installeer.
verwysings
- Hierdie fles uitvoerder vir Prometheus
- Gebruik, voorbeelde en konfigurasie opsies
- Voorbeelde van die konfigurasie van Flask-toepassingsmonitering op verskillende maniere
— Hierdie projek is op PyPI
- Amptelike Prometheus-kliëntbiblioteek vir Python
As jy besluit om dit te probeer, maak gerus 'n kwessie op GitHub oop of laat jou kommentaar, terugvoer en voorstelle!
Dankie!
Bron: will.com
