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 .
unogona kuwana muGitHub repository inomhanyisa muenzaniso и pamwe chete nedemo application kugadzira metrics inotaridzika seizvi:

Iwe zvakare uchawana rondedzero yezviratidzo mukati mienzaniso inooneka mudhibhodhi, pamwe chete nePrometheus mibvunzo inozadza madhibhodhi.
kuchinja
Pane zvakawanda zvekugadzirisa sarudzo muraibhurari, tarisa 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):
passMumuenzaniso 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 chimiroflask_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 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 .
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: 5sOna muenzaniso uzere pa . 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 kana .
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
- Iri bhodhoro rekunze rePrometheus
-Kushandisa, mienzaniso uye sarudzo dzekugadzirisa
- Mienzaniso yekumisikidza Flask application yekutarisa nenzira dzakasiyana
-Chirongwa ichi chiri paPyPI
- Yepamutemo Prometheus mutengi raibhurari yePython
Kana ukafunga kuedza, inzwa wakasununguka kuvhura nyaya paGitHub kana kusiya zvaunofunga, mhinduro, uye mazano!
Ndinokutendai!
Source: www.habr.com
