ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° микросСрвизи Flask с Prometheus

Няколко Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ ΠΈ Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΡƒΠ°Ρƒ!

Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ prometheus_flask_exporter Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/')
def main():
    return 'OK'

Π’ΠΎΠ²Π° Π΅ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅! Добавяйки ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ Ρ€Π΅Π΄ Π·Π° инициализация PrometheusMetrics, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π·Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° заявкитС ΠΈ броячитС Π½Π° заявкитС, ΠΏΠΎΠΊΠ°Π·Π²Π°Π½ΠΈ Π½Π° ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° /metrics Π½Π° Flask ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ рСгистрирано, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ всичкитС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΎΡ‚ основната клиСнтска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Prometheus.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ лСсСн Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² GitHub рСпозитория, ΠΊΠΎΠΉΡ‚ΠΎ стартира инстанция Prometheus ΠΈ Grafana вмСсто с дСмонстрационно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠ°:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° микросСрвизи Flask с Prometheus

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ списък с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π² README ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π½Π° контролния ΠΏΠ°Π½Π΅Π», Π·Π°Π΅Π΄Π½ΠΎ с Prometheus заявки, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚ Ρ‚Π°Π±Π»Π°Ρ‚Π°.

Настройка

Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈΠΌΠ° мноТСство ΠΎΠΏΡ†ΠΈΠΈ Π·Π° конфигурация, Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ README ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ с ΠΊΡ€Π°Ρ‚ΠΊΠΎ обяснСниС.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° конфигурация Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π²Π³ΠΎΡ€Π΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ инстанция PrometheusMetrics, Π΄Π° я Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌ metrics, Π° слСд Ρ‚ΠΎΠ²Π° с Π½Π΅ΠΉΠ½Π° ΠΏΠΎΠΌΠΎΡ‰ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Ρ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ искатС Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅, Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€Π°ΠΉΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

БроячитС считат повикванията, Π° останалитС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π² зависимост ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Ρ‚Π΅Π·ΠΈ повиквания. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π·Π° всяка ΠΎΡ‚ тях, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ свойства Π½Π° заявката ΠΈΠ»ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π°. НапримСр:

from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)

# Π“Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, Π° Π½Π΅ ΠΏΠΎ ΠΏΡŠΡ‚
metrics = PrometheusMetrics(app, group_by='endpoint')

@app.route('/collection/:collection_id/item/:item_id')
@metrics.counter(
    'cnt_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

Π’ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ натисканСто Π½Π° ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° /collection/10002/item/76 Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ брояча, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ cnt_collection{collection = Β«10002Β», status = Β«200Β»}, плюс Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (Π·Π° всяка ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€) ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

  • flask_http_request_duration_secondsΒ β€” ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° HTTP заявката Π² сСкунди Π·Π° всички Flask заявки ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡŠΡ‚ ΠΈ статус

  • 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. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΈ случаи Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ многопроцСсорни.

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ

ΠšΠ°ΠΊΡ‚ΠΎ бСшС спомСнато ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ прСдоставя ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° /metrics Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Flask, която ΠΌΠΎΠΆΠ΅ Π΄Π° слуТи ΠΊΠ°Ρ‚ΠΎ Ρ†Π΅Π» Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Prometheus.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ с Ρ‚Π°Π±Π»ΠΎΡ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° насочитС вашия 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 ΠΈΠ»ΠΈ Но ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π»ΠΈ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΡΡŠΡ‰ΠΈΡ docker-compose Ρ„Π°ΠΉΠ» Π².

Ако Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π½Π΅ Π²ΠΈ устроива, вСроятно Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π΅ искатС Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ външСн Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ нСя, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° я Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅, ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΉΠΊΠΈ path=None ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° инстанцията 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(port), Π·Π° Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ HTTP ΠΏΠΎΡ€Ρ‚, 5099 Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅. АлтСрнативно, Π°ΠΊΠΎ стС съгласни, Ρ‡Π΅ ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° остава Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Flask, Π½ΠΎ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡŠΡ‚Ρ ΠΉ ΠΎΡ‚ /metrics, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ URI ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° ΠΏΡŠΡ‚Ρ, ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ register_endpoint(..), Π·Π° Π΄Π° Π³ΠΎ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠΎ-късно.

Π’Ρ€ΡŠΠ·ΠΊΠΈ

  • rycus86/prometheus_flask_exporterΒ β€” Π’ΠΎΠ·ΠΈ СкспортСр Π΅ Π·Π° Prometheus

  • prometheus-flask-exporter READMEΒ β€” ИзползванС, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° конфигурация

  • prometheus-flask-exporter ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΒ β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° настройка Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° прилоТСния Flask ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ

  • prometheus-flask-exporter Π² PyPIΒ β€” Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ Π² PyPI

  • prometheus/client_pythonΒ β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° клиСнтска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Prometheus Π·Π° Python

Ако Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅, Π½Π΅ сС ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡ‚Π΅ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ issue Π² GitHub ΠΈΠ»ΠΈ Π΄Π° оставитС Π²Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ, ΠΎΡ‚Π·ΠΈΠ²ΠΈ ΠΈ прСдлоТСния!

Благодаря!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster