Коддун бир-эки саптары жана сиздин колдонмоңуз метрикаларды жаратат, оо!
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 тиркемеси, ошондой эле сиз базадан алган бардык демейки көрсөткүчтөр .
сен таба аласың инстанцияны иштеткен GitHub репозиторийинде и демо тиркеме менен бирге төмөнкүдөй көрүнгөн көрсөткүчтөрдү түзүү:

Сиз ошондой эле индикаторлордун тизмесин таба аласыз аспаптар тактасында пайда болгон мисалдар, ошондой эле башкаруу панелдерин толтурган Prometheus сурамдары.
тууралоо
Китепканада көптөгөн конфигурация параметрлери бар, караңыз кыскача түшүндүрүү менен алардын долбоорлорунун мисалдары.
Негизги конфигурация жогоруда көрсөтүлгөн. Жөн гана мисал түзүңүз 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/item/76 эсептегичтин өсүшүнө алып келет, мисалы cnt_collection{коллекция = "10002", статус = "200"}, плюс сиз демейки китепканадан демейки көрсөткүчтөрдү (бул мисалдагы ар бир акыркы чекит үчүн) аласыз:
flask_http_request_duration_seconds— Метод, жол жана статус боюнча бардык Flask сурамдары үчүн 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 сыяктуу популярдуу көп иштетүүчү китепканалар үчүн ыңгайлуу кеңейтүүлөр бар. Сиз ошондой эле максаттуу колдонуу учурларынын кичинекей мисалдарын, анын ичинде мультипроцессингди таба аласыз.
Метрикалардын жыйнагы
Жогоруда айтылгандай, китепкана демейки боюнча акыркы чекит менен камсыз кылат /метрикалар үчүн максат катары кызмат кыла турган Flask тиркемесинде .
Жогорудагы панелдин мисалында, сиз Prometheus'уңузду ушул конфигурация менен демейки жөндөөлөрү бар Flask колдонмосуна багыттай аласыз:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5sТолук мисалды караңыз . Бул Prometheus Flask колдонмоңуздун инстанцияларын таба алат деп болжолдойт http://app:5000/metrics, бул жерде колдонмонун домендик аталышы бир нече IP даректерге чечилиши мүмкүн, мисалы, кирип жатканда же .
Чектөөнүн акыркы чекитинин мындай жол менен ачыкка чыгышы сизге туура келбесе, балким, ага тышкы кирүүгө уруксат бергиңиз келбегендиктен, сиз аны оңой эле өчүрүп койсоңуз болот. жол=Жок инстанцияны түзүүдө 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 өткөрүп, же колдоно аласыз register_endpoint(..)аны кийинчерээк орнотуу үчүн.
шилтемелер
— Прометей үчүн бул бөтөлкө экспорттоочу
— Колдонуу, мисалдар жана конфигурация параметрлери
— Flask тиркемесинин мониторингин ар кандай жолдор менен орнотуунун мисалдары
— Бул долбоор PyPI боюнча
— Python үчүн расмий Prometheus кардар китепканасы
Эгер сиз аны сынап көрүүнү чечсеңиз, GitHub сайтында маселени ачыңыз же өз пикириңизди, пикириңизди жана сунуштарыңызды калтырыңыз!
рахмат!
Source: www.habr.com
