ప్రోమేథియస్‌తో ఫ్లాస్క్ మైక్రోసర్వీస్‌లను పర్యవేక్షించడం

రెండు లైన్ల కోడ్ మరియు మీ అప్లికేషన్ మెట్రిక్‌లను రూపొందిస్తుంది, వావ్!

ప్రోమేథియస్_ ఎలా పనిచేస్తుందో అర్థం చేసుకోవడానికిఫ్లాస్క్_ఎగుమతిదారు కనీస ఉదాహరణ సరిపోతుంది:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

మీరు ప్రారంభించవలసింది అంతే! ప్రారంభించడం కోసం దిగుమతి మరియు లైన్ జోడించడం ద్వారా PrometheusMetrics, మీరు కొలమానాలను పొందుతారు అభ్యర్థన వ్యవధి и అభ్యర్థన కౌంటర్లు, ముగింపు పాయింట్ వద్ద ప్రదర్శించబడుతుంది / కొలమానాలు ఇది రిజిస్టర్ చేయబడిన ఫ్లాస్క్ అప్లికేషన్, అలాగే మీరు బేస్ నుండి పొందే అన్ని డిఫాల్ట్ మెట్రిక్‌లు ప్రోమేతియస్ క్లయింట్ లైబ్రరీ.

మీరు కనుగొనగలరు ఉపయోగించడానికి సులభమైన ఉదాహరణ ఉదాహరణను అమలు చేసే GitHub రిపోజిటరీలో ప్రోమేతియస్ и గ్రాఫనా ఇలా కనిపించే కొలమానాలను రూపొందించడానికి డెమో అప్లికేషన్‌తో పాటు:

ప్రోమేథియస్‌తో ఫ్లాస్క్ మైక్రోసర్వీస్‌లను పర్యవేక్షించడం

మీరు సూచికల జాబితాను కూడా కనుగొంటారు README డాష్‌బోర్డ్‌లో కనిపించే ఉదాహరణలు, డాష్‌బోర్డ్‌లను నింపే ప్రోమేతియస్ ప్రశ్నలతో పాటు.

సర్దుబాటు

లైబ్రరీలో చాలా కాన్ఫిగరేషన్ ఎంపికలు ఉన్నాయి, చూడండి README సంక్షిప్త వివరణతో వాటి ఉదాహరణలను రూపొందించండి.

ప్రాథమిక కాన్ఫిగరేషన్ పైన చూపబడింది. కేవలం ఒక ఉదాహరణను సృష్టించండి 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

పై ఉదాహరణలో, ముగింపు బిందువుపై క్లిక్ చేయండి / సేకరణ/10002/అంశం/76 కౌంటర్ పెరుగుదలకు కారణమవుతుంది, ఉదాహరణకు cnt_collection{సేకరణ = "10002", స్థితి = "200"}, అదనంగా మీరు డిఫాల్ట్ లైబ్రరీ నుండి డిఫాల్ట్ కొలమానాలను (ఈ ఉదాహరణలోని ప్రతి ముగింపు బిందువుకు) పొందుతారు:

  • flask_http_request_duration_seconds — పద్ధతి, మార్గం మరియు స్థితి ద్వారా అన్ని ఫ్లాస్క్ అభ్యర్థనల కోసం 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 వంటి ప్రముఖ మల్టీప్రాసెసింగ్ లైబ్రరీల కోసం లైబ్రరీ అనుకూలమైన పొడిగింపులను కలిగి ఉంది. మీరు మల్టీప్రాసెసింగ్‌తో సహా లక్ష్య వినియోగ కేసుల యొక్క చిన్న ఉదాహరణలను కూడా కనుగొనవచ్చు.

కొలమానాల సేకరణ

పైన చెప్పినట్లుగా, లైబ్రరీ డిఫాల్ట్‌గా ముగింపు బిందువును అందిస్తుంది / కొలమానాలు ఒక ఫ్లాస్క్ అప్లికేషన్‌లో, ఇది లక్ష్యంగా ఉపయోగపడుతుంది ప్రోమేతియస్ బిల్డర్.

ఎగువన ఉన్న డ్యాష్‌బోర్డ్ ఉదాహరణలో, మీరు ఈ కాన్ఫిగరేషన్‌తో డిఫాల్ట్ సెట్టింగ్‌లతో కూడిన ఫ్లాస్క్ అప్లికేషన్‌కు మీ ప్రోమేథియస్‌ను లక్ష్యంగా చేసుకోవచ్చు:

scrape_configs:
  - job_name: 'example'

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

పూర్తి ఉదాహరణలో చూడండి 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ని పాత్ పారామీటర్‌గా పాస్ చేయవచ్చు లేదా ఉపయోగించవచ్చు register_endpoint(..)దీన్ని తర్వాత ఇన్‌స్టాల్ చేయడానికి.

సూచనలు

మీరు దీన్ని ఒకసారి ప్రయత్నించాలని నిర్ణయించుకుంటే, GitHubలో సమస్యను తెరవడానికి సంకోచించకండి లేదా మీ వ్యాఖ్యలు, అభిప్రాయాలు మరియు సూచనలను తెలియజేయండి!

ధన్యవాదాలు!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి