Prometheus менен Flask микросервистерин көзөмөлдөө

Коддун бир-эки саптары жана сиздин колдонмоңуз метрикаларды жаратат, оо!

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 тиркемеси, ошондой эле сиз базадан алган бардык демейки көрсөткүчтөр Prometheus кардарлардын китепканасы.

сен таба аласың колдонууга жеңил мисал инстанцияны иштеткен GitHub репозиторийинде Prometheus и Графана демо тиркеме менен бирге төмөнкүдөй көрүнгөн көрсөткүчтөрдү түзүү:

Prometheus менен Flask микросервистерин көзөмөлдөө

Сиз ошондой эле индикаторлордун тизмесин таба аласыз README аспаптар тактасында пайда болгон мисалдар, ошондой эле башкаруу панелдерин толтурган Prometheus сурамдары.

тууралоо

Китепканада көптөгөн конфигурация параметрлери бар, караңыз README кыскача түшүндүрүү менен алардын долбоорлорунун мисалдары.

Негизги конфигурация жогоруда көрсөтүлгөн. Жөн гана мисал түзүңүз 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 сурамдарынын жалпы саны

Белгилүү бир акыркы чекиттерге көз салууну өткөрүп жиберүү, кошумча демейки көрсөткүчтөрдү каттоо же жогоруда саналгандарды өткөрүп жиберүү же бир эле ыңгайлаштырылган метриканы бир нече акыркы чекиттерге колдонуу параметрлери бар. Текшерүү README эмне бар экенин көрүү үчүн долбоор.

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

Толук мисалды караңыз GitHub репозиторийлери. Бул Prometheus Flask колдонмоңуздун инстанцияларын таба алат деп болжолдойт http://app:5000/metrics, бул жерде колдонмонун домендик аталышы бир нече IP даректерге чечилиши мүмкүн, мисалы, кирип жатканда Kubernetes же Докер үйүрү.

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

шилтемелер

Эгер сиз аны сынап көрүүнү чечсеңиз, GitHub сайтында маселени ачыңыз же өз пикириңизди, пикириңизди жана сунуштарыңызды калтырыңыз!

рахмат!

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster