Prometheus-тай Flask Microservices-ийг хянах

Хэд хэдэн мөр код, таны програм хэмжүүр үүсгэдэг, хөөе!

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 и Графана Демо програмын хамт дараах байдлаар харагдах хэмжигдэхүүнүүдийг үүсгэх болно:

Prometheus-тай Flask Microservices-ийг хянах

Та мөн үзүүлэлтүүдийн жагсаалтыг эндээс олох болно 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/зүйл/76 жишээ нь тоолуурыг нэмэгдүүлэхэд хүргэдэг cnt_collection{цуглуулга = "10002", статус = "200"}, мөн та өгөгдмөл сангаас өгөгдмөл хэмжигдэхүүнүүдийг (энэ жишээний төгсгөлийн цэг бүрийн хувьд) авах болно:

  • flask_http_request_duration_seconds — Арга, зам, статусаар бүх колбонд зориулсан 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 дээрх жишээнд. Эсвэл, хэрэв та төгсгөлийн цэг нь ижил колбонд байгаадаа сэтгэл хангалуун байгаа ч түүний замыг өөрчлөх хэрэгтэй. / хэмжигдэхүүн, та өөр URI-г замын параметр болгон дамжуулах эсвэл ашиглаж болно бүртгэлийн_төгсгөл(..)дараа суулгахын тулд.

лавлагаа

Хэрэв та үүнийг туршиж үзэхээр шийдсэн бол GitHub дээр асуудал нээх эсвэл өөрийн санал хүсэлт, санал хүсэлт, санал хүсэлтээ үлдээгээрэй!

Баярлалаа!

Эх сурвалж: www.habr.com

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster