เดชเตเดฐเตŠเดฎเดฟเดคเตเดฏเต‚เดธเดฟเดจเตŠเดชเตเดชเด‚ เดซเตเดฒเดพเดธเตเด•เต เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต

เด•เต‹เดกเดฟเดจเตเดฑเต† เดฐเดฃเตเดŸเต เดตเดฐเดฟเด•เดณเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เดฎเต†เดŸเตเดฐเดฟเด•เตโ€Œเดธเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด•เตŠเดณเตเดณเดพเด‚!

เดชเตเดฐเต‹เดฎเดฟเดคเตเดฏเต‚เดธเต_ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตปเดซเตเดฒเดพเดธเตเด•เต_เด•เดฏเดฑเตเดฑเตเดฎเดคเดฟเด•เตเด•เดพเดฐเดจเต เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดฎเดคเดฟ:

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", status = "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(..)เดชเดฟเดจเตเดจเต€เดŸเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป.

เดฑเต†เดซเดฑเตปเดธเตเด•เตพ

  • rycus86/prometheus_flask_exporter - เดชเตเดฐเตŠเดฎเดฟเดคเตเดฏเต‚เดธเดฟเดจเต เดˆ เด•เตเดชเตเดชเดฟ เด•เดฏเดฑเตเดฑเตเดฎเดคเดฟเด•เตเด•เดพเดฐเตป

  • prometheus-flask-exporter README - เด‰เดชเดฏเต‹เด—เด‚, เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด“เดชเตเดทเดจเตเด•เตพ

  • prometheus-flask-exporter เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ - เดตเตเดฏเดคเตเดฏเดธเตเดค เดฐเต€เดคเดฟเด•เดณเดฟเตฝ เดซเตเดฒเดพเดธเตเด•เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ

  • PyPI-เตฝ prometheus-flask-exporter - เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต PyPI-เดฏเดฟเดฒเดพเดฃเต

  • prometheus/client_python - เดชเตˆเดคเตเดคเดฃเดฟเดจเดพเดฏเตเดณเตเดณ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดชเตเดฐเตŠเดฎเดฟเดคเตเดฏเต‚เดธเต เด•เตเดฒเดฏเดจเตเดฑเต เดฒเตˆเดฌเตเดฐเดฑเดฟ

เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, GitHub-เตฝ เด’เดฐเต เดชเตเดฐเดถเตเดจเด‚ เดคเตเดฑเด•เตเด•เดพเตป เดฎเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเตเด‚ เดซเต€เดกเตโ€Œเดฌเดพเด•เตเด•เตเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเตเด•!

เดจเดจเตเดฆเดฟ!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•