کوڈ کی کچھ لائنیں اور آپ کی درخواست میٹرکس تیار کرتی ہے، واہ!
یہ سمجھنے کے لیے کہ 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 سوالات کے ساتھ۔
ایڈجسٹمنٹ
لائبریری میں کنفیگریشن کے بہت سے آپشنز ہیں، دیکھیں پڑھیں ایک مختصر وضاحت کے ساتھ ان کی پروجیکٹ مثالیں۔
بنیادی ترتیب اوپر دکھایا گیا ہے۔ بس ایک مثال بنائیں 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", status = "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 کو اس کنفیگریشن کے ساتھ ڈیفالٹ سیٹنگز کے ساتھ فلاسک ایپلیکیشن پر نشانہ بنا سکتے ہیں:
مکمل مثال پر دیکھیں GitHub ذخیرے. یہ فرض کرتا ہے کہ پرومیتھیس آپ کی فلاسک ایپلیکیشن کی مثالیں تلاش کر سکتا ہے۔ http://app:5000/metrics، جہاں ایپلیکیشن ڈومین نام ممکنہ طور پر متعدد IP پتوں کو حل کر سکتا ہے، مثال کے طور پر جب چل رہا ہو۔ Kubernetes یا ڈاکر بھیڑ.
اگر میٹرکس اینڈ پوائنٹ کو اس طرح بے نقاب کرنا آپ کے لیے مناسب نہیں ہے، شاید اس لیے کہ آپ اس تک بیرونی رسائی کی اجازت نہیں دینا چاہتے، آپ اسے آسانی سے پاس کرکے غیر فعال کر سکتے ہیں۔ راستہ = کوئی نہیں۔ ایک مثال بناتے وقت 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 پاس کرسکتے ہیں، یا استعمال کرسکتے ہیں۔ رجسٹر_اینڈ پوائنٹ (..)اسے بعد میں انسٹال کرنے کے لیے۔