تا حالا شده به این فکر کنید که تو دل سرورتون دقیقا چه خبره؟ چطوری می‌تونیم مثل یه رادار دقیق، هر درخواست (Request) و پکتی که سمت وب‌سایتمون میاد رو زیر نظر بگیریم و بشمریم؟

امروز می‌خوایم دقیقاً همین کار رو با یکی از خفن‌ترین ابزارهای دنیای مانیتورینگ یعنی پرومتئوس (Prometheus) و زبان شیرین پایتونانجام بدیم.

قضیه از چه قراره؟ 

وقتی یه اپلیکیشن یا وب‌سایت رو می‌بریم روی سرور، اگه مانیتورینگ نداشته باشیم، انگار داریم تو تاریکی مطلق رانندگی می‌کنیم! پرومتئوس مثل یه چراغ‌قوه و یه رادار خفن عمل می‌کنه. کارش اینه که به صورت دوره‌ای (مثلاً هر ۱۰ ثانیه) به اپلیکیشن ما سر می‌زنه و یه سری آمار و ارقام (Metrics) رو جمع می‌کنه.

ما می‌خوایم یه برنامه ساده پایتونی بنویسیم که هر بار کسی سایتمون رو باز کرد، یه دونه به شمارنده‌ی ما اضافه بشه. به این شمارنده‌ها تو پرومتئوس میگن Counter.

ابزارهایی که نیاز داریم

برای این آموزش، از فریمورک محبوب Flask برای بالا آوردن وب‌سرور و از کتابخونه رسمی پرومتئوس برای پایتون استفاده می‌کنیم. اول از همه، ترمینال رو باز کنید و این دو تا کتابخونه رو نصب کنید:

pip install Flask prometheus-client

دست به کد بشیم!

حالا یه فایل پایتون بسازید (مثلاً به اسم app.py) و کدهای زیر رو توش کپی کنید. خط به خط براتون توضیح دادم که چه اتفاقی داره میفته:

from flask import Flask, request
from prometheus_client import Counter, generate_latest, CONTENT_TYPE_LATEST

app = Flask(__name__)

# ساختن یه شمارنده (Counter) برای شمردن ریکوئست‌ها
# اسم متریک رو گذاشتیم: web_requests_total
REQUESTS_COUNTER = Counter(
    'web_requests_total', 
    'Total number of web requests received'
)

@app.route('/')
def home():
    # هر بار که کسی این صفحه رو باز کنه، یکی به شمارنده اضافه میشه
    REQUESTS_COUNTER.inc()
    return "<h1>سلام! به رادار پنهان سرور خوش اومدی 🚀</h1>"

@app.route('/metrics')
def metrics():
    # این همون آدرسیه که پرومتئوس میاد ازش دیتاها رو می‌خونه
    return generate_latest(), 200, {'Content-Type': CONTENT_TYPE_LATEST}

if __name__ == '__main__':
    # روشن کردن سرور روی پورت 5000
    app.run(host='0.0.0.0', port=5000)

تست و راه‌اندازی رادار

خب، حالا وقتشه که برنامه‌مون رو اجرا کنیم. تو ترمینال بزنید:

python app.py

حالا مرورگرتون رو باز کنید و برید به آدرس http://localhost:5000. با یه پیام خوش‌آمدگویی روبه‌رو میشید. چند بار صفحه رو رفرش (Refresh) کنید تا چند تا درخواست سمت سرور فرستاده بشه.

حالا بخش جذاب ماجرا! برید به آدرس http://localhost:5000/metrics. چیزی که می‌بینید یه عالمه متن و عدد عجیبه. اما اگه یکم دقت کنید، لابه‌لای اون‌ها این خط رو پیدا می‌کنید:

# HELP web_requests_total Total number of web requests received
# TYPE web_requests_total counter
web_requests_total 5.0

این یعنی سرور شما ۵ تا درخواست دریافت کرده و رادار شما داره به درستی کار می‌کنه

جمع بندی

تو دنیای واقعی، ما خودمون این اعداد رو از تو مرورگر نمی‌خونیم. بلکه سرور Prometheus رو کانفیگ می‌کنیم تا خودش اتوماتیک بیاد این آدرس /metrics رو بخونه و دیتاها رو تو دیتابیس خودش ذخیره کنه.

بعدش هم با یه ابزار جذاب به اسم Grafana این دیتاها رو تبدیل می‌کنیم به داشبوردها و نمودارهای گرافیکی زیبا.

اضافه کردن مانیتورینگ به برنامه‌های پایتونی به همین سادگیه. از اینجا به بعد می‌تونید متریک‌های خفن‌تری مثل زمان پاسخگویی سرور (Histogram) یا تعداد کاربرای آنلاین (Gauge) رو هم بهش اضافه کنید.