Pora kodo eilučių ir jūsų programa sugeneruos metriką, oho!
Norėdami suprasti, kaip veikia prometėjas_kolba_eksportuotojui pakanka minimalaus pavyzdžio:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'Tai viskas, ko jums reikia norint pradėti! Pridedant importą ir inicijavimo eilutę PrometheusMetrics, gausite metrikas prašymo trukmė и užklausų skaitikliai, rodomas galutiniame taške /metrikai programa „Flask“, kurioje ji yra užregistruota, taip pat visos numatytosios metrikos, kurias gaunate iš bazės .
tu gali rasti „GitHub“ saugykloje, kurioje vykdomas egzempliorius и kartu su demonstracine programa, skirta sukurti metriką, kuri atrodys maždaug taip:

Taip pat rasite rodiklių sąrašą pavyzdžiai, rodomi prietaisų skydelyje, kartu su Prometheus užklausomis, kurios užpildo prietaisų skydelius.
reguliavimas
Bibliotekoje yra daug konfigūravimo parinkčių, pažiūrėkite jų projektų pavyzdžiai su trumpu paaiškinimu.
Pagrindinė konfigūracija parodyta aukščiau. Tiesiog sukurkite pavyzdį PrometheusMetrics, pavadinkim metrikos, tada naudokite jį norėdami apibrėžti papildomą metriką, kurią norite rinkti, dekoruodami funkcijas:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Skaitikliai skaičiuoja skambučius, o kiti renka metrikas pagal tų skambučių trukmę. Galite apibrėžti etiketes kiekvienam iš jų, galbūt naudodami užklausos arba atsakymo ypatybes. Pavyzdžiui:
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):
passAukščiau pateiktame pavyzdyje spustelėjus galinį tašką /collection/10002/item/76 Pavyzdžiui, skaitiklis padidės cnt_collection{collection = "10002", būsena = "200"}, be to, iš numatytosios bibliotekos gausite numatytąją metriką (kiekvienam galutiniam taškui šiame pavyzdyje):
flask_http_request_duration_seconds— HTTP užklausos trukmė sekundėmis visoms „Flask“ užklausoms pagal metodą, kelią ir būsenąflask_http_request_total— Bendras HTTP užklausų skaičius pagal metodus ir būsenas
Yra parinkčių praleisti konkrečių galinių taškų stebėjimą, registruoti papildomą numatytąją metriką arba praleisti aukščiau išvardytas, arba taikyti tą pačią tinkintą metriką keliems galiniams taškams. Patikrinkite projektą, kad pamatytumėte, kas yra.
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}
)
)Bibliotekoje yra patogių plėtinių populiarioms daugiafunkcinėms bibliotekoms, tokioms kaip uWSGI ir Gunicorn. Taip pat galite rasti nedidelių tikslinių naudojimo atvejų pavyzdžių, įskaitant kelių apdorojimą.
Metrikos rinkinys
Kaip minėta pirmiau, bibliotekoje pagal numatytuosius nustatymus pateikiamas galutinis taškas /metrikai kolbos programoje, kuri gali būti naudojama kaip taikinys .
Aukščiau pateiktame prietaisų skydelio pavyzdyje galite nukreipti savo „Prometheus“ į „Flask“ programą su numatytaisiais nustatymais, naudodami šią konfigūraciją:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sVisą pavyzdį žr . Daroma prielaida, kad „Prometheus“ gali rasti jūsų „Flask“ programos egzempliorius http://app:5000/metrics, kur programos domeno pavadinimas gali būti sudarytas iš kelių IP adresų, pavyzdžiui, įjungus arba .
Jei metrikos galinio taško atskleidimas tokiu būdu jums netinka, galbūt todėl, kad nenorite leisti išorinės prieigos prie jo, galite lengvai jį išjungti perduodant path=Nėra kurdami egzempliorių 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)Tada galite naudoti start_http_server(prievadas)norėdami atidaryti šį galinį tašką kitame HTTP prievade, 5099 aukščiau pateiktame pavyzdyje. Arba, jei esate patenkintas tuo, kad galutinis taškas yra toje pačioje „Flask“ programoje, bet jums reikia pakeisti jo kelią iš /metrikai, galite perduoti kitą URI kaip kelio parametrą arba naudoti registro_galinis taškas(..)norėdami jį įdiegti vėliau.
Nuorodos
— Šis butelių eksportuotojas „Prometheus“.
— Naudojimas, pavyzdžiai ir konfigūracijos parinktys
— Kolbos taikymo stebėjimo nustatymo įvairiais būdais pavyzdžiai
— Šis projektas yra PyPI
— Oficiali „Prometheus“ kliento biblioteka, skirta „Python“.
Jei nuspręsite pabandyti, nedvejodami atidarykite problemą „GitHub“ arba palikite savo komentarus, atsiliepimus ir pasiūlymus!
Dėkojame!
Šaltinis: www.habr.com
