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 taea e koe te kitea ngawari ki te whakamahi tauira i roto i te putunga GitHub e whakahaere ana i te tauira Prometheus и Karepe me te tono demo ki te whakaputa inenga ka penei te ahua:

Te Aroturuki i nga Ratonga Ngaroiti a Flask me 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:

scrape_configs:
  - job_name: 'example'

    dns_sd_configs:
      - names: ['app']
        port: 5000
        type: A
        refresh_interval: 5s

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.

tohutoro

Mena ka whakatau koe ki te whakamatau, tena koa ki te whakatuwhera i tetahi take i runga i te GitHub, waiho ranei o korero, urupare, whakaaro!

Mauruuru!

Source: will.com

Tāpiri i te kōrero