Monitoring Flask Microservices nePrometheus

Mitsetse yakati wandei yekodhi uye application yako inogadzira metrics, wow!

Kuti unzwisise kuti prometheus_ inoshanda seifurasiki_mutengesi muenzaniso mudiki wakakwana:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/')
def main():
    return 'OK'

Ndizvo chete zvaunoda kuti utange! Nekuwedzera kupinza uye mutsara wekutanga PrometheusMetrics, iwe uchawana metrics nguva yekukumbira ΠΈ kukumbira zviverengero, inoratidzwa panoperera /metrics iyo Flask application iyo yakanyoreswa nayo, pamwe chete neese default metrics aunowana kubva pachigadziko Prometheus mutengi raibhurari.

unogona kuwana nyore kushandisa muenzaniso muGitHub repository inomhanyisa muenzaniso Prometheus ΠΈ grafana pamwe chete nedemo application kugadzira metrics inotaridzika seizvi:

Monitoring Flask Microservices nePrometheus

Iwe zvakare uchawana rondedzero yezviratidzo mukati README mienzaniso inooneka mudhibhodhi, pamwe chete nePrometheus mibvunzo inozadza madhibhodhi.

kuchinja

Pane zvakawanda zvekugadzirisa sarudzo muraibhurari, tarisa README purojekiti mienzaniso yavo ine tsananguro pfupi.

Iyo yekutanga configuration inoratidzwa pamusoro. Ingogadzira muenzaniso PrometheusMetrics, ngatitii metrics, wozoishandisa kutsanangura mamwe metrics aunoda kuunganidza nekushongedza mabasa:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Macounter anoverenga mafoni, uye vamwe vanotora metrics zvichienderana nenguva yemafoni iwayo. Iwe unogona kutsanangura mavara kune chimwe nechimwe cheizvi, uchigona kushandisa kukumbira kana mhinduro zvivakwa. Semuyenzaniso:

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

Mumuenzaniso wepamusoro, kudzvanya pamagumo /collection/10002/item/76 zvichaita kuti counter iwedzere, semuenzaniso cnt_collection{collection = "10002", chinzvimbo = "200"}, uyezve iwe uchawana mametrics ekutanga (yega ega ekupedzisira mumuenzaniso uyu) kubva kuraibhurari yakasarudzika:

  • flask_http_request_duration_seconds -Chikumbiro cheHTTP chenguva mumasekonzi kune ese Flask zvikumbiro nenzira, nzira uye chimiro

  • flask_http_request_total - Huwandu hwehuwandu hwezvikumbiro zveHTTP nenzira nematanho

Pane sarudzo dzekusvetuka kuronda kwekwakananga mamagumo, kurodha ekuwedzera metrics kana kusvetuka iwo akanyorwa pamusoro, kana kushandisa imwechete tsika metric kune akawanda emagumo. Buda README purojekiti yekuona zviripo.

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}
    )
)

Iyo raibhurari ine yakanakira yekuwedzera kune yakakurumbira multiprocessing maraibhurari akadai seWSGI neGunicorn. Iwe unogona zvakare kuwana mienzaniso midiki yemakesi ekushandisa anonangwa, kusanganisira multiprocessing.

Metrics collection

Sezvambotaurwa pamusoro, raibhurari inopa magumo nekusarudzika /metrics mune Flask application, iyo inogona kushanda sechinangwa che Prometheus muvaki.

Mumuenzaniso wedhibhodhi pamusoro, unogona kunanga Prometheus yako kuFlask application ine default zvigadziriso neiyi gadziriso:

scrape_configs:
  - job_name: 'example'

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

Ona muenzaniso uzere pa GitHub repositories. Izvi zvinofungidzira kuti Prometheus inogona kuwana yako Flask application zviitiko pa http://app:5000/metrics, uko zita rezita rekushandisa rinogona kugadzirisa kune akawanda IP kero, semuenzaniso kana uchimhanya mukati Kubernetes kana Docker swarm.

Kana kufumura metrics endpoint nenzira iyi isingakukodzeri, pamwe nekuti haudi kubvumidza kupinda kwekunze kwairi, unogona kuidzima nyore nekupfuura. nzira=Hapana pakugadzira muenzaniso 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)

Ipapo unogona kushandisa kutanga_http_server(chiteshi)kuvhura iyi yekupedzisira pane imwe HTTP port, 5099 mumuenzaniso uri pamusoro apa. Neimwe nzira, kana iwe uchifara nekuguma kuve mune imwechete Flask application, asi iwe unofanirwa kushandura nzira yayo kubva /metrics, unogona kupfuudza imwe URI senzira parameter, kana kushandisa register_endpoint(..)kuzoiisa gare gare.

nezvakanyorwa

Kana ukafunga kuedza, inzwa wakasununguka kuvhura nyaya paGitHub kana kusiya zvaunofunga, mhinduro, uye mazano!

Ndinokutendai!

Source: www.habr.com

Voeg