Prometheus ဖြင့် Flask Microservices ကို စောင့်ကြည့်ခြင်း။

ကုဒ်မျဉ်းနှစ်ကြောင်းနှင့် သင့်အပလီကေးရှင်းသည် မက်ထရစ်များကို ထုတ်ပေးသည်၊ ဝိုး!

Prometheus_ မည်သို့အလုပ်လုပ်သည်ကိုနားလည်ရန်ဘူး_တင်ပို့သူ အနည်းငယ်မျှသာ ဥပမာ လုံလောက်သည်-

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

စတင်ရန် လိုအပ်သည်မှာ ဒါပါပဲ။ တင်သွင်းခြင်းနှင့် အစပြုခြင်းအတွက် လိုင်းတစ်ခုကို ပေါင်းထည့်ခြင်းဖြင့် PrometheusMetricsမက်ထရစ်များ ရရှိပါမည်။ တောင်းဆိုမှုကြာချိန် и ကောင်တာများတောင်းဆိုခြင်း။အဆုံးမှတ်တွင်ပြသထားသည်။ /မက်ထရစ်များ ၎င်းနှင့်အတူ မှတ်ပုံတင်ထားသည့် Flask အက်ပ်အပြင် အခြေခံမှ သင်ရရှိသည့် ပုံသေမက်ထရစ်များအားလုံး Prometheus ဖောက်သည်စာကြည့်တိုက်.

သင်ရှာလိုရသည် အသုံးပြုရလွယ်ကူသောဥပမာ Instance ကိုလည်ပတ်သည့် GitHub သိုလှောင်မှုတွင် Prometheus и Grafana ဤကဲ့သို့သောပုံသဏ္ဌာန်ရှိမည့် မက်ထရစ်များကို ထုတ်လုပ်ရန် သရုပ်ပြအပလီကေးရှင်းနှင့်အတူ-

Prometheus ဖြင့် Flask Microservices ကို စောင့်ကြည့်ခြင်း။

အညွှန်းကိန်းများစာရင်းကိုလည်း သင်တွေ့လိမ့်မည်။ README ဒက်ရှ်ဘုတ်များတွင် ပေါ်လာသည့် ဥပမာများ၊ ဒက်ရှ်ဘုတ်များကို ပြည့်စေသော Prometheus queries များနှင့်အတူ။

သင့်အောင်လုပ်ခြင်း

စာကြည့်တိုက်တွင် configuration options များစွာရှိသည်၊ ကြည့်ရှုပါ။ README ၎င်းတို့ကို အတိုချုံးရှင်းလင်းချက်ဖြင့် ပရောဂျက်ဥပမာများ။

အခြေခံ configuration ကို အပေါ်မှာ ပြထားပါတယ်။ ဥပမာတစ်ခုဖန်တီးပါ။ 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 - နည်းလမ်း၊ လမ်းကြောင်းနှင့် အခြေအနေအရ Flask တောင်းဆိုမှုအားလုံးအတွက် 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 ကဲ့သို့သော နာမည်ကြီး multiprocessing စာကြည့်တိုက်များအတွက် အဆင်ပြေသော extension များရှိသည်။ Multiprocessing အပါအဝင် ပစ်မှတ်ထားသော အသုံးပြုမှုကိစ္စများအတွက် နမူနာအသေးစားများကိုလည်း သင်တွေ့နိုင်သည်။

မက်ထရစ်များစုစည်းမှု

အထက်တွင်ဖော်ပြခဲ့သည့်အတိုင်း၊ စာကြည့်တိုက်သည် မူရင်းအတိုင်း အဆုံးမှတ်တစ်ခုပေးသည်။ /မက်ထရစ်များ Flask အက်ပလီကေးရှင်းတစ်ခုတွင် ပစ်မှတ်တစ်ခုအဖြစ် ဆောင်ရွက်နိုင်သည်။ Prometheus တည်ဆောက်သူ.

အထက်ဖော်ပြပါ ဒိုင်ခွက်နမူနာတွင်၊ သင်သည် ဤဖွဲ့စည်းမှုပုံစံဖြင့် ပုံသေဆက်တင်များနှင့်အတူ သင်၏ Prometheus ကို Flask အပလီကေးရှင်းတစ်ခုသို့ ပစ်မှတ်ထားနိုင်သည်-

scrape_configs:
  - job_name: 'example'

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

နမူနာအပြည့်အစုံကို မှာကြည့်ပါ။ GitHub သိုလှောင်မှုများ. Prometheus သည် သင်၏ Flask အပလီကေးရှင်းဖြစ်ရပ်များကို ပေါ်တွင် ရှာတွေ့နိုင်သည်ဟု ၎င်းယူဆသည်။ http://app:5000/metricsအပလီကေးရှင်း ဒိုမိန်းအမည်သည် အိုင်ပီ လိပ်စာများစွာအတွက် ဖြေရှင်းနိုင်ချေရှိသော၊ ဥပမာ- ဝင်ရောက်သည့်အခါ၊ Kubernetes သို့မဟုတ် Docker Swarm ဖြစ်သည်.

မက်ထရစ်များ အဆုံးအမှတ်ကို ဤနည်းဖြင့် ဖော်ထုတ်ခြင်းသည် သင့်အတွက် မသင့်လျော်ပါက၊ ၎င်းကို ပြင်ပသို့ ဝင်ရောက်ခွင့် မပြုလိုသောကြောင့် ဖြစ်နိုင်သည်၊ ဖြတ်သန်းခြင်းဖြင့် ၎င်းကို အလွယ်တကူ ပိတ်နိုင်သည်။ လမ်းကြောင်း = မရှိပါ။ ဥပမာတစ်ခုဖန်တီးသောအခါ 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(port)မတူညီသော HTTP port တွင် ဤအဆုံးမှတ်ကိုဖွင့်ရန်၊ 5099 အထက်ပါဥပမာတွင်။ တနည်းအားဖြင့် သင်သည် အဆုံးမှတ်သည် တူညီသော Flask အပလီကေးရှင်းတွင် ရှိနေသည့်အတွက် ပျော်ရွှင်သော်လည်း၊ သင်သည် ၎င်း၏လမ်းကြောင်းမှ ပြောင်းလဲရန် လိုအပ်ပါသည်။ /မက်ထရစ်များလမ်းကြောင်း ကန့်သတ်ချက်များအဖြစ် အခြား URI ကို သင်ဖြတ်သန်းနိုင်သည် သို့မဟုတ် အသုံးပြုနိုင်သည်။ register_endpoint(..)၎င်းကို နောက်ပိုင်းတွင် ထည့်သွင်းရန်။

ကိုးကား

စမ်းသုံးကြည့်ရန် ဆုံးဖြတ်ပါက GitHub တွင် ပြဿနာတစ်ခုဖွင့်ရန် သို့မဟုတ် သင့်မှတ်ချက်များ၊ အကြံပြုချက်များနှင့် အကြံပြုချက်များကို ချန်ထားခဲ့ပါ။

Thank you!

source: www.habr.com

မှတ်ချက် Add