Un paru di linee di codice è a vostra applicazione genera metrica, wow!
Per capisce cumu funziona prometheus_flacone_exporter un esempiu minimu hè abbastanza:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
Hè tuttu ciò chì avete bisognu per inizià! Aghjunghjendu una importazione è una linea per l'inizializazione Prometheus Metrics, uttene metrica durata dumanda и richieste contatori, affissatu à u puntu finale / metrica l'applicazione Flask cù quale hè registratu, è ancu tutte e metriche predeterminate chì avete da a basa Biblioteca cliente Prometheus.
pudete truvà esempiu facile à aduprà in u repository GitHub chì esegue l'istanza Prometheus и Grafana inseme cù una applicazione demo per generà metriche chì pareranu cusì:
Truverete ancu una lista di indicatori in README esempi chì appariscenu in u dashboard, inseme cù e dumande di Prometheus chì populanu i dashboards.
cutter
Ci hè parechje opzioni di cunfigurazione in a biblioteca, fighjate README esempi di prughjettu di elli cù una breve spiegazione.
A cunfigurazione di basa hè mostrata sopra. Basta à creà un esempiu Prometheus Metrics, chjamemu métrica, è dopu aduprate per definisce e metriche supplementari chì vulete cullà per decoru e funzioni:
@metrics.counter(..)
@metrics.gauge(..)
@metrics.summary(..)
@metrics.histogram(..)
I contatori cuntanu e chjama, è altri recullanu metriche basate nantu à a durata di queste chjamate. Pudete definisce etichette per ognuna di queste, potenzialmente usendu proprietà di dumanda o risposta. Per esempiu:
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):
pass
In l'esempiu sopra, clicchendu nantu à l'endpoint /collection/10002/item/76 farà chì u contatore aumenterà, per esempiu cnt_collection{collection = "10002", status = "200"}, in più uttene e metriche predeterminate (per ogni endpoint in questu esempiu) da a biblioteca predeterminata:
flask_http_request_duration_seconds - Durata di a dumanda HTTP in seconde per tutte e richieste Flask per metudu, percorsu è statutu
flask_http_request_total - U numeru tutale di dumande HTTP per metudi è stati
Ci sò opzioni per saltà u seguimentu di punti finali specifichi, registrà metriche predeterminate supplementari o saltate quelli elencati sopra, o applicà a stessa metrica persunalizata à parechji punti finali. Cuntrolla README prughjettu per vede ciò chì hè dispunibule.
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}
)
)
A biblioteca hà estensioni convenienti per e librerie multiprocessing populari cum'è uWSGI è Gunicorn. Pudete ancu truvà picculi esempi di casi d'usu mirati, cumpresu u multiprocessing.
Cullizzioni di metrica
Cumu l'esitatu sopra, a biblioteca furnisce un endpoint per automaticamente / metrica in una applicazione Flask, chì pò serve cum'è mira per Prometheus builder.
In l'esempiu di u dashboard sopra, pudete indirizzà u vostru Prometheus à una applicazione Flask cù paràmetri predeterminati cù sta cunfigurazione:
Vede l'esempiu cumpletu à Repository GitHub. Questu assume chì Prometheus pò truvà e vostre istanze di l'applicazione Flask http://app:5000/metrics, induve u nome di duminiu di l'applicazione puderia esse risolviri in parechje indirizzi IP, per esempiu, quandu eseguite Kubernetes o Sciame Docker.
Se l'esposizione di l'endpoint di metrica in questu modu ùn vi cunvene micca, forse perchè ùn vulete micca permette l'accessu esternu à questu, pudete facilmente disattivà passendu. caminu = nimu quandu crea un esempiu Prometheus Metrics.
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app, path=None)
...
metrics.start_http_server(5099)
Allora pudete aduprà start_http_server (portu)per apre stu endpoint in un altru portu HTTP, 5099 in l'esempiu sopra. In alternativa, sè site cuntentu chì l'endpoint sia in a stessa applicazione Flask, ma avete bisognu di cambià a so strada da / metrica, pudete passà un altru URI cum'è u paràmetru di u percorsu, o aduprà register_endpoint(..)per installallu dopu.