د پرومیتیوس سره د فلاسک مایکرو خدماتو څارنه

د کوډ یو څو کرښې او ستاسو غوښتنلیک میټریکونه رامینځته کوي ، واه!

د دې لپاره چې پوه شي چې څنګه prometheus_ کار کويفلاسک_د صادرونکي لږترلږه مثال کافي دی:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

دا ټول هغه څه دي چې تاسو یې پیل کولو ته اړتیا لرئ! د پیل کولو لپاره د وارداتو او کرښه اضافه کولو سره PrometheusMetrics، تاسو به میټریک ترلاسه کړئ د غوښتنې موده и د شمېرونکو غوښتنه، په پای کې ښودل شوی /میټریک د فلاسک غوښتنلیک چې دا ورسره راجستر شوی، او همدارنګه ټول هغه ډیفالټ میټریکونه چې تاسو یې د بیس څخه ترلاسه کوئ د Prometheus مراجعینو کتابتون.

تاسو موندلی شئ د کارولو لپاره اسانه مثال د GitHub ذخیره کې چې مثال چلوي Prometheus и ګرافانا د میټریکونو رامینځته کولو لپاره د ډیمو غوښتنلیک سره چې دا به ورته ښکاري:

د پرومیتیوس سره د فلاسک مایکرو خدماتو څارنه

تاسو به د شاخصونو لیست هم ومومئ README مثالونه چې په ډشبورډ کې ښکاري، د پرومیټیوس پوښتنو سره چې ډشبورډونه ډکوي.

تعدیلات

په کتابتون کې د ترتیب کولو ډیری اختیارونه شتون لري، وګورئ README د پروژې مثالونه د لنډ وضاحت سره.

اساسي تشکیلات پورته ښودل شوي. یوازې یو مثال جوړ کړئ PrometheusMetrics، راځئ چې دا غږ وکړو میترونه، او بیا یې د اضافي میټریکونو تعریف کولو لپاره وکاروئ چې تاسو غواړئ د دندو په سینګار کولو سره راټول کړئ:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

شمیرونکي زنګونه شمیري، او نور د دې تلیفونونو د مودې پراساس میټریکونه راټولوي. تاسو کولی شئ د دې هر یو لپاره لیبلونه تعریف کړئ، په احتمالي توګه د غوښتنې یا ځواب ملکیتونو په کارولو سره. د مثال په ډول:

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

په پورته مثال کې، د پای ټکي کلیک کول /ټولګه/10002/item/76 د مثال په توګه د کاونټر د زیاتوالي لامل کیږي cnt_collection{collection="10002" status = "200"}, جمع تاسو به د ډیفالټ کتابتون څخه ډیفالټ میټریکونه (په دې مثال کې د هرې پای ټکي لپاره) ترلاسه کړئ:

  • flask_http_request_duration_seconds - د میتود، لارې او حالت له مخې د ټولو فلاسک غوښتنو لپاره د HTTP غوښتنې موده په ثانیو کې

  • flask_http_request_total - د میتودونو او حالتونو له مخې د HTTP غوښتنو ټولټال شمیر

دلته اختیارونه شتون لري چې د ځانګړي پای ټکي تعقیب پریږدئ ، اضافي ډیفالټ میټریکونه ولګوئ یا پورته لیست شوي پریږدئ ، یا ورته دودیز میټریک په ډیری پای نقطو کې پلي کړئ. بشپړ ی وګوره README پروژه وګورئ چې څه شتون لري.

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

کتابتون د مشهور کثیر پروسس کولو کتابتونونو لکه uWSGI او Gunicorn لپاره مناسب توسیعونه لري. تاسو کولی شئ د هدفي کارونې قضیې کوچنۍ بیلګې هم ومومئ، په شمول د څو پروسس کولو.

د میټریک راټولول

لکه څنګه چې پورته یادونه وشوه، کتابتون د ډیفالټ لخوا پای ټکی چمتو کوي /میټریک په فلاسک غوښتنلیک کې، کوم چې کولی شي د هدف په توګه خدمت وکړي پرومیتیوس جوړونکی.

په پورتنۍ ډشبورډ مثال کې ، تاسو کولی شئ خپل پرومیټیوس د دې ترتیب سره د ډیفالټ ترتیباتو سره فلاسک غوښتنلیک ته په نښه کړئ:

scrape_configs:
  - job_name: 'example'

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

بشپړ مثال په کې وګورئ د GitHub ذخیره. دا فرض کوي چې پرومیټیوس ستاسو د فلاسک غوښتنلیک مثالونه موندلی شي http://app:5000/metrics، چیرې چې د غوښتنلیک ډومین نوم په احتمالي ډول ډیری IP پتې حل کولی شي ، د مثال په توګه کله چې روان وي کوبنیټس او یا ډوکر سوی.

که چیرې د دې لارې د میټریک پای ټکی افشا کول ستاسو سره مناسب نه وي ، شاید ځکه چې تاسو نه غواړئ دې ته بهرني لاسرسي ته اجازه ورکړئ ، تاسو کولی شئ دا په اسانۍ سره په تیریدو سره غیر فعال کړئ لاره = هیڅ نه کله چې یو مثال جوړ کړئ 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)

بیا تاسو کولی شئ وکاروئ start_http_server(پورټ)د دې پای ټکی په بل HTTP بندر کې خلاصولو لپاره، 5099 په پورته مثال کې. په بدیل سره، که تاسو په ورته فلاسک غوښتنلیک کې د پای ټکی څخه خوښ یاست، مګر تاسو اړتیا لرئ چې د هغې لاره بدله کړئ /میټریک، تاسو کولی شئ د لارې پیرامیټر په توګه بل URI تیر کړئ ، یا وکاروئ راجستر_پای ټکی (..)وروسته یې نصب کړئ.

مرجع

که تاسو پریکړه وکړئ چې دا هڅه وکړئ، په GitHub کې یوه مسله خلاصولو لپاره وړیا احساس وکړئ یا خپل نظرونه، نظرونه او وړاندیزونه پریږدئ!

ساپی!

سرچینه: www.habr.com

Add a comment