پروميٿيوس سان فلاسڪ مائڪرو سروسز جي نگراني

ڪوڊ جون ٻه لائينون ۽ توهان جي ايپليڪيشن ميٽرڪس ٺاهي ٿي، واهه!

سمجھڻ لاءِ ته ڪيئن 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 и گرافانا هڪ ڊيمو ايپليڪيشن سان گڏ ميٽرڪ ٺاهڻ لاءِ جيڪو ڪجهه هن طرح نظر ايندو:

پروميٿيوس سان فلاسڪ مائڪرو سروسز جي نگراني

توھان پڻ ان ۾ اشارن جي ھڪڙي فهرست ڳوليندا ريڊيو مثال جيڪي ڊيش بورڊ ۾ ظاهر ٿين ٿا، پروميٿيوس سوالن سان گڏ جيڪي ڊيش بورڊ کي آباد ڪن ٿا.

adjustment

لئبرريءَ ۾ ڪيترائي ٺاھڻ جا اختيار آھن، ڏسو ريڊيو انهن جي منصوبي جا مثال هڪ مختصر وضاحت سان.

بنيادي تشڪيل مٿي ڏيکاريل آهي. بس هڪ مثال ٺاهيو 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

مٿين مثال ۾، آخر پوائنٽ تي ڪلڪ ڪريو /collection/10002/item/76 ڪائونٽر کي وڌائڻ جو سبب بڻائيندو، مثال طور cnt_collection{collection = "10002"، حيثيت = "200"}, پلس توهان حاصل ڪندا ڊفالٽ ميٽرڪس (هن مثال ۾ هر آخري پوائنٽ لاءِ) ڊفالٽ لائبريري مان:

  • flask_http_request_duration_seconds - HTTP درخواست جو مدو سيڪنڊن ۾ سڀني فلاسڪ درخواستن لاءِ طريقو، رستو ۽ اسٽيٽس

  • flask_http_request_total - طريقن ۽ حالتن جي ذريعي HTTP درخواستن جو ڪل تعداد

مخصوص آخري پوائنٽس جي ٽريڪنگ کي ڇڏي ڏيڻ، اضافي ڊفالٽ ميٽرڪ لاگ ان ڪرڻ يا مٿي ڏنل فهرستن کي ڇڏڻ، يا ڪيترن ئي آخري پوائنٽن تي ساڳئي ڪسٽم ميٽرڪ لاڳو ڪرڻ جا اختيار آھن. چيڪ آئوٽ ڪريو ريڊيو پروجيڪٽ ڏسو ته ڇا موجود آهي.

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 لاءِ آسان واڌايون آهن. توھان ھدف ٿيل استعمال جي ڪيسن جا ننڍا مثال پڻ ڳولي سگھو ٿا، بشمول ملٽي پروسيسنگ.

ميٽرڪ گڏ ڪرڻ

جيئن مٿي ذڪر ڪيو ويو آهي، لائبريري ڊفالٽ طور هڪ آخري پوائنٽ مهيا ڪري ٿي /ميٽرڪس هڪ فلاسڪ ايپليڪيشن ۾، جيڪو مقصد جي طور تي ڪم ڪري سگهي ٿو Prometheus ٺاهيندڙ.

مٿين ڊيش بورڊ جي مثال ۾، توھان پنھنجي پروميٿيوس کي ھدف ڪري سگھوٿا فلاسڪ ايپليڪيشن ڏانھن ھن ترتيب سان ڊفالٽ سيٽنگون:

scrape_configs:
  - job_name: 'example'

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

مڪمل مثال تي ڏسو GitHub مخزن. اهو فرض ڪري ٿو ته Prometheus توهان جي فلاسڪ ايپليڪيشن مثالن تي ڳولي سگهي ٿو 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 پاس ڪري سگهو ٿا رستو پيٽرولر جي طور تي، يا استعمال ڪريو register_endpoint (..)ان کي بعد ۾ انسٽال ڪرڻ لاء.

حوالن

جيڪڏهن توهان ان کي ڪوشش ڪرڻ جو فيصلو ڪيو، GitHub تي هڪ مسئلو کولڻ لاء آزاد محسوس ڪريو يا پنهنجا رايا، موٽ، ۽ تجويزون ڇڏي ڏيو!

مهرباني

جو ذريعو: www.habr.com

تبصرو شامل ڪريو