Lub hauv paus configuration yog qhia saum toj no. Tsuas yog tsim ib qho piv txwv PrometheusMetrics, wb hu metrics, thiab tom qab ntawd siv nws los txheeb xyuas cov kev ntsuas ntxiv uas koj xav sau los ntawm kev dai cov haujlwm:
@metrics.counter(..)
@metrics.gauge(..)
@metrics.summary(..)
@metrics.histogram(..)
Cov suav suav suav hu, thiab lwm tus sau cov ntsuas raws li lub sijhawm hu. Koj tuaj yeem txhais cov ntawv sau rau txhua qhov no, muaj peev xwm siv cov lus thov lossis cov lus teb. Piv txwv li:
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
Hauv qhov piv txwv saum toj no, nyem rau ntawm qhov kawg /collection/10002/ khoom/76 yuav ua rau tus counter increment, piv txwv li cnt_collection{collection = "10002", xwm txheej = "200"}, ntxiv rau koj yuav tau txais cov metrics default (rau txhua qhov kawg hauv qhov piv txwv no) los ntawm lub tsev qiv ntawv default:
flask_http_request_duration_seconds - HTTP thov ncua sijhawm hauv vib nas this rau txhua qhov kev thov Flask los ntawm txoj kev, txoj hauv kev thiab xwm txheej
flask_http_request_total - Tag nrho cov naj npawb ntawm HTTP thov los ntawm txoj kev thiab cov xwm txheej
Muaj cov kev xaiv hla kev taug qab cov ntsiab lus tshwj xeeb, nkag mus ntxiv cov kev ntsuas kev ntsuas tam sim no lossis hla cov teev saum toj no, lossis siv tib qhov kev cai ntsuas rau ntau qhov kawg. Tshawb xyuas NYEEM qhov project kom pom dab tsi muaj.
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}
)
)
Lub tsev qiv ntawv muaj qhov yooj yim txuas ntxiv rau ntau lub tsev qiv ntawv nrov xws li uWSGI thiab Gunicorn. Koj tuaj yeem pom cov piv txwv me me ntawm cov teeb meem siv, suav nrog kev ua haujlwm ntau.
metrics collection
Raws li tau hais los saum no, lub tsev qiv ntawv muab qhov kawg ntawm lub neej ntawd / metrics hauv ib daim ntawv thov Flask, uas tuaj yeem ua lub hom phiaj rau Prometheus builder.
Hauv qhov piv txwv dashboard saum toj no, koj tuaj yeem tsom koj Prometheus mus rau Flask daim ntawv thov nrog cov teeb tsa ua ntej nrog qhov teeb tsa no: