เดเตเดกเดฟเดจเตเดฑเต เดฐเดฃเตเดเต เดตเดฐเดฟเดเดณเตเด เดจเดฟเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเด เดฎเตเดเตเดฐเดฟเดเตโเดธเต เดธเตเดทเตโเดเดฟเดเตเดเตเดจเตเดจเต, เดเตเดณเตเดณเดพเด!
เดชเตเดฐเตเดฎเดฟเดคเตเดฏเตเดธเต_ เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเดเตเดเดพเตปเดซเตเดฒเดพเดธเตเดเต_เดเดฏเดฑเตเดฑเตเดฎเดคเดฟเดเตเดเดพเดฐเดจเต เดเดฐเต เดเตเดฑเดฟเดฏ เดเดฆเดพเดนเดฐเดฃเด เดฎเดคเดฟ:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
เดจเดฟเดเตเดเตพ เดเดฐเดเดญเดฟเดเตเดเตเดฃเตเดเดคเต เด
เดคเตเดฐเดฏเตเดฏเตเดณเตเดณเต! เดเดฐเต เดเดฑเดเตเดเตเดฎเดคเดฟเดฏเตเด เดธเดฎเดพเดฐเดเดญเดคเตเดคเดฟเดจเดพเดฏเดฟ เดเดฐเต เดตเดฐเดฟเดฏเตเด เดเตเตผเดคเตเดคเต เดชเตเดฐเตเดฎเดฟเดคเตเดฏเตเดธเตเดฎเตเดเตเดฐเดฟเดเตเดธเต, เดจเดฟเดเตเดเตพเดเตเดเต เดฎเตเดเตเดฐเดฟเดเตเดธเต เดฒเดญเดฟเดเตเดเตเด เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดเดพเดฒเดฏเดณเดตเต ะธ เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดเตเดฃเตเดเดฑเตเดเตพ, เด
เดตเดธเดพเดจ เดชเตเดฏเดฟเดจเตเดฑเดฟเตฝ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต /เดฎเตเดเตเดฐเดฟเดเตเดธเต เด
เดคเต เดฐเดเดฟเดธเตเดฑเตเดฑเตผ เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดซเตเดฒเดพเดธเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเด เด
เดเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดฒเดญเดฟเดเตเดเตเดจเตเดจ เดเดฒเตเดฒเดพ เดกเดฟเดซเตเตพเดเตเดเต เดฎเตเดเตเดฐเดฟเดเตเดเตเดเดณเตเด
เดจเดฟเดเตเดเตพเดเตเดเต เดเดฃเตเดเต เดชเดฟเดเดฟเดเตเดเดพเด
เดเตปเดกเดฟเดเตเดเตเดฑเตเดฑเดฑเตเดเดณเตเดเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเตเด เดจเดฟเดเตเดเตพ เดเดฃเตเดเตเดคเตเดคเตเด
เดเดฎเดชเตเดชเตเดเตเดคเตเดคเดฒเต
เดฒเตเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดชเตเดทเดจเตเดเตพ เดเดฃเตเดเต, เดจเตเดเตเดเต
เด เดเดฟเดธเตเดฅเดพเดจ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดฎเตเดเดณเดฟเตฝ เดเดพเดฃเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดธเตเดทเตเดเดฟเดเตเดเตเด เดชเตเดฐเตเดฎเดฟเดคเตเดฏเตเดธเตเดฎเตเดเตเดฐเดฟเดเตเดธเต, เดจเดฎเตเดเตเดเต เดตเดฟเดณเดฟเดเตเดเดพเด เดฎเตเดเตเดฐเดฟเดเตเดธเต, เดคเตเดเตผเดจเตเดจเต เดซเดเดเตโเดทเดจเตเดเตพ เด เดฒเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต เดจเดฟเดเตเดเตพ เดถเตเดเดฐเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจ เด เดงเดฟเด เดฎเตเดเตเดฐเดฟเดเตโเดธเต เดจเดฟเตผเดตเดเดฟเดเตเดเดพเตป เดเดคเต เดเดชเดฏเตเดเดฟเดเตเดเตเด:
-
@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
เดชเตเตผเดฃเตเดฃ เดเดฆเดพเดนเดฐเดฃเด เดเดตเดฟเดเต เดเดพเดฃเตเด
เด เดฐเตเดคเดฟเดฏเดฟเตฝ เดฎเตเดเตเดฐเดฟเดเตเดธเต เดเตปเดกเตโเดชเตเดฏเดฟเดจเตเดฑเต เดตเตเดณเดฟเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเต เดจเดฟเดเตเดเตพเดเตเดเต เด เดจเตเดฏเตเดเตเดฏเดฎเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฐเตเดชเดเตเดทเต เด เดคเดฟเดฒเตเดเตเดเต เดฌเดพเดนเตเดฏ เดเดเตโเดธเดธเต เด เดจเตเดตเดฆเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเตพ เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ เดเดจเตเดจเดคเดฟเดจเดพเตฝ, เดชเดพเดธเตเดธเดพเดเตเดเดฟ เดจเดฟเดเตเดเตพเดเตเดเต เด เดคเต เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดเตเดเดพเด เดชเดพเดค = เดเดจเตเดจเตเดฎเดฟเดฒเตเดฒ เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดธเตเดทเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เดชเตเดฐเตเดฎเดฟเดคเตเดฏเตเดธเตเดฎเตเดเตเดฐเดฟเดเตเดธเต.
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