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 көмегімен 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 жібере аласыз немесе пайдалана аласыз тіркелу_соңғы нүктесі(..)кейінірек орнату үшін.

сілтемелер

Егер сіз оны сынап көруді шешсеңіз, GitHub сайтында мәселені ашуға немесе өз пікірлеріңізді, пікірлеріңізді және ұсыныстарыңызды қалдырыңыз!

рахмет!

Ақпарат көзі: www.habr.com

пікір қалдыру