Pag-monitor sa mga microservice sa Flask kauban ang Prometheus

Usa ka magtiayon nga linya sa code ug ang imong aplikasyon nagmugna mga sukatan, wow!

Aron masabtan kung giunsa paglihok ang prometheus_prasko_exporter usa ka gamay nga pananglitan igo na:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

Mao ra kana ang kinahanglan nimo aron makasugod! Pinaagi sa pagdugang ug import ug linya para sa pagsugod PrometheusMetrics, makakuha ka ug metrics gidugayon sa paghangyo ΠΈ mangayo ug mga countergipakita sa katapusan nga punto /metrics ang Flask app nga narehistro niini, dugang sa bisan unsang default metrics nga imong makuha gikan sa base Prometheus kliyente librarya.

makapangita ka dali gamiton nga pananglitan sa GitHub repository nga naglansad sa pananglitan Prometheus ΠΈ grafana kauban ang usa ka demo nga aplikasyon alang sa paghimo og mga sukatan nga ingon niini:

Pag-monitor sa mga microservice sa Flask kauban ang Prometheus

Makita usab nimo ang usa ka lista sa mga timailhan sa README mga pananglitan nga makita sa dashboard, kauban ang mga pangutana sa Prometheus nga nagpuno sa mga dashboard.

kausaban

Ang librarya adunay daghang mga kapilian sa pag-configure, tan-awa README ipakita ang ilang mga panig-ingnan uban ang mubo nga katin-awan.

Ang sukaranan nga pag-configure gipakita sa ibabaw. I-instantiate lang PrometheusMetrics, tawgon ta metrics, ug dayon gamita kini sa paghubit sa dugang nga mga sukatan nga gusto nimong kolektahon pinaagi sa mga function sa dekorasyon:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Ang mga counter nag-ihap sa mga tawag, ug ang uban nagkolekta sa mga sukatan base sa gidugayon sa mga tawag. Mahimo nimong ipasabut ang mga label alang sa matag usa niini, mahimo’g gamit ang mga kabtangan sa hangyo o tubag. Pananglitan:

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

Sa pananglitan sa ibabaw, pag-klik sa endpoint /collection/10002/item/76 maoy hinungdan sa pag-usbaw sa counter, e.g. cnt_collection{collection = "10002", status = "200"}, ug makuha nimo ang default metrics (alang sa matag endpoint niini nga pananglitan) gikan sa default library:

  • flask_http_request_duration_seconds - Gidugayon sa hangyo sa HTTP sa mga segundo para sa tanan nga mga hangyo sa Flask pinaagi sa pamaagi, agianan ug kahimtang

  • flask_http_request_total - Kinatibuk-ang gidaghanon sa mga hangyo sa HTTP pinaagi sa mga pamaagi ug mga kahimtang

Adunay mga kapilian sa paglaktaw sa pagsubay sa pipila ka mga endpoint, pagrehistro og dugang nga default metrics o paglaktaw sa mga naa sa ibabaw, o paggamit sa parehas nga custom metric sa daghang mga endpoint. Tan-awa README proyekto aron makita kung unsa ang magamit.

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}
    )
)

Ang librarya adunay magamit nga mga extension alang sa sikat nga multiprocessor nga mga librarya sama sa uWSGI ug Gunicorn. Makita usab nimo ang gagmay nga mga pananglitan sa mga kaso sa paggamit sa target, lakip ang mga multiprocessing.

Koleksyon sa mga sukatan

Sama sa gihisgutan sa ibabaw, ang default nga librarya naghatag usa ka endpoint /metrics sa usa ka Flask nga aplikasyon, nga mahimong magsilbi nga target alang sa assembler nga Prometheus.

Sa panig-ingnan sa dashboard sa ibabaw, mahimo nimong i-target ang imong Prometheus sa usa ka Flask app nga adunay mga default nga setting sama niini:

scrape_configs:
  - job_name: 'example'

    dns_sd_configs:
      - names: ['app']
        port: 5000
        type: A
        refresh_interval: 5s

Tan-awa ang tibuok nga pananglitan sa GitHub repository. Nagtuo kini nga makit-an ni Prometheus ang imong mga pananglitan sa aplikasyon sa Flask sa http://app:5000/metrics, diin ang ngalan sa domain sa aplikasyon mahimong masulbad sa daghang mga adres sa IP, sama sa kung nagdagan Kubernetes o Pagdugok sa Docker.

Kung ang pagbutyag sa metrics endpoint nga sama niini dili angay kanimo, tingali tungod kay dili nimo gusto nga tugutan ang eksternal nga pag-access niini, dali nimo kini ma-disable pinaagi sa pagpasa. dalan=Wala sa diha nga instantiating 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)

Unya mahimo nimong gamiton start_http_server(port)sa pag-abli niini nga endpoint sa laing HTTP port, 5099 sa pananglitan sa ibabaw. Sa laing bahin, kung nalipay ka sa endpoint nga naa sa parehas nga Flask app, apan kinahanglan nga usbon ang agianan niini gikan sa /metrics, mahimo nimong ipasa ang usa ka lahi nga URI ingon nga parameter sa agianan o gamit register_endpoint(..)aron i-install kini sa ulahi.

mga pakisayran

Kung nakahukom ka nga sulayan kini, ayaw pagduhaduha sa pag-abli sa usa ka isyu sa GitHub o ibilin ang imong mga komento, feedback, ug mga sugyot!

Бпасибо!

Source: www.habr.com

Idugang sa usa ka comment