Якчанд сатри код ва барномаи шумо метрика тавлид мекунад, вой!
Барои фаҳмидани он ки чӣ тавр prometheus_ кор мекунадколба_содиркунанда як мисоли ҳадди ақал кофӣ аст:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
Ин ҳама чизест, ки ба шумо барои оғоз кардан лозим аст! Бо илова кардани воридот ва сатр барои оғозёбӣ PrometheusMetrics, шумо нишондиҳандаҳоро хоҳед гирифт давомнокии дархост и ҳисобкунакҳоро дархост кунед, дар нуқтаи ниҳоӣ нишон дода мешавад /метрика замимаи Flask, ки бо он сабти ном шудааст, инчунин ҳама ченакҳои пешфарз, ки шумо аз база мегиред
шумо метавонед пайдо кунед
Шумо инчунин рӯйхати нишондиҳандаҳоро дар зер хоҳед ёфт
танзим
Дар китобхона имконоти зиёди конфигуратсия мавҷуданд, нигаред
Конфигуратсияи асосӣ дар боло нишон дода шудааст. Танҳо як мисол эҷод кунед PrometheusMetrics, биёед онро даъват кунем метрика, ва сипас онро барои муайян кардани ченакҳои иловагие, ки шумо мехоҳед бо ороиш додани функсияҳо ҷамъ кунед, истифода баред:
-
@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 аз рӯи усул, роҳ ва ҳолат -
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 мебошад. Шумо инчунин метавонед мисолҳои хурди ҳолатҳои истифодаи мақсаднок, аз ҷумла коркарди бисёрҷониба пайдо кунед.
Ҷамъоварии нишондиҳандаҳо
Тавре ки дар боло зикр гардид, китобхона ба таври нобаёнӣ нуқтаи ниҳоӣ медиҳад /метрика дар барномаи Flask, ки метавонад ҳамчун ҳадаф хидмат кунад
Дар мисоли панели боло, шумо метавонед Prometheus-и худро ба як барномаи Flask бо танзимоти пешфарз бо ин конфигуратсия равона кунед:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5s
Намунаи пурраро дар
Агар ин тавр нишон додани нуқтаи ниҳоии ченакҳо ба шумо мувофиқат накунад, шояд аз он сабаб, ки шумо намехоҳед дастрасии берунаро ба он иҷозат диҳед, шумо метавонед онро бо роҳи гузариш ба осонӣ хомӯш кунед. роҳ = Ҳеҷ ҳангоми сохтани мисол 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)
Он гоҳ шумо метавонед истифода баред start_http_server(порт)барои кушодани ин нуқтаи ниҳоӣ дар порти HTTP, 5099 дар мисоли боло. Интихобан, агар шумо аз будани нуқтаи ниҳоӣ дар ҳамон як барномаи Flask қаноатманд бошед, аммо шумо бояд роҳи онро аз /метрика, шумо метавонед ё URI-и дигарро ҳамчун параметри роҳ гузаронед ё истифода баред бақайдгирии_охири(..)баъдтар насб кардани он.
мурожиат
-
rycus86/prometheus_flask_exporter - Ин содиркунандаи шиша барои Prometheus -
prometheus-flask-exporter README — Истифода, мисолҳо ва имконоти конфигуратсия -
мисолҳои prometheus-flask-exporter — Намунаҳои танзими мониторинги барномаи Flask бо роҳҳои гуногун -
prometheus-flask-exporter дар PyPI - Ин лоиҳа дар PyPI аст -
prometheus/client_python - Китобхонаи расмии муштарии Prometheus барои Python
Агар шумо қарор диҳед, ки онро санҷед, озод бошед, ки дар GitHub масъала кушоед ё шарҳҳо, фикру мулоҳизаҳо ва пешниҳодҳои худро гузоред!
Ташаккур!
Манбаъ: will.com