ப்ரோமிதியஸுடன் பிளாஸ்க் மைக்ரோ சர்வீஸைக் கண்காணித்தல்

இரண்டு கோடுகள் மற்றும் உங்கள் பயன்பாடு அளவீடுகளை உருவாக்குகிறது, ஆஹா!

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 களஞ்சியத்தில் பிரமீதீயஸ் и கிரபனா டெமோ அப்ளிகேஷனுடன், இது போன்ற மாதிரியான அளவீடுகளை உருவாக்க:

ப்ரோமிதியஸுடன் பிளாஸ்க் மைக்ரோ சர்வீஸைக் கண்காணித்தல்

குறிகாட்டிகளின் பட்டியலையும் நீங்கள் காணலாம் என்னை தெரிந்து கொள் டாஷ்போர்டில் தோன்றும் எடுத்துக்காட்டுகள், டாஷ்போர்டுகளை நிரப்பும் ப்ரோமிதியஸ் வினவல்களுடன்.

சரிசெய்தல்

நூலகத்தில் பல கட்டமைப்பு விருப்பங்கள் உள்ளன, பாருங்கள் என்னை தெரிந்து கொள் சுருக்கமான விளக்கத்துடன் அவற்றின் திட்ட எடுத்துக்காட்டுகள்.

அடிப்படை கட்டமைப்பு மேலே காட்டப்பட்டுள்ளது. ஒரு உதாரணத்தை உருவாக்கவும் 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 கோரிக்கைகளின் மொத்த எண்ணிக்கை

குறிப்பிட்ட இறுதிப்புள்ளிகளைக் கண்காணிப்பதைத் தவிர்க்க, கூடுதல் இயல்புநிலை அளவீடுகளைப் பதிவுசெய்ய அல்லது மேலே பட்டியலிடப்பட்டுள்ளவற்றைத் தவிர்க்க அல்லது ஒரே தனிப்பயன் அளவீட்டைப் பல இறுதிப்புள்ளிகளுக்குப் பயன்படுத்துவதற்கான விருப்பங்கள் உள்ளன. சரிபார் என்னை தெரிந்து கொள் என்ன கிடைக்கும் என்பதைப் பார்க்க திட்டம்.

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

முழு உதாரணத்தையும் பார்க்கவும் கிட்ஹப் களஞ்சியங்கள். உங்கள் பிளாஸ்க் பயன்பாட்டு நிகழ்வுகளை ப்ரோமிதியஸ் கண்டுபிடிக்க முடியும் என்று இது கருதுகிறது http://app:5000/metrics, பயன்பாட்டு டொமைன் பெயர் பல ஐபி முகவரிகளுக்குத் தீர்வுகாண முடியும், எடுத்துக்காட்டாக இயங்கும் போது 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(port)இந்த இறுதிப்புள்ளியை வேறு HTTP போர்ட்டில் திறக்க, 5099 மேலே உள்ள எடுத்துக்காட்டில். மாற்றாக, அதே பிளாஸ்க் பயன்பாட்டில் இறுதிப்புள்ளி இருப்பது உங்களுக்கு மகிழ்ச்சியாக இருந்தால், அதன் பாதையை நீங்கள் மாற்ற வேண்டும் / அளவீடுகள், நீங்கள் மற்றொரு URI ஐ பாதை அளவுருவாக அனுப்பலாம் அல்லது பயன்படுத்தலாம் register_endpoint(..)பின்னர் அதை நிறுவ.

குறிப்புகள்

  • rycus86/prometheus_flask_exporter - ப்ரோமிதியஸுக்கு இந்த பாட்டில் ஏற்றுமதியாளர்

  • prometheus-flask-exporter README — பயன்பாடு, உதாரணங்கள் மற்றும் கட்டமைப்பு விருப்பங்கள்

  • prometheus-flask-exporter உதாரணங்கள் - வெவ்வேறு வழிகளில் பிளாஸ்க் பயன்பாட்டு கண்காணிப்பை அமைப்பதற்கான எடுத்துக்காட்டுகள்

  • PyPI இல் prometheus-flask-exporter - இந்த திட்டம் PyPI இல் உள்ளது

  • prometheus/client_python - பைத்தானுக்கான அதிகாரப்பூர்வ ப்ரோமிதியஸ் கிளையன்ட் லைப்ரரி

நீங்கள் முயற்சி செய்ய முடிவு செய்தால், GitHub இல் சிக்கலைத் திறக்கலாம் அல்லது உங்கள் கருத்துகள், கருத்துகள் மற்றும் பரிந்துரைகளைத் தெரிவிக்கவும்!

நன்றி!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்