Te Aroturuki i nga Ratonga Ngaroiti a Flask me Prometheus
E rua nga rarangi waehere me to tono ka whakaputa ine, aue!
Kia mohio ai koe ki te mahi a prometheus_ipu_he iti noa te tauira:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
Koia anake te hiahia kia timata koe! Ma te taapiri i te kawemai me te raina mo te arawhiti PrometheusMetrics, ka whiwhi koe i nga inenga roanga tono и tono porotiti, ka whakaatuhia ki te pito mutunga / ineine te tono Flask kua rehitatia ki a ia, me nga inenga taunoa katoa ka whiwhi koe mai i te turanga whare pukapuka kiritaki Prometheus.
Ka kitea hoki e koe he rarangi tohu kei roto README nga tauira ka puta i te papatohu, me nga patai a Prometheus e kapi ana i nga papatohu.
whakatikatikanga
He maha nga whiringa whirihoranga i roto i te whare pukapuka, tirohia README tauira kaupapa mo ratou me te whakamarama poto.
Ko te whirihoranga taketake e whakaatuhia ana i runga. Waihanga noa he tauira PrometheusMetrics, me karanga tatou taputapu, ka whakamahi hei tautuhi i nga inenga taapiri e hiahia ana koe ki te kohi ma te whakapaipai i nga mahi:
@metrics.counter(..)
@metrics.gauge(..)
@metrics.summary(..)
@metrics.histogram(..)
Ka tatauhia e nga kaitatau nga waea, ko etahi ka kohi ine i runga i te roanga o aua waea. Ka taea e koe te tautuhi tapanga mo ia o enei, ma te whakamahi i nga ahuatanga tono, whakautu ranei. Hei tauira:
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
I roto i te tauira i runga ake nei, paato i te pito mutunga /collection/10002/item/76 ka piki ake te porotiti, hei tauira cnt_collection{collection = "10002", tūnga = "200"}, ka whiwhi koe i nga inenga taunoa (mo ia pito i tenei tauira) mai i te whare pukapuka taunoa:
flask_http_request_duration_seconds — Te roanga tono HTTP i roto i nga hēkona mo nga tono Flask katoa ma te tikanga, te ara me te mana
flask_http_request_total - Te maha o nga tono HTTP ma nga tikanga me nga mana
He whiringa ki te peke i te whai i nga tohu mutunga motuhake, ki te tuhi i etahi atu inenga taunoa, ki te peke ranei i era kua whakarārangihia i runga ake nei, ki te whakamahi i te ine ritenga ki nga pito mutunga maha. Tirohia README kaupapa kia kite i nga mea e waatea ana.
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}
)
)
Kei te whare pukapuka nga toronga watea mo nga whare pukapuka mahi maha rongonui penei i te uWSGI me te Gunicorn. Ka taea hoki e koe te kite i nga tauira iti o nga keehi whakamahi kua whaaia, tae atu ki te tukatuka maha.
Te kohinga inenga
Ka rite ki te korero i runga ake nei, ka whakaratohia e te whare pukapuka he pito mutunga ma te taunoa / ineine i roto i te tono Flask, ka taea te mahi hei whainga mo Kaihanga Prometheus.
I roto i te tauira papatohu i runga ake nei, ka taea e koe te aro ki to Prometheus ki te tono Flask me nga tautuhinga taunoa me tenei whirihoranga:
Tirohia te tauira katoa i Nga putunga putunga GitHub. Ko te whakaaro tenei ka taea e Prometheus te kimi i to tauira tono Flask i runga http://app:5000/metrics, i reira ka taea e te ingoa rohe tono te whakatau ki nga wahitau IP maha, hei tauira i te wa e rere ana Kubernetes ranei Pokai Docker.
Mena kaore e pai ki a koe te whakaatu i te pito mutunga ine, tera pea na te mea kaore koe e pai ki te tuku uru atu ki waho, ka taea e koe te whakakore ma te paahi ara=Karekau ina hanga tauira 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)
Na ka taea e koe te whakamahi start_http_server(tauranga)hei whakatuwhera i tenei pito ki runga i tetahi tauranga HTTP rereke, 5099 i roto i te tauira i runga ake nei. Akene, mena kei te harikoa koe ki te waahi mutunga kei roto i te tono Flask kotahi, engari me whakarereke e koe tona ara mai i / ineine, ka taea e koe te tuku i tetahi atu URI hei tawhā ara, hei whakamahi ranei rehita_mutunga(..)ki te tāuta i muri.