ಪ್ರಮೀತಿಯಸ್‌ನೊಂದಿಗೆ ಫ್ಲಾಸ್ಕ್ ಮೈಕ್ರೊ ಸರ್ವೀಸ್‌ಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವುದು

ಕೋಡ್‌ನ ಒಂದೆರಡು ಸಾಲುಗಳು ಮತ್ತು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ, ವಾಹ್!

Prometheus_ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲುಫ್ಲಾಸ್ಕ್_ರಫ್ತುದಾರರಿಗೆ ಕನಿಷ್ಠ ಉದಾಹರಣೆ ಸಾಕು:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

ನೀವು ಪ್ರಾರಂಭಿಸಲು ಬೇಕಾಗಿರುವುದು ಅಷ್ಟೆ! ಪ್ರಾರಂಭಕ್ಕಾಗಿ ಆಮದು ಮತ್ತು ಸಾಲನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ಪ್ರಮೀತಿಯಸ್ಮೆಟ್ರಿಕ್ಸ್, ನೀವು ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ಪಡೆಯುತ್ತೀರಿ ವಿನಂತಿಯ ಅವಧಿ и ವಿನಂತಿ ಕೌಂಟರ್‌ಗಳು, ಅಂತಿಮ ಹಂತದಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ /ಮೆಟ್ರಿಕ್ಸ್ ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನೋಂದಾಯಿಸಲಾಗಿದೆ, ಜೊತೆಗೆ ನೀವು ಬೇಸ್‌ನಿಂದ ಪಡೆಯುವ ಎಲ್ಲಾ ಡೀಫಾಲ್ಟ್ ಮೆಟ್ರಿಕ್‌ಗಳು ಪ್ರಮೀತಿಯಸ್ ಕ್ಲೈಂಟ್ ಲೈಬ್ರರಿ.

ನೀವು ಕಾಣಬಹುದು ಬಳಸಲು ಸುಲಭ ಉದಾಹರಣೆ ನಿದರ್ಶನವನ್ನು ನಡೆಸುವ GitHub ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ಪ್ರಮೀತಿಯಸ್ и ಗ್ರಾಫಾನಾ ಈ ರೀತಿ ಕಾಣುವ ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ರಚಿಸಲು ಡೆಮೊ ಅಪ್ಲಿಕೇಶನ್ ಜೊತೆಗೆ:

ಪ್ರಮೀತಿಯಸ್‌ನೊಂದಿಗೆ ಫ್ಲಾಸ್ಕ್ ಮೈಕ್ರೊ ಸರ್ವೀಸ್‌ಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವುದು

ನೀವು ಸೂಚಕಗಳ ಪಟ್ಟಿಯನ್ನು ಸಹ ಕಾಣಬಹುದು ಓದಿ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ ಕಂಡುಬರುವ ಉದಾಹರಣೆಗಳು, ಜೊತೆಗೆ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳನ್ನು ಜನಪ್ರಿಯಗೊಳಿಸುವ ಪ್ರಮೀತಿಯಸ್ ಪ್ರಶ್ನೆಗಳು.

ಹೊಂದಾಣಿಕೆ

ಲೈಬ್ರರಿಯಲ್ಲಿ ಅನೇಕ ಸಂರಚನಾ ಆಯ್ಕೆಗಳಿವೆ, ನೋಡಿ ಓದಿ ಸಂಕ್ಷಿಪ್ತ ವಿವರಣೆಯೊಂದಿಗೆ ಅವುಗಳ ಯೋಜನೆ ಉದಾಹರಣೆಗಳು.

ಮೂಲ ಸಂರಚನೆಯನ್ನು ಮೇಲೆ ತೋರಿಸಲಾಗಿದೆ. ಕೇವಲ ಒಂದು ನಿದರ್ಶನವನ್ನು ರಚಿಸಿ ಪ್ರಮೀತಿಯಸ್ಮೆಟ್ರಿಕ್ಸ್, ಅದನ್ನು ಕರೆಯೋಣ ಮಾಪನಗಳು, ತದನಂತರ ಕಾರ್ಯಗಳನ್ನು ಅಲಂಕರಿಸುವ ಮೂಲಕ ನೀವು ಸಂಗ್ರಹಿಸಲು ಬಯಸುವ ಹೆಚ್ಚುವರಿ ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಇದನ್ನು ಬಳಸಿ:

  • @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

ನಲ್ಲಿ ಸಂಪೂರ್ಣ ಉದಾಹರಣೆಯನ್ನು ನೋಡಿ GitHub ರೆಪೊಸಿಟರಿಗಳು. ನಿಮ್ಮ ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ನಿದರ್ಶನಗಳನ್ನು ಪ್ರಮೀತಿಯಸ್ ಹುಡುಕಬಹುದು ಎಂದು ಇದು ಊಹಿಸುತ್ತದೆ http://app:5000/metrics, ಅಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಡೊಮೇನ್ ಹೆಸರು ಸಂಭಾವ್ಯವಾಗಿ ಬಹು IP ವಿಳಾಸಗಳನ್ನು ಪರಿಹರಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ ಚಾಲನೆಯಲ್ಲಿರುವಾಗ ಕುಬರ್ನೆಟ್ಸ್ ಅಥವಾ ಡಾಕರ್ ಸ್ವಾರ್ಮ್.

ಮೆಟ್ರಿಕ್ಸ್ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಈ ರೀತಿಯಲ್ಲಿ ಬಹಿರಂಗಪಡಿಸುವುದು ನಿಮಗೆ ಸರಿಹೊಂದುವುದಿಲ್ಲ, ಬಹುಶಃ ನೀವು ಅದಕ್ಕೆ ಬಾಹ್ಯ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಲು ಬಯಸದ ಕಾರಣ, ನೀವು ಅದನ್ನು ಹಾದುಹೋಗುವ ಮೂಲಕ ಸುಲಭವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು ಮಾರ್ಗ = ಯಾವುದೂ ಇಲ್ಲ ಒಂದು ನಿದರ್ಶನವನ್ನು ರಚಿಸುವಾಗ ಪ್ರಮೀತಿಯಸ್ಮೆಟ್ರಿಕ್ಸ್.

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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ