Ahịrị koodu abụọ na ngwa gị na-ewepụta metrik, wow!
Iji ghọta ka prometheus_ si arụ ọrụflask_onye na-ebupụ ihe atụ kacha ezuola:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
Nke ahụ bụ naanị ihe ị ga-achọ ịmalite! Site na ịgbakwunye mbubata na ahịrị maka mbido PrometheusMetrics, ị ga-enweta metrics oge arịrịọ и arịrịọ counter, egosiri na njedebe /metrics Ngwa Flask edebanyere ya, yana metrik ndabara niile ị nwetara site na ntọala Ọbá akwụkwọ ndị ahịa Prometheus.
ị nwere ike ịhụ mfe iji ihe atụ na ebe nchekwa GitHub na-eme ihe atụ Prometheus и Grafana yana ngwa ngosi iji mepụta metrik ga-adị ka nke a:
Ị ga-ahụkwa ndepụta nke egosi na README ọmụmaatụ ndị na-apụta na dashboard, yana ajụjụ Prometheus na-ejupụta dashboard.
ukpụhọde
Enwere ọtụtụ nhọrọ nhazi na ọba akwụkwọ, lee anya README oru ngo atụ nke ha na nkenke nkọwa.
E gosipụtara nhazi ntọala n'elu. Naanị mepụta ihe atụ PrometheusMetrics, ka anyị kpọọ ya metrics, wee jiri ya kọwapụta metrik ndị ọzọ ịchọrọ ịnakọta site na ịchọọ ọrụ ndị a:
@metrics.counter(..)
@metrics.gauge(..)
@metrics.summary(..)
@metrics.histogram(..)
Ndị Counters na-agụta oku, ndị ọzọ na-anakọta metrik dabere na ogologo oge oku ahụ. Ị nwere ike ịkọwa akara maka nke ọ bụla n'ime ndị a, nwere ike iji arịrịọ ma ọ bụ njirimara nzaghachi. Ọmụmaatụ:
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
N'ihe atụ dị n'elu, ịpị na njedebe njedebe / mkpokọta/10002/item/76 ga-eme ka counter na-abawanye, dịka ọmụmaatụ cnt_collection{mkpokọta = "10002", ọnọdụ = "200"}, gbakwunyere ị ga-enweta metrik ndabara (maka njedebe ọ bụla na ọmụmaatụ a) site na ọba akwụkwọ ndabara:
flask_http_request_duration_seconds - Ogologo arịrịọ HTTP na sekọnd maka arịrịọ Flask niile site na usoro, ụzọ na ọkwa
flask_http_request_total - Ngụkọta ọnụ ọgụgụ HTTP arịrịọ site na ụzọ na ọnọdụ
Enwere nhọrọ ịwụpụ nsochi nke ngwụcha ngwụcha, tinye metrics ndabara ọzọ ma ọ bụ tufuo ndị edepụtara n'elu, ma ọ bụ tinye otu metric omenala n'ọtụtụ njedebe. Lelee README oru ngo ịhụ ihe dị.
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}
)
)
Ọbá akwụkwọ ahụ nwere ndọtị dị mma maka ọba akwụkwọ ọtụtụ nhazi dị ka uWSGI na Gunicorn. Ị nwekwara ike ịhụ obere ihe atụ nke ikpe ejiri ezubere iche, gụnyere multiprocessing.
Nchịkọta metrik
Dịka e kwuru n'elu, ọbá akwụkwọ na-enye njedebe njedebe na ndabara /metrics na ngwa Flask, nke nwere ike bụrụ ebumnuche maka Onye nrụpụta Prometheus.
N'ime ihe atụ dashboard dị n'elu, ị nwere ike iledo Prometheus gị na ngwa Flask nwere ntọala ndabara na nhazi a:
Hụ ihe atụ zuru oke na Ebe nchekwa GitHub. Nke a na-eche na Prometheus nwere ike ịchọta ngwa ngwa Flask gị na http://app:5000/metrics, ebe aha ngalaba ngwa nwere ike idozi na ọtụtụ adreesị IP, dịka ọmụmaatụ mgbe ọ na-abanye Kubernetes ma ọ bụ Ulo elu ugbo elu.
Ọ bụrụ na ikpughe metrics endpoint n'ụzọ a adabaghị gị, ikekwe n'ihi na ịchọghị ikwe ka ị nweta ya, ị nwere ike gbanyụọ ya ngwa ngwa site na ịgafe. ụzọ = Ọ dịghị mgbe ịmepụta ihe atụ 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)
Mgbe ahụ ị nwere ike iji start_http_server(ọdụ ụgbọ mmiri)imeghe njedebe a na ọdụ ụgbọ mmiri HTTP dị iche, 5099 n'ihe atụ dị n'elu. N'aka nke ọzọ, ọ bụrụ na ị nwere obi ụtọ na njedebe ikpeazụ ịnọ n'otu ngwa Flask, mana ịkwesịrị ịgbanwe ụzọ ya site na. /metrics, ị nwere ike gafere URI ọzọ dị ka oke ụzọ, ma ọ bụ jiri register_endpoint(...)iji wụnye ya ma emechaa.