فکر کن خسته و کوفته از کار، لپتاپ رو بستی و داری استراحت میکنی، یا اصلاً شب خوابیدی. همون موقع، سرور سایتت به هر دلیلی کم میاره و خاموش میشه! مشتری میاد تو سایت خرید کنه، با ارور ۵۰۲ یا ۴۰۴ مواجه میشه و میذاره میره. تو کی میفهمی؟ فردا صبح که بیدار میشی و میبینی چقدر ورودی و پول از دست دادی!
فاجعهست، نه؟ اما نیازی نیست پول های قلمبه به سرویس های خارجی مانیتورینگ بدی (که تازه خیلی هاشون هم ما رو تحریم کردن یا سخت پیامک میفرستن). امروز میخوایم خودمون دست به کار بشیم و با چند خط کد پایتون، یه سیستم «گوشبهزنگ» بسازیم که مثل عقاب حواسش به سایتت باشه و اگه سایتت خوابید، تو ثانیه برات توی تلگرام یا پیامک اخطار بفرسته.
ابزارهای لازم برای این کار
برای این کار به چیز عجیبی نیاز نداریم:
-
پایتون (Python): مغز متفکر سیستم.
-
کتابخونه
requests: برای اینکه به سایتمون درخواست بفرستیم و ببینیم زندهست یا نه. -
یه بات تلگرام یا پنل پیامک: برای اینکه خبر خرابی رو به گوشمون برسونه.
قدم اول: چک کردن وضعیت سایت
اول از همه باید یاد بگیریم چطور وضعیت سایت رو چک کنیم. در دنیای وب، اگه همه چیز ردیف باشه، سرور به ما کد وضعیت 200 (OK) رو برمیگردونه. اگه کد چیزی غیر از این باشه (مثلاً 500 یا 503)، یعنی یه جای کار میلنگه.
بیا کد سادهش رو ببینیم:
import requests
def check_website(url):
try:
response = requests.get(url, timeout=10)
if response.status_code == 200:
return True
else:
return False
except requests.exceptions.RequestException:
# اگه کلاً سایت بالا نیومد و ارور تایماوت یا اتصال داد
return False
قدم دوم: مجهز کردن سیستم به آلارم تلگرام
خب، حالا فرض کنیم سایت خراب شد، چطور بفهمیم؟ راحتترین راه، ساختن یه بات تلگرامه. ۱. برو سراغ BotFather@ تو تلگرام و یه بات بساز و توکن (Token) رو بردار. ۲. با بات خودت یه چت شروع کن و Chat ID خودت رو پیدا کن (میتونی از بات هایی مثل userinfobot@ کمک بگیری).
حالا این تابع رو اضافه میکنیم تا پایتون بتونه به تلگرام ما پیام بفرسته:
def send_telegram_alert(message):
token = "توکن_بات_شما"
chat_id = "چت_آیدی_شما"
url = f"https://api.telegram.org/bot{token}/sendMessage"
payload = {
"chat_id": chat_id,
"text": message
}
try:
requests.post(url, json=payload)
except Exception as e:
print(f"ای بابا! پیام تلگرام ارسال نشد: {e}")
نکته: اگه سرورت ایرانه و تلگرام فیلتره، ممکنه این بخش کار نکنه. برای حلش یا باید از پروکسی روی کدت استفاده کنی، یا بری سراغ آپشن بعدی یعنی پیامک!
قدم دوم: آلارم پیامکی (واسه وقتایی که اینترنت نداری)
تلگرام خوبه، ولی اگه بسته اینترنتمون تموم شده باشه یا خواب باشیم و نت گوشی خاموش باشه چی؟ اینجاست که پیامک نجاتدهندهست. شما میتونی از هر پنل پیامکی ایرانی (مثل کاوهنگار، ملیپيامک و...) استفاده کنی. همهشون یه مستندات API ساده دارن.
مثلاً کدی شبیه به این میشه:
def send_sms_alert(message):
# این یه مثال فرضیه، باید بر اساس مستندات پنل خودت تغییرش بدی
api_url = "https://api.kavenegar.com/v1/YOUR_API_KEY/sms/send.json"
payload = {
"receptor": "0912XXXXXXX", # شماره خودت
"message": message
}
requests.post(api_url, data=payload)
قدم سوم: سر هم کردن قطعات و ساخت لوپِ بیدارباش
حالا وقتشه همهچیز رو به هم وصل کنیم. ما میخوایم سیستممون تو یه حلقه ابدی، هر ۵ دقیقه یکبار سایت رو چک کنه. اگه سایت خراب بود، بهمون خبر بده. برای اینکه هی پشت سر هم هرزنامه (اسپم) نفرسته و گوشی مون رو منفجر نکنه، یه شرط میذاریم که فقط وقتی وضعیت سایت «تغییر» کرد پیام بده.
import time
WEBSITE_URL = "https://yourwebsite.com"
IS_SITE_DOWN = False # وضعیت قبلی سایت رو نگه میداره
print("سیستم مانیتورینگ 'گوشبهزنگ' شروع به کار کرد... 🚀")
while True:
is_up = check_website(WEBSITE_URL)
if not is_up and not IS_SITE_DOWN:
# سایت تازه خراب شده!
msg = f"🚨 هشدار! سایت {WEBSITE_URL} از دسترس خارج شده! بدو یه چک کن."
print(msg)
send_telegram_alert(msg)
send_sms_alert(msg)
IS_SITE_DOWN = True # وضعیت رو تغییر میدیم که هی پیام تکراری نیاد
elif is_up and IS_SITE_DOWN:
# سایت دوباره زنده شد!
msg = f"✅ خدا رو شکر! سایت {WEBSITE_URL} دوباره بالا اومد و ردیفه."
print(msg)
send_telegram_alert(msg)
send_sms_alert(msg)
IS_SITE_DOWN = False
# هر ۳۰۰ ثانیه (۵ دقیقه) یکبار چک کن
time.sleep(300)
جمع بندی
یادت باشه: این کد رو نباید روی کامپیوتر شخصی خودت اجرا کنی؛ چون اگه لپتاپت رو ببندی یا اینترنتت قطع بشه، سیستم مانیتورینگ هم میخوابه! بهترین کار اینه که یه سرور مجازی (VPS) ارزانقیمت بگیری، کدت رو با ابزارهایی مثل nohup یا pm2 اونجا به صورت ۲۴ ساعته بکگراند اجرا کنی تا خیالت راحتِ راحت باشه.
نظرات کاربران (0)