Cras Flask Microservices cum Prometheo

A duobus versiculis codicis et applicationis metricos generat, LATRO!

Ut cognoscamus quomodo operatur prometheus_flask_minimi exportatoris exemplum satis est;

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

Hoc totum debes incipias! Addendo importat lineam initialization PrometheusMetrics, metrics erit peto tempus ΠΈ petitionem calculisProponendum ad endpoint /metris Lagena applicatio cum relatus est, ac omnia metrica defalta quam e basi possides Prometheus cliens bibliothecam.

vos can reperio facile ad exemplum in conditorio GitHub qui decurrit exempli gratia Prometheum ΠΈ grafana una cum applicatione demo metri generandi quod aliquid simile hoc spectabit;

Cras Flask Microservices cum Prometheo

Indicem quoque indicem indicibus invenies in README exempla quae in ashboardday apparent, una cum Prometheo queritur qui ashboardas frequentant.

tionibus

Multae optiones conformationis in bibliotheca, specta README exempla eorum breviter explicabimus.

Configuratio fundamentalis supra ostensum est. Sicut creare exempli gratia PrometheusMetrics, invocemus metricsac deinde utere ad metri additiones definiendas, quas vis orando functionibus colligere;

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Calculis computationem vocat, et alii metricam collectam duratione illorum vocat. Titulos pro unoquoque horum definire potes, potentia utens proprietates sive petitiones sive responsiones. Exempli gratia:

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

In exemplo supra strepitando in terminus /collection/10002/item/76 faciam contra incrementi, exempli gratia cnt_collection{collection="10002", status = "200"}, plus habebis defaltam metricam (pro unoquoque termino in hoc exemplo) ex bibliotheca defalta:

  • flask_http_request_duration_seconds - HTTP postulatio durationis in secundis omnibus postulationibus Flask per modum, viam et statum

  • flask_http_request_total - Totalis numerus HTTP petitiones per methodos et statuses

Optiones sunt ut vestigia certarum finium praetermittant, addita metrica defalta stipes vel supra recensita omittas, vel eandem consuetudinem metricam ad plures terminos adhibeas. Reprehendo sicco README quid proiciamus ad available.

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

Bibliotheca opportuna extensiones habet pro bibliothecis popularibus multiplicandis ut uWSGI et Gunicorn. Potes etiam exempla parva invenire casuum usuum iaculisrum, inclusorum multiprocessionum.

Metrica collectio

Ut supra, bibliotheca finem praebet per defaltam /metris in applicatione ampulla, quae pro scopo esse potest Prometheus fabricator.

In ashboardday supra exemplum, Prometheum tuum ut vas applicationis cum default uncinis cum hac configuratione oppugnare posses:

scrape_configs:
  - job_name: 'example'

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

Vide plenum exemplum at GitHub repositoria. Hoc ponit Prometheus in applicatione vasorum tuorum reperire posse exempla http://app:5000/metrics, ubi applicatio nominis domain nomen multiplicibus IP inscriptionibus potentialiter resolvere potuit, exempli gratia cum in currendo Kubernetes aut Versus Docker.

Si hanc rationem metricam exponendo tibi non convenit, fortasse quia non vis externam accessum ad eam permittere, facile transeundo discludere potes. semita = nemo quando creando exemplum 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)

Tum vos can utor start_http_server (portum)alium HTTP portum aperire endpoint; 5099 in exemplo supradicto. Vel, si laetus es cum termino in eodem lagena applicationis, sed debes mutare iter suum. /metris, vel alium URI ad viam parametri transire vel uti register_endpoint(..)ut postea eam install.

References

Si experimentum dare volueris, libenter fluit in GitHub aperire vel tuas commentarios, opiniones et suggestiones relinquere!

Tibi gratias ago?

Source: www.habr.com