Mizere ingapo yamakhodi ndipo pulogalamu yanu imapanga ma metric, wow!
Kuti mumvetsetse momwe prometheus_ imagwirira ntchitobotolo_Exporter chitsanzo chochepa ndi chokwanira:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'Ndizo zonse zomwe mukufunikira kuti muyambe! Powonjezera zolowetsa ndi mzere woyambira Zithunzi za PrometheusMetrics, mupeza ma metric nthawi yopempha и pempha zowerengera, zowonetsedwa kumapeto /metrics pulogalamu ya Flask yomwe idalembetsedwa nayo, komanso ma metric onse omwe mumapeza kuchokera m'munsi .
mutha kupeza m'malo a GitHub omwe amayendetsa chitsanzocho и pamodzi ndi pulogalamu ya demo kuti mupange ma metric omwe aziwoneka motere:

Mudzapezanso mndandanda wa zizindikiro mu zitsanzo zomwe zimawoneka mu dashboard, pamodzi ndi mafunso a Prometheus omwe amadzaza ma dashboards.
kusintha
Pali njira zambiri zosinthira mu library, yang'anani zitsanzo za polojekiti ndi kufotokozera mwachidule.
Kusintha kofunikira kukuwonetsedwa pamwambapa. Ingopangani chitsanzo Zithunzi za PrometheusMetrics, tiyeni titchule maselo, ndiyeno mugwiritseni ntchito kutanthauzira ma metric owonjezera omwe mukufuna kusonkhanitsa pokongoletsa magwiridwe antchito:
@metrics.counter(..)@metrics.gauge(..)@metrics.summary(..)@metrics.histogram(..)
Ma Counter amawerengera mafoni, ndipo ena amatolera ma metric kutengera nthawi yakuyimbirako. Mutha kutanthauzira zilembo pa chilichonse mwa izi, pogwiritsa ntchito zopempha kapena mayankho. Mwachitsanzo:
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):
passMu chitsanzo pamwamba, kuwonekera pa mapeto /collection/10002/item/76 zipangitsa kuti kauntala ichuluke, mwachitsanzo cnt_collection{collection = "10002", status = "200"}, kuphatikizanso mupeza zoyezetsa zokhazikika (pamapeto aliwonse pachitsanzo ichi) kuchokera mulaibulale yokhazikika:
flask_http_request_duration_seconds- Kutalika kwa pempho la HTTP mumasekondi pazofunsira zonse za Flask ndi njira, njira ndi mawonekedweflask_http_request_total- Chiwerengero chonse cha zopempha za HTTP ndi njira ndi ma status
Pali zosankha zomwe mungalumphe kutsatira mathero enaake, kulemba ma metric owonjezera osakhazikika kapena kudumpha zomwe zandandalikidwa pamwambapa, kapena kugwiritsa ntchito metric yofananira kumalo angapo. Onani polojekiti kuti muwone zomwe zilipo.
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}
)
)Laibulaleyi ili ndi zowonjezera zowonjezera zama library ambiri otchuka monga uWSGI ndi Gunicorn. Mutha kupezanso zitsanzo zing'onozing'ono zamilandu yogwiritsiridwa ntchito, kuphatikiza ma multiprocessing.
Kutolera ma metrics
Monga tafotokozera pamwambapa, laibulale imapereka mapeto mwachisawawa /metrics mu pulogalamu ya Flask, yomwe ingakhale ngati chandamale cha .
Muchitsanzo cha dashboard pamwambapa, mutha kulunjika Prometheus ku pulogalamu ya Flask yokhala ndi zosintha zosasinthika ndi kasinthidwe uku:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sOnani chitsanzo chonse pa . Izi zikuganiza kuti Prometheus atha kupeza mawonekedwe a Flask yanu http://app:5000/metrics, pomwe dzina lachidziwitso la pulogalamu limatha kukhazikika pama adilesi angapo a IP, mwachitsanzo mukamalowa kapena .
Ngati kuwulula ma metrics endpoint motere sikukugwirizana ndi inu, mwina chifukwa simukufuna kulola mwayi wakunja, mutha kuyimitsa mosavuta podutsa. njira=Palibe popanga chitsanzo Zithunzi za 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)Ndiye mungagwiritse ntchito kuyamba_http_seva(doko)kuti mutsegule mapeto awa pa doko lina la HTTP, 5099 mu chitsanzo pamwambapa. Kapenanso, ngati muli okondwa kuti mapeto ali mu Flask yomweyi, koma muyenera kusintha njira yake /metrics, mutha kudutsa URI ina ngati njira yolowera, kapena kugwiritsa ntchito register_endpoint(..)kukhazikitsa pambuyo pake.
powatsimikizira
- Botolo amagulitsa kunja kwa Prometheus
- Kugwiritsa ntchito, zitsanzo ndi njira zosinthira
- Zitsanzo zokhazikitsa kuwunika kwa Flask m'njira zosiyanasiyana
- Ntchitoyi ili pa PyPI
- Laibulale yovomerezeka ya kasitomala ya Prometheus ya Python
Ngati mwaganiza zoyesa, omasuka kutsegula nkhani pa GitHub kapena kusiya ndemanga zanu, malingaliro anu, ndi malingaliro!
Спасибо!
Source: www.habr.com
