เชเซเชกเชจเซ เชเซเชเชฒเซเช เชฒเชพเชเชจ เช เชจเซ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเซเชเซเชฐเชฟเชเซเชธ เชเชจเชฐเซเช เชเชฐเซ เชเซ, เชตเชพเชน!
เชชเซเชฐเซเชฎเชฟเชฅเชฟเชฏเชธ_ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซ เชธเชฎเชเชตเชพ เชฎเชพเชเซเชซเซเชฒเชพเชธเซเช_เชจเชฟเชเชพเชธเชเชพเชฐ เชฎเชพเชเซ เชจเซเชฏเซเชจเชคเชฎ เชเชฆเชพเชนเชฐเชฃ เชชเซเชฐเชคเซเช เชเซ:
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เชเชชเชฐเชจเชพ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เช เชเชคเชฟเชฎ เชฌเชฟเชเชฆเซ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเชตเซเช /collection/10002/item/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, เชเซเชฏเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชกเซเชฎเซเชจ เชจเชพเชฎ เชธเชเชญเชตเชฟเชค เชฐเซเชคเซ เชฌเชนเซเชตเชฟเชง 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 เชชเชพเชธ เชเชฐเซ เชถเชเซ เชเซ เช เชฅเชตเชพ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ เชฐเชเซเชธเซเชเชฐ_เชเชจเซเชกเชชเซเชเชจเซเช(..)เชคเซเชจเซ เชชเชเซเชฅเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ.
เชธเชเชฆเชฐเซเชญเซ
- เชชเซเชฐเซเชฎเชฟเชฅเชฟเชฏเชธ เชฎเชพเชเซ เช เชฌเซเชเชฒ เชจเชฟเชเชพเชธเชเชพเชฐ
โ เชเชชเชฏเซเช, เชเชฆเชพเชนเชฐเชฃเซ เช เชจเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชตเชฟเชเชฒเซเชชเซ
โ เชซเซเชฒเชพเชธเซเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเซเชจเชฟเชเชฐเชฟเชเชเชจเซ เช เชฒเช เช เชฒเช เชฐเซเชคเซ เชธเซเช เชเชฐเชตเชพเชจเชพ เชเชฆเชพเชนเชฐเชฃเซ
- เช เชชเซเชฐเซเชเซเชเซเช PyPI เชชเชฐ เชเซ
- เชชเชพเชฏเชฅเซเชจ เชฎเชพเชเซ เชธเชคเซเชคเชพเชตเชพเชฐ เชชเซเชฐเซเชฎเชฟเชฅเชฟเชฏเชธ เชเซเชฒเชพเชฏเชเช เชฒเชพเชเชฌเซเชฐเซเชฐเซ
เชเซ เชคเชฎเซ เชคเซเชจเซ เช เชเชฎเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซ เชเซ, เชคเซ GitHub เชชเชฐ เชเซเช เชฎเซเชฆเซเชฆเซ เชเซเชฒเชตเชพ เชฎเชพเชเซ เชจเชฟเชเชธเชเชเซเช เช เชฅเชตเชพ เชคเชฎเชพเชฐเซ เชเชฟเชชเซเชชเชฃเซเช, เชชเซเชฐเชคเชฟเชธเชพเชฆ เช เชจเซ เชธเซเชเชจเซ เชฎเซเชเซ!
เชเชญเชพเชฐ!
เชธเซเชฐเซเชธ: www.habr.com
