ڪوڊ جون ٻه لائينون ۽ توهان جي ايپليڪيشن ميٽرڪس ٺاهي ٿي، واهه!
سمجھڻ لاءِ ته ڪيئن 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_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 ٺاهيندڙ.
مٿين ڊيش بورڊ جي مثال ۾، توھان پنھنجي پروميٿيوس کي ھدف ڪري سگھوٿا فلاسڪ ايپليڪيشن ڏانھن ھن ترتيب سان ڊفالٽ سيٽنگون:
مڪمل مثال تي ڏسو 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 (..)ان کي بعد ۾ انسٽال ڪرڻ لاء.