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 සේවාදායක පුස්තකාලය.

ඔබට සොයාගත හැකිය භාවිතා කිරීමට පහසු උදාහරණයක් උදාහරණය ක්‍රියාත්මක කරන GitHub ගබඩාවේ Prometheus и ග්‍රැෆනා මේ වගේ දෙයක් පෙනෙන ප්‍රමිතික උත්පාදනය කිරීමට demo යෙදුමක් සමඟ:

Prometheus සමඟ Flask microservices අධීක්ෂණය කිරීම

ඔබට දර්ශක ලැයිස්තුවක් ද සොයාගත හැකිය README උපකරණ පුවරුවේ දිස්වන උදාහරණ, උපකරණ පුවරු ජනනය කරන Prometheus විමසුම් සමඟින්.

ගැලපුම්

පුස්තකාලයේ බොහෝ වින්‍යාස විකල්ප තිබේ, බලන්න 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/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 වැනි ජනප්‍රිය බහු සැකසුම් පුස්තකාල සඳහා පහසු දිගු ඇත. බහු සැකසුම් ඇතුළු ඉලක්කගත භාවිත අවස්ථා පිළිබඳ කුඩා උදාහරණ ද ඔබට සොයා ගත හැක.

මිනුම් එකතුව

ඉහත සඳහන් කළ පරිදි, පුස්තකාලය පෙරනිමියෙන් අවසන් ලක්ෂ්‍යයක් සපයයි /මිතික සඳහා ඉලක්කයක් ලෙස සේවය කළ හැකි Flask යෙදුමක ප්‍රොමිතියස් තනන්නා.

ඉහත උපකරණ පුවරු උදාහරණයේදී, ඔබට මෙම වින්‍යාසය සමඟින් පෙරනිමි සැකසුම් සහිත Flask යෙදුමකට ඔබේ Prometheus ඉලක්ක කළ හැක:

scrape_configs:
  - job_name: 'example'

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

සම්පූර්ණ උදාහරණය බලන්න GitHub ගබඩා. Prometheus හට ඔබගේ Flask යෙදුම් අවස්ථා සොයා ගත හැකි බව මෙය උපකල්පනය කරයි http://app:5000/metrics, යෙදුම් ඩොමේන් නාමය බහු IP ලිපිනවලට විසඳිය හැකි ස්ථාන, උදාහරණයක් ලෙස ධාවනය වන විට කුබර්නෙට්ස් හෝ ඩෝකර් රංචුව.

ප්‍රමිතික අන්ත ලක්ෂ්‍යය මේ ආකාරයෙන් නිරාවරණය කිරීම ඔබට නොගැලපේ නම්, සමහරවිට ඔබට එයට බාහිර ප්‍රවේශයට ඉඩ දීමට අවශ්‍ය නැති නිසා, ඔබට එය පසුකර යාමෙන් පහසුවෙන් අක්‍රිය කළ හැක. path=කිසිවක් නැත උදාහරණයක් නිර්මාණය කරන විට 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 ඉහත උදාහරණයේ. විකල්පයක් ලෙස, අවසාන ලක්ෂ්‍යය එකම Flask යෙදුමේ තිබීම ගැන ඔබ සතුටු වන්නේ නම්, නමුත් ඔබ එහි මාර්ගය වෙනස් කළ යුතුය /මිතික, ඔබට මාර්ග පරාමිතිය ලෙස වෙනත් URI සමත් විය හැක, නැතහොත් භාවිතා කරන්න register_endpoint(..)එය පසුව ස්ථාපනය කිරීමට.

යොමු

ඔබ එය උත්සාහ කිරීමට තීරණය කරන්නේ නම්, GitHub හි ගැටලුවක් විවෘත කිරීමට හෝ ඔබේ අදහස්, ප්‍රතිපෝෂණ සහ යෝජනා තබන්න!

ස්තුතියි!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න