โค้ดสองสามบรรทัดและแอปพลิเคชันของคุณสร้างเมตริก ว้าว!
เพื่อให้เข้าใจว่าโพรมีธีอุสทำงานอย่างไร_กระติกน้ำ_ผู้ส่งออก ตัวอย่างขั้นต่ำก็เพียงพอแล้ว:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
นั่นคือทั้งหมดที่คุณต้องเริ่มต้น! โดยเพิ่มการนำเข้าและบรรทัดสำหรับการเริ่มต้น โพรเมตริกคุณจะได้รับเมตริก ระยะเวลาขอ и ขอเคาน์เตอร์แสดงที่ปลายทาง /ตัวชี้วัด แอพ Flask ที่ลงทะเบียนไว้ รวมถึงเมตริกเริ่มต้นที่คุณได้รับจากฐาน
คุณสามารถหา
คุณจะพบรายการตัวบ่งชี้ใน
การตั้งค่า
ห้องสมุดมีตัวเลือกการกำหนดค่ามากมาย ลองดูที่
การกำหนดค่าพื้นฐานแสดงไว้ด้านบน เพียงแค่ยกตัวอย่าง โพรเมตริกขอเรียกมันว่า ตัวชี้วัดแล้วใช้เพื่อกำหนดเมตริกเพิ่มเติมที่คุณต้องการรวบรวมโดยการตกแต่งฟังก์ชัน:
-
@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
ในตัวอย่างด้านบน ให้คลิกที่จุดสิ้นสุด /collection/10002/item/76 จะทำให้ตัวนับเพิ่มขึ้นเช่น cnt_collection{collection = "10002", สถานะ = "200"}และคุณจะได้รับเมตริกเริ่มต้น (สำหรับแต่ละจุดสิ้นสุดในตัวอย่างนี้) จากไลบรารีเริ่มต้น:
-
flask_http_request_duration_seconds
- ระยะเวลาคำขอ HTTP เป็นวินาทีสำหรับคำขอ Flask ทั้งหมดตามวิธีการ เส้นทาง และสถานะ -
flask_http_request_total
— จำนวนคำขอ HTTP ทั้งหมดตามวิธีการและสถานะ
มีตัวเลือกในการข้ามการติดตามปลายทางบางจุด ลงทะเบียนเมตริกเริ่มต้นเพิ่มเติมหรือข้ามรายการข้างต้น หรือใช้เมตริกที่กำหนดเองเดียวกันกับปลายทางหลายรายการ เช็คเอาท์
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
ดูตัวอย่างเต็มได้ที่
หากการเปิดเผยปลายทางเมตริกเช่นนี้ไม่เหมาะกับคุณ อาจเป็นเพราะคุณไม่ต้องการอนุญาตการเข้าถึงจากภายนอก คุณสามารถปิดใช้งานได้โดยผ่าน เส้นทาง = ไม่มี เมื่อยกตัวอย่าง โพรเมตริก.
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 ในตัวอย่างข้างต้น อีกทางหนึ่ง หากคุณพอใจกับจุดสิ้นสุดที่อยู่ในแอป Flask เดียวกัน แต่จำเป็นต้องเปลี่ยนเส้นทางจาก /ตัวชี้วัดคุณสามารถส่ง URI อื่นเป็นพารามิเตอร์เส้นทางหรือใช้ register_endpoint(..)เพื่อติดตั้งในภายหลัง
การอ้างอิง
-
rycus86/prometheus_flask_exporter - ผู้ส่งออกขวดนี้สำหรับ Prometheus -
prometheus-ขวด-ส่งออก README - การใช้งาน ตัวอย่าง และตัวเลือกการกำหนดค่า -
ตัวอย่างผู้ส่งออกขวดโพรมีธีอุส - ตัวอย่างการกำหนดค่าการตรวจสอบแอปพลิเคชัน Flask ในรูปแบบต่างๆ -
prometheus-flask-exporter บน PyPI — โครงการนี้อยู่ใน PyPI -
โพร/client_python - ไลบรารีไคลเอนต์ Prometheus อย่างเป็นทางการสำหรับ Python
หากคุณตัดสินใจที่จะลองใช้ อย่าลังเลที่จะเปิดประเด็นบน GitHub หรือแสดงความคิดเห็น ข้อเสนอแนะ และข้อเสนอแนะของคุณ!
ขอบคุณ!
ที่มา: will.com