ڪوڊ جون ٻه لائينون ۽ توهان جي ايپليڪيشن ميٽرڪس ٺاهي ٿي، واهه!
سمجھڻ لاءِ ته ڪيئن prometheus_ ڪم ڪري ٿوفلاسڪ_ايڪسپورٽ جو هڪ گهٽ ۾ گهٽ مثال ڪافي آهي:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'اهو سڀ ڪجهه توهان کي شروع ڪرڻ جي ضرورت آهي! هڪ درآمد شامل ڪندي ۽ شروعات لاءِ هڪ لائن PrometheusMetrics، توهان ميٽرڪ حاصل ڪندا درخواست جي مدت и ڳڻپيوڪر جي درخواست، آخري پوائنٽ تي ڏيکاريل آهي /ميٽرڪس فلاسڪ ايپليڪيشن ان سان رجسٽر ٿيل آهي، انهي سان گڏ سڀئي ڊفالٽ ميٽرڪ جيڪي توهان حاصل ڪندا آهيو بنيادي طور تي .
توهان ڳولي سگهو ٿا GitHub مخزن ۾ جيڪو مثال هلندو آهي и هڪ ڊيمو ايپليڪيشن سان گڏ ميٽرڪ ٺاهڻ لاءِ جيڪو ڪجهه هن طرح نظر ايندو:

توھان پڻ ان ۾ اشارن جي ھڪڙي فهرست ڳوليندا مثال جيڪي ڊيش بورڊ ۾ ظاهر ٿين ٿا، پروميٿيوس سوالن سان گڏ جيڪي ڊيش بورڊ کي آباد ڪن ٿا.
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 لاءِ آسان واڌايون آهن. توھان ھدف ٿيل استعمال جي ڪيسن جا ننڍا مثال پڻ ڳولي سگھو ٿا، بشمول ملٽي پروسيسنگ.
ميٽرڪ گڏ ڪرڻ
جيئن مٿي ذڪر ڪيو ويو آهي، لائبريري ڊفالٽ طور هڪ آخري پوائنٽ مهيا ڪري ٿي /ميٽرڪس هڪ فلاسڪ ايپليڪيشن ۾، جيڪو مقصد جي طور تي ڪم ڪري سگهي ٿو .
مٿين ڊيش بورڊ جي مثال ۾، توھان پنھنجي پروميٿيوس کي ھدف ڪري سگھوٿا فلاسڪ ايپليڪيشن ڏانھن ھن ترتيب سان ڊفالٽ سيٽنگون:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sمڪمل مثال تي ڏسو . اهو فرض ڪري ٿو ته 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 (..)ان کي بعد ۾ انسٽال ڪرڻ لاء.
حوالن
- Prometheus لاءِ هي بوتل برآمد ڪندڙ
- استعمال، مثال ۽ ترتيب جا اختيار
- مختلف طريقن سان فلاسڪ ايپليڪيشن مانيٽرنگ قائم ڪرڻ جا مثال
- هي منصوبو PyPI تي آهي
- Python لاءِ سرڪاري Prometheus ڪلائنٽ لائبريري
جيڪڏهن توهان ان کي ڪوشش ڪرڻ جو فيصلو ڪيو، GitHub تي هڪ مسئلو کولڻ لاء آزاد محسوس ڪريو يا پنهنجا رايا، موٽ، ۽ تجويزون ڇڏي ڏيو!
مهرباني
جو ذريعو: www.habr.com
