Monitro microwasanaethau fflasg gyda Prometheus

Mae cwpl o linellau o god ac mae eich cais yn cynhyrchu metrigau, waw!

Er mwyn deall sut mae prometheus yn gweithio_fflasg_allforiwr enghraifft fach iawn sy'n ddigon:

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

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

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

Dyna'r cyfan sydd ei angen arnoch i ddechrau! Trwy ychwanegu mewnforiad a llinell ar gyfer ymgychwyn PrometheusMetrig, byddwch yn cael metrigau hyd y cais ΠΈ cownteri ceisiadauyn cael ei arddangos yn y diweddbwynt /metreg yr ap Fflasg y mae wedi'i gofrestru ag ef, ynghyd ag unrhyw fetrigau diofyn a gewch o'r sylfaen Llyfrgell cleientiaid Prometheus.

gallwch ddod o hyd enghraifft hawdd i'w defnyddio yn ystorfa GitHub sy'n lansio'r enghraifft Prometheus ΠΈ Grafana ynghyd Γ’ chais demo ar gyfer cynhyrchu metrigau a fyddai'n edrych yn rhywbeth fel hyn:

Monitro microwasanaethau fflasg gyda Prometheus

Byddwch hefyd yn dod o hyd i restr o ddangosyddion yn README enghreifftiau sy'n ymddangos yn y dangosfwrdd, ynghyd ag ymholiadau Prometheus sy'n llenwi'r dangosfyrddau.

addasiad

Mae gan y llyfrgell lawer o opsiynau ffurfweddu, edrychwch ar README taflu eu henghreifftiau gydag esboniad byr.

Dangosir y cyfluniad sylfaenol uchod. Dim ond ar unwaith PrometheusMetrig, gadewch i ni ei alw metrigau, ac yna ei ddefnyddio i ddiffinio metrigau ychwanegol rydych chi am eu casglu trwy swyddogaethau addurno:

  • @metrics.counter(..)

  • @metrics.gauge(..)

  • @metrics.summary(..)

  • @metrics.histogram(..)

Mae'r cownteri yn cyfrif galwadau, ac mae'r gweddill yn casglu metrigau yn seiliedig ar hyd y galwadau hynny. Gallwch ddiffinio labeli ar gyfer pob un o'r rhain, gan ddefnyddio priodweddau cais neu ymateb o bosibl. Er enghraifft:

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

Yn yr enghraifft uchod, cliciwch ar y diweddbwynt /casgliad/10002/eitem/76 bydd yn achosi'r cownter i gynyddran, e.e. cnt_collection{collection = "10002", status = "200"}, a byddwch yn cael y metrigau rhagosodedig (ar gyfer pob pwynt terfyn yn yr enghraifft hon) o'r llyfrgell ddiofyn:

  • flask_http_request_duration_seconds - Hyd cais HTTP mewn eiliadau ar gyfer pob cais Fflasg yn Γ΄l dull, llwybr a statws

  • flask_http_request_total β€” Cyfanswm nifer y ceisiadau HTTP yn Γ΄l dulliau a statws

Mae yna opsiynau i hepgor olrhain rhai pwyntiau terfyn, cofrestru metrigau diofyn ychwanegol neu hepgor y rhai uchod, neu gymhwyso'r un metrig arferol i bwyntiau terfyn lluosog. Gwiriwch allan README prosiect i weld beth sydd ar gael.

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

Mae gan y llyfrgell estyniadau defnyddiol ar gyfer llyfrgelloedd amlbroseswyr poblogaidd fel uWSGI a Gunicorn. Gallwch hefyd ddod o hyd i enghreifftiau bach o achosion defnydd targed, gan gynnwys rhai amlbrosesu.

Casgliad o fetrigau

Fel y soniwyd uchod, mae'r llyfrgell ddiofyn yn darparu pwynt terfyn /metreg mewn cais Fflasg, a all wasanaethu fel targed ar gyfer y cynullydd Prometheus.

Yn yr enghraifft dangosfwrdd uchod, gallwch dargedu eich Prometheus i ap Fflasg gyda gosodiadau diofyn fel hyn:

scrape_configs:
  - job_name: 'example'

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

Gweler yr enghraifft lawn yn Storfeydd GitHub. Mae hyn yn cymryd yn ganiataol y gall Prometheus ddod o hyd i'ch enghreifftiau cais Fflasg yn http://app:5000/metrics, lle gallai enw parth y cais o bosibl ddatrys i gyfeiriadau IP lluosog, megis wrth redeg i mewn Kubernetes neu Swarm Dociwr.

Os nad yw datgelu'r pwynt terfyn metrigau fel hyn yn addas i chi, efallai oherwydd nad ydych am ganiatΓ‘u mynediad allanol iddo, gallwch ei analluogi'n hawdd trwy basio llwybr=Dim wrth ar unwaith PrometheusMetrig.

from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app, path=None)

...

metrics.start_http_server(5099)

Yna gallwch chi ddefnyddio cychwyn_http_gweinydd(port)i agor y diweddbwynt hwn ar borthladd HTTP gwahanol, 5099 yn yr enghraifft uchod. Fel arall, os ydych chi'n hapus gyda'r diweddbwynt yn yr un app Fflasg, ond angen newid ei lwybr /metreg, gallwch naill ai basio URI gwahanol fel y paramedr llwybr neu ddefnyddio cofrestr_diweddbwynt(..)i'w osod yn ddiweddarach.

cyfeiriadau

Os penderfynwch roi cynnig arni, mae croeso i chi agor mater ar GitHub neu adael eich sylwadau, adborth ac awgrymiadau!

Diolch yn fawr!

Ffynhonnell: hab.com

Ychwanegu sylw