บทนำ

ในคู่มือทีละขั้นตอนนี้ คุณจะสร้าง Telegram-Bot ที่สามารถใช้งานได้จริง เพื่อตรวจสอบรายการ Proxy โดยอัตโนมัติ วัดความล่าช้า ตรวจสอบการเปลี่ยน IP หลังการหมุนเวียน ตรวจสอบตำแหน่งภูมิศาสตร์ผ่านบริการ ip-api.com และส่งการแจ้งเตือนใน Telegram เมื่อพบปัญหาหรือการเสื่อมสภาพ เราจะเริ่มจากแนวคิดไปจนถึงการติดตั้งบน VPS โดยมีการเริ่มทำงานอัตโนมัติ การบันทึกใน SQLite และแดชบอร์ดที่แสดงความสำเร็จและการส่งออกล็อก

คู่มือนี้เหมาะสำหรับผู้เริ่มต้นและยังมีเนื้อหาสำหรับผู้ที่มีความเชี่ยวชาญ หากคุณไม่เคยเขียน Bot มาก่อน ไม่ต้องกังวล เพราะเราจะสอนแต่ละขั้นตอนพร้อมอธิบายว่ามันคืออะไรและจะตรวจสอบผลลัพธ์อย่างไร เมื่อสิ้นสุดการเรียนรู้ คุณจะมีเครื่องมือที่มั่นคงสำหรับการติดตาม Proxy โดยทำงานตามกำหนดทุก 5-15 นาที สามารถจัดกลุ่ม Proxy ตามภูมิภาคและประเภท และยังส่งการแจ้งเตือนที่มีข้อมูลใน Telegram ของคุณได้

ก่อนที่คุณจะเริ่ม มันจะดีมากถ้าคุณรู้วิธีเปิดเทอร์มินัล วิธีการติดตั้งโปรแกรม และวิธีการสร้างโฟลเดอร์และไฟล์ ทุกอย่างอื่นเราจะอธิบายให้ฟัง ทั้งนี้การทำตามขั้นตอนทั้งหมดจะใช้เวลาประมาณ 4 ถึง 8 ชั่วโมง รวมถึงการตั้งค่า สิ่งแวดล้อม การเขียนโค้ด ทดสอบ และติดตั้ง หากคุณมี VPS และมีทักษะพื้นฐานใน Python จะใช้เวลาน้อยกว่านั้น

เมื่อสิ้นสุดคู่มือ คุณจะได้: Telegram-Bot ที่ทำงานได้จริงบน aiogram 3 โมดูลการตรวจสอบแบบอะซิงโครนัสบน aiohttp ตัวจัดการงาน APScheduler สำหรับงานที่เป็นช่วงๆ ฐานข้อมูล SQLite ที่มีล็อกและสถิติ แดชบอร์ดเว็บที่แสดงตัวชี้วัดหลักและการส่งออก CSV คู่มือการบำรุงรักษาและการขยายฟังก์ชันการทำงาน

เคล็ดลับ: ควรทำตามคำแนะนำทีละขั้นตอน ไม่ข้ามขั้นตอน หลังจากแต่ละขั้นตอน เราได้เพิ่มการตรวจสอบเพื่อให้คุณมั่นใจว่าทุกอย่างทำงานได้จริง

การเตรียมตัวเบื้องต้น

ก่อนที่จะเริ่มเขียนโค้ด ให้เตรียมอุปกรณ์และสิ่งแวดล้อมให้พร้อม เพื่อหลีกเลี่ยงความผิดพลาดที่ไม่จำเป็นและประหยัดเวลา

เครื่องมือ โปรแกรม และการเข้าถึงที่จำเป็น

  • บัญชี Telegram สำหรับสร้าง Bot และรับการแจ้งเตือน
  • VPS หรือคอมพิวเตอร์ที่ใช้ Linux (Ubuntu 22.04 หรือ 24.04 แนะนำ) Windows และ macOS ก็ได้ แต่การติดตั้งจะสาธิตบน Ubuntu
  • Python 3.11 หรือใหม่กว่า เราจะตรวจสอบเวอร์ชันด้วยคำสั่ง python3 --version
  • เทอร์มินัลและสิทธิพื้นฐาน sudo สำหรับติดตั้งแพ็คเกจ
  • รายการ Proxy สำหรับการติดตามในรูปแบบ host:port พร้อมชื่อผู้ใช้และรหัสผ่านถ้าต้องการ รองรับ HTTP, HTTPS และ SOCKS5

ข้อกำหนดทางระบบ

  • 1 CPU, RAM 512–1024 MB เพียงพอสำหรับ Proxy 50–200 ตัว โดยเว้นช่วงดำเนินการ 5–15 นาที หากมี Proxy หลายพันตัว แนะนำใช้ 2 CPU และ RAM 2 GB
  • พื้นที่ว่างในดิสก์ตั้งแต่ 1 GB SQLite มีน้ำหนักเบา แต่ล็อกจะเพิ่มขึ้น
  • ต้องสามารถเข้าถึงอินเทอร์เน็ตได้ เปิดการเข้าถึง API ของ Telegram และ Proxy ของคุณ จำเป็นต้องเข้าใช้งาน HTTP ออกไปที่ ip-api.com

สิ่งที่ต้องติดตั้ง

  • Python 3.11+ และ venv สำหรับการสร้างสภาพแวดล้อมเสมือน
  • pip สำหรับการติดตั้ง dependencies
  • ไลบรารี: aiogram เวอร์ชัน 3, aiohttp, APScheduler, aiosqlite, python-dotenv (สำหรับการตั้งค่าที่สะดวก), uvloop (มีตัวเลือกสำหรับ Linux), yarl (บ่อยที่มีในฐานะ dependencies)

การสำรองข้อมูล

ในตอนแรก การสำรองข้อมูลไม่ใช่เรื่องสำคัญมากนัก หลังจากที่ Bot เริ่มทำงาน เราจะต้องตั้งค่าการสำรองฐานข้อมูล SQLite ที่ง่ายต่อการบันทึกล็อกและการตั้งค่า จะทำให้สามารถย้อนกลับได้หากมีการอัปเดตที่ผิดพลาดหรือไฟล์เสียหาย

⚠️ คำเตือน: SQLite คือไฟล์เดียว ถ้ามีความเสียหายเกิดขึ้น เนื่องจากการปิดไฟฟ้าอย่างไม่คาดคิด คุณอาจสูญเสียการบันทึกที่ใหม่อยู่ได้ ดังนั้นใน VPS ควรเปิดใช้งานการสำรองข้อมูลไฟล์ฐานข้อมูลอัตโนมัติต่อวันด้วย cron หรือ systemd timers เราจะแสดงสคริปต์ที่ง่ายในการทำสิ่งนี้ในภายหลัง

แนวคิดพื้นฐาน

เพื่อไม่ให้สับสน เราจะพูดคุยเกี่ยวกับข้อกำหนดและหลักการทำงานที่สำคัญ

  • Proxy (พร็อกซี) — เซิร์ฟเวอร์กลางที่ทำให้คำขอของคุณผ่านไปได้ มีประเภท HTTP, HTTPS และ SOCKS5 บาง Proxy ต้องการการยืนยันตัวตนด้วยชื่อผู้ใช้:รหัสผ่าน หรือทำงานตาม IP Binding
  • Latency (ความล่าช้า) — เวลาที่ใช้ในการส่งคำขอผ่าน Proxy และรับคำตอบ วัดกันในมิลลิวินาที ยิ่งน้อยยิ่งดี
  • การหมุน IP — ชุด Proxy บางตัวจะเปลี่ยนที่อยู่ IP ภายนอกเป็นระยะๆ Bot ของเราต้องติดตามการเปลี่ยนแปลงเหล่านี้และแจ้งด้วยหาก IP เปลี่ยนไม่คาดคิดหรือไม่ตรงตามภูมิภาคที่คาดไว้
  • GeoLocation (ภูมิศาสตร์) — ประเทศ เมือง และผู้ให้บริการ IP ที่อยู่ เราจะใช้บริการ ip-api.com เพื่อระบุ IP ซึ่งจะช่วยให้คุณมั่นใจว่า Proxy ของคุณตั้งอยู่ในประเทศที่ถูกต้อง
  • Degradation (การเสื่อมสภาพ) — Proxy ตอบสนองได้ แต่ทำงานช้ากว่าปกติหรือมีข้อผิดพลาดบ่อย เรจิสเตอร์ค่า DOWN (ไม่สามารถเข้าถึงได้อย่างสิ้นเชิง) และ DEGRADED (ทำงานอยู่แต่ไม่ดี)
  • aiogram 3 — ไลบรารีที่ทันสมัยสำหรับ Telegram-Bot แบบอะซิงโครนัส ใช้งานง่าย รวดเร็ว รองรับฟีเจอร์ของ Telegram ที่มีอย่างครบถ้วนในปี 2026
  • aiohttp — การส่งคำขอ HTTP แบบอะซิงโครนัสพร้อมการตั้งค่าเวลาและรองรับ Proxy
  • APScheduler — ตัวจัดการตารางงานที่จะเรียกใช้งานการตรวจสอบตามกำหนดทุก ๆ N นาที
  • SQLite — ฐานข้อมูลที่ฝังในตัว มีไฟล์เดียวทำงานเร็วและไม่จำเป็นต้องติดตั้งเซิร์ฟเวอร์ เหมาะสำหรับล็อกในท้องถิ่นและสถิติ

หลักการทำงานของ Bot คือ ตามกำหนดเวลา Bot จะนำรายการ Proxy, ทำการสอบถามผลอย่างรวดเร็วผ่าน Proxy แต่ละรายการ, วัดเวลา, ดึง IP ภายนอกและข้อมูลภูมิศาสตร์ บันทึกผลใน SQLite หาก Proxy ล้มเหลวหรือเสื่อมสภาพอย่างมีนัยสำคัญ Bot จะสร้างข้อความแจ้งเตือนที่ชัดเจนและส่งไปใน Telegram นอกจากนี้ Bot ยังตอบสนองต่อคำสั่งจากแชท: แสดงสถานะ, เวลาทำงาน, ข้อผิดพลาดล่าสุด, ส่งออก CSV, เพิ่มหรือตัดการเชื่อมต่อ Proxy และเปลี่ยนระยะเวลา

เคล็ดลับ: เพื่อไม่ให้เกินข้อจำกัดของ ip-api.com (ปกติ 45 คำขอต่อหนึ่งนาทีสำหรับระดับฟรี) เราจะใช้ระบบหน่วยความจำสำรองข้อมูลภูมิศาสตร์และจำกัดการเรียกดู HTTP พร้อมกัน ซึ่งจะไม่ทำให้การทำงานช้าลง แต่จะช่วยป้องกันการบล็อก

ขั้นตอนที่ 1: สร้าง Bot ใน Telegram และตั้งค่าการเข้าถึง

เป้าหมายของขั้นตอน

รับ Token ของ Telegram-Bot และสร้างแชทส่วนตัวสำหรับการแจ้งเตือน เพื่อที่ Bot จะสามารถส่งข้อความเกี่ยวกับเหตุการณ์ได้ในภายหลัง

คำแนะนำทีละขั้นตอน

  1. เปิดแอป Telegram บนโทรศัพท์หรือคอมพิวเตอร์ของคุณ
  2. ในแถบค้นหา ให้พิมพ์ BotFather และเปิดบัญชีอย่างเป็นทางการที่มีเครื่องหมายถูกสีน้ำเงิน
  3. กด Start หรือพิมพ์คำสั่ง /start จากนั้นพิมพ์ /newbot
  4. คิดชื่อ Bot ขึ้นมา เช่น ProxyMonitorBot
  5. คิดชื่อผู้ใช้อย่างเฉพาะตัวสำหรับ Bot ซึ่งจะต้องจบด้วย bot เช่น proxy_monitor_helper_bot
  6. คัดลอก Token ที่ออกให้ โดยลักษณะจะเป็นชุดสัญลักษณ์และตัวเลขที่แยกด้วยเครื่องหมายทวิภาค
  7. สร้างแชทส่วนตัวหรือกลุ่มที่ Bot จะส่งการแจ้งเตือน ADD Bot เพิ่มเข้าไปในนั้น
  8. พิมพ์ข้อความใด ๆ ในแชทเพื่อให้แชทปรากฏในรายการสำหรับบัญชีของคุณ
  9. เปิดการสนทนากับ Bot แล้วกด Start เพื่อเปิด Bot

จุดสำคัญ: เก็บ Token ไว้เป็นความลับ อย่าเปิดเผยให้ใคร หาก Token รั่วไหลผู้ไม่หวังดีอาจเข้าควบคุม Bot ของคุณได้ หาก Token ได้รับการรั่วไหลใน BotFather ให้เลือก /revoke เพื่อรับ Token ใหม่

เคล็ดลับ: สร้างกลุ่มเฉพาะสำหรับการแจ้งเตือนซึ่งมีเพียงคุณและ Bot เท่านั้น เพื่อให้การแจ้งเตือนไม่สูญหายท่ามกลางข้อความอื่น ๆ

✅ ตรวจสอบ: คุณได้ Token และเพิ่ม Bot เข้าไปในแชทที่ต้องการ Bot จะตอบสนองต่อคำสั่ง /start ในการสนทนาเฉพาะของคุณ

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: Bot ไม่ตอบสนองต่อ /start สาเหตุ: คุณไม่ได้กด Start หรือ Token ที่ป้อนในโค้ดไม่ถูกต้อง แนวทางแก้ไข: ตรวจสอบว่า Bot ถูกเปิดใช้งาน และต่อมาจะระบุ Token ถูกต้องในไฟล์ .env
  • ปัญหา: ไม่เห็น chat ID สาเหตุ: เรายังไม่ได้รับมัน แนวทางแก้ไข: ในภายหลังคำสั่งใน Bot จะโชว์ chat_id โดยอัตโนมัติ

ขั้นตอนที่ 2: เตรียมสิ่งแวดล้อม Python และโครงสร้างโปรเจ็กต์

เป้าหมายของขั้นตอน

สร้างโฟลเดอร์โปรเจ็กต์ที่ทำงานได้ สร้างสภาพแวดล้อมเสมือน Python 3.11+ ติดตั้ง dependencies และตั้งค่าการควบคุม

คำแนะนำทีละขั้นตอน

  1. เปิดเทอร์มินัลบนเครื่องของคุณหรือเชื่อมต่อไปยัง VPS ผ่าน SSH
  2. ตรวจสอบเวอร์ชันของ Python ด้วยคำสั่ง: python3 --version หากเวอร์ชันต่ำกว่า 3.11 ให้ติดตั้งเวอร์ชันล่าสุด
  3. บน Ubuntu ให้ดำเนินการ: sudo apt update; sudo apt install -y python3.11 python3.11-venv python3-pip
  4. สร้างโฟลเดอร์โปรเจ็กต์: mkdir proxy-monitor-bot; cd proxy-monitor-bot
  5. สร้างสภาพแวดล้อมเสมือน: python3.11 -m venv .venv
  6. เปิดใช้งานสภาพแวดล้อม: source .venv/bin/activate
  7. อัปเดต pip: pip install --upgrade pip
  8. ติดตั้ง dependencies: pip install aiogram aiohttp aiosqlite APScheduler python-dotenv uvloop
  9. สร้างโครงสร้างโฟลเดอร์: mkdir app app/modules app/db app/bot app/web
  10. สร้างไฟล์: touch app/__init__.py app/config.py app/main.py app/modules/proxy_checker.py app/db/models.py app/db/migrations.py app/bot/handlers.py app/bot/notifications.py app/scheduler.py app/web/server.py .env .env.example README.md

การกำหนดค่าพื้นฐาน

เปิดไฟล์ .env และเพิ่มคีย์ (เปลี่ยนค่าให้เป็นของคุณ):

BOT_TOKEN=โทเคนของคุณจาก BotFather TELEGRAM_CHAT_ID=หมายเลขหรือเว้นว่าง DB_PATH=./data/monitor.db PROBE_TIMEOUT=8 PROBE_RETRIES=2 CHECK_INTERVAL_MINUTES=10 GEO_CACHE_TTL_HOURS=24 IP_API_URL=http://ip-api.com/json PROXY_CONCURRENCY=20 GEO_CONCURRENCY=10 DASHBOARD_HOST=0.0.0.0 DASHBOARD_PORT=8080

คัดลอก .env ไป .env.example และลบข้อมูลที่เป็นความลับ เพื่อให้สะดวกในการแบ่งปันโปรเจ็กต์โดยไม่ต้องมี Token

เคล็ดลับ: เก็บไฟล์ .env ไว้นอกระบบควบคุมเวอร์ชัน เพิ่ม .env ใน .gitignore เพื่อไม่ให้โหลด Token ไปยัง Repository โดยไม่ตั้งใจ

โครงสร้างโค้ดขั้นต่ำ

ไฟล์ app/config.py จะช่วยอ่านตัวแปรสภาพแวดล้อมและให้ค่ากำหนด ไฟล์ app/main.py จะเรียกใช้งาน Bot ตัวจัดการและแดชบอร์ดเว็บ โมดูล proxy_checker.py จะทำการตรวจสอบทั้งหมด ในโฟลเดอร์ db เราจะจัดเก็บโมเดลและการย้ายฐานข้อมูล SQLite ใน bot จะเขียนตัวจัดการคำสั่งและการส่งการแจ้งเตือน ใน web จะมีเว็บเซิร์ฟเวอร์ที่เรียบง่ายสำหรับสถิติและการส่งออก

✅ ตรวจสอบ: คุณมีสภาพแวดล้อมเสมือน ที่ติดตั้ง dependencies แล้ว สร้างไฟล์ .env และโครงสร้างโปรเจ็กต์ตรงตามที่กล่าวถึง คำสั่ง python -c "import aiogram, aiohttp, aiosqlite; print('ok')" ควรแสดงว่า ok

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: pip แจ้งข้อผิดพลาด SSL หรือการไม่สามารถเข้าถึงได้ สาเหตุ: ไม่มีการเข้าถึงอินเทอร์เน็ต แนวทางแก้ไข: ตรวจสอบเครือข่ายหรือใช้ mirror ของ pip
  • ปัญหา: Python 3.11 ไม่พร้อมใช้งาน สาเหตุ: OS เก่ามาก แนวทางแก้ไข: อัปเดตระบบหรือใช้ Python ผ่าน deadsnakes PPA หรือ pyenv

ขั้นตอนที่ 3: เขียนโมดูลตรวจสอบพร็อกซี: การเชื่อมต่อ ความล่าช้า IP ตำแหน่งภูมิศาสตร์

เป้าหมายของขั้นตอน

สร้างโมดูลภายในที่ใช้งานได้เร็วและเชื่อถือได้ในการตรวจสอบ Proxy: การทดสอบ HTTP request ผ่าน Proxy วัดความล่าช้า รับ IP ภายนอก ส่งคำขอไปยัง ip-api.com แคชข้อมูลภูมิศาสตร์และจัดการข้อผิดพลาดอย่างถูกต้อง

แนวคิดสำคัญ

  • ในการตรวจสอบการเข้าถึงให้ทำการส่งคำขอไปยังแหล่งข้อมูลเล็ก ๆ เช่น https://api.ipify.org หรือ endpoint echo ที่รวดเร็ว เราจะเลือกดึง IP ผ่านบริการและตามด้วย geo ผ่าน ip-api.com หรืออาจทำตรงกันข้าม
  • ตั้งเวลาเป็น 8 วินาทีไว้เป็นค่าเริ่มต้น ข้อผิดพลาด 2 ครั้ง พารามิเตอร์เหล่านี้ตั้งค่าได้ผ่าน .env
  • aiohttp เข้าใจการทำงานกับ Proxy ได้ดี: ส่งพารามิเตอร์ proxy ไปยัง ClientSession.request
  • สำหรับ geolocation เก็บข้อมูลที่แคชไว้ 24 ชั่วโมงตาม IP เพื่อไม่ให้ใช้ลิมิต
  • ทำการทดสอบพร้อมกันแต่จำกัดความพร้อมกันด้วย semaphore เพื่อไม่ให้การเชื่อมต่อแบกหนักและไม่ไปถึงข้อจำกัดของ ip-api

คำแนะนำละเอียด

  1. เปิดไฟล์ app/modules/proxy_checker.py
  2. อธิบายโมเดล Proxy เป็นพจนานุกรม: id, label, type (http, https, socks5), endpoint (host:port), username, password, region, group, expected_country, last_ip
  3. สร้างฟังก์ชันอะซิงโครนัส build_proxy_url ที่จะแปลงจาก type, host, port และ optional username:password เป็นรูปแบบ scheme://user:pass@host:port
  4. สร้างฟังก์ชันอะซิงโครนัส fetch_ip(session, proxy_url) เพื่อดึง IP ภายนอกจาก Proxy ใช้ url https://api.ipify.org?format=json หรือบริการที่คล้ายกัน ซึ่งจะส่งคืน IP ของคุณใน JSON เก็บเวลาไว้ก่อนเรียกใช้และหลังจากได้รับคำตอบ เพื่อได้ latency
  5. สร้างแคชข้อมูลภูมิศาสตร์: พจนานุกรมในหน่วยความจำและตารางใน SQLite เพื่อไม่ให้ลบแคชเมื่อต้องเริ่มใหม่ คีย์—IP ค่า—JSON ประเทศ เมือง องค์กร และเวลาในการแคช
  6. สร้างฟังก์ชัน fetch_geo(session, ip) ที่ทำ GET request ไปที่ ip-api.com/json/{ip}?fields=status,country,countryCode,regionName,city,org,query หากสถานะคือ fail ให้ส่งคืนค่าสถานะที่แสดงถึงข้อผิดพลาด หากสำเร็จให้คืนค่าข้อมูลภูมิศาสตร์
  7. ดำเนินการสร้างฟังก์ชัน check_proxy(proxy) ที่มีแนวคิดในการทำงาน: สร้าง proxy_url, ลองดึง IP โดยมีการกำหนดเวลา วัดความล่าช้า จากนั้นให้ใช้ข้อมูลภูมิศาสตร์ (จากแคชหรือตามเครือข่าย) และจัดทำผลลัพธ์: ความสามารถเข้าถึง (ok), ความล่าช้าในมิลลิวินาที, IP ภายนอก, ประเทศและเมือง และประเภทของผลลัพธ์: UP, DEGRADED หรือ DOWN
  8. กำหนดเกณฑ์ DEGRADED: ถ้าความล่าช้ามากกว่าค่าที่คุณตั้งไว้ เช่น 1500–2000 มิลลิวินาที หรือถ้าสัดส่วนข้อผิดพลาดที่เกิดขึ้นในแต่ละการตรวจสอบมีนัยสำคัญ สำหรับความง่าย หากมีการตอบกลับ แต่ความล่าช้ามากกว่า 2 วินาที — DEGRADED หากไม่มีการตอบกลับ — DOWN
  9. ส่งคืนผลที่ละเอียดสำหรับการบันทึก: timestamp, proxy_id, status, latency_ms หรือ None, ip หรือ None, geo หรือ None, error_reason, changed_ip (True หรือ False หาก IP ต่างจากก่อนหน้านี้), changed_geo (หากประเทศเปลี่ยน), region, group, type
  10. เพิ่มการจัดการข้อผิดพลาด: asyncio.TimeoutError, aiohttp.ClientConnectorError, aiohttp.ClientHttpProxyError, aiohttp.ClientProxyConnectionError, sock errors ในฟิลด์ error_reason ให้บันทึกคำอธิบายสั้นๆ

ตัวอย่างโค้ด (แบบย่อ, ในบรรทัดเดียว)

ตัวอย่างของตรรกะในรูปแบบกระชับ: import asyncio, time, json, aiohttp; async def check_proxy(proxy, cfg, geo_cache, sem): async with sem: start=time.perf_counter(); purl=f"{proxy['type']}://{proxy.get('username', '')+(':'+proxy.get('password','') if proxy.get('username') else '')+'@' if proxy.get('username') else ''}{proxy['endpoint']}"; timeout=aiohttp.ClientTimeout(total=cfg['PROBE_TIMEOUT']); try: async with aiohttp.ClientSession(timeout=timeout) as s: t0=time.perf_counter(); async with s.get('https://api.ipify.org?format=json', proxy=purl, ssl=False) as r: data=await r.json(); ip=data.get('ip'); latency=int((time.perf_counter()-t0)*1000); if not ip: raise Exception('no-ip'); geo=geo_cache.get(ip); if not geo or geo['ts']

ในโค้ดจริง เราจะเพิ่มการบันทึกใน SQLite และซิมิโฟร์สำหรับการร้องขอ GEO ตลอดจนการตั้งเวลาและการลองทำซ้ำอย่างระมัดระวัง

⚠️ คำเตือน: ห้ามส่งคำขอหลายคำขอต่อกันไปที่ ip-api.com หากคุณมีรายการ Proxy หลายร้อยรายการให้แคชผลลัพธ์และจำกัดการขอที่พร้อมกัน นี่จะช่วยป้องกันข้อจำกัดและข้อผิดพลาด

✅ ตรวจสอบ: เรียกใช้งานฟังก์ชัน check_proxy ด้วย Proxy ทดสอบหนึ่งตัวแล้วพิมพ์ผลลัพธ์ คุณควรเห็นสถานะ UP หรือ DEGRADED พร้อมด้วยเวลาที่วัดได้และ IP ภายนอก

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: ข้อผิดพลาด ClientHttpProxyError สาเหตุ: Proxy ไม่รองรับประเภทที่ร้องขอหรือการยืนยันตัวตนไม่ถูกต้อง แนวทางแก้ไข: ตรวจสอบประเภทและข้อมูลรับรอง ปรับปรุง endpoint
  • ปัญหา: Geo แสดง unknown เสมอ สาเหตุ: ข้อผิดพลาดในการร้องขอไปที่ ip-api หรือบล็อก แนวทางแก้ไข: ตรวจสอบ IP_API_URL และเครือข่าย เปิดใช้งานการบันทึกข้อผิดพลาด

ขั้นตอนที่ 4: ตั้งค่าฐานข้อมูล SQLite และการบันทึกประวัติ

เป้าหมายของขั้นตอน

สร้างตารางใน SQLite เพื่อเก็บรายการ Proxy, ประวัติการตรวจสอบ, เหตุการณ์, แคชภูมิศาสตร์ และการตั้งค่า ซึ่งจะช่วยให้คุณมีสถิติที่ละเอียดและสร้างกราฟ

โครงสร้างของฐานข้อมูล

  • proxies: id, label, type, endpoint, username, password, region, group_name, expected_country, last_ip, enabled, created_at, updated_at
  • checks: id, proxy_id, ts, status, latency_ms, ip, country, city, org, error_reason
  • incidents: id, proxy_id, opened_at, closed_at, kind (DOWN หรือ DEGRADED), last_status, last_message, active
  • geo_cache: ip, country, city, org, ts
  • settings: key, value (เช่น ช่วงเวลาการตรวจสอบตามค่าเริ่มต้น)

คำแนะนำละเอียด

  1. เปิด app/db/models.py อธิบายค่าคงที่ SQL สำหรับการสร้างตาราง เพิ่มดัชนีตาม proxy_id และ ts เพื่อเพิ่มความเร็วในการค้นหา
  2. สร้างฟังก์ชัน init_db(db_path) ซึ่งจะสร้างโฟลเดอร์ data หากจำเป็น เปิดการเชื่อมต่อ aiosqlite.connect และดำเนินการ create table if not exists สำหรับทุกตาราง
  3. เพิ่มฟังก์ชันสำหรับบันทึกผล: add_proxy, update_proxy_last_ip, add_check, open_incident, close_incident_if_needed, upsert_geo_cache, get_recent_checks, get_uptime_stats
  4. ดำเนินการทำการโยกย้ายใน app/db/migrations.py ในการเริ่มต้นครั้งแรกให้ดำเนินการ create table ถ้าต้องการ หากมีการอัปเดตเวอร์ชัน สคริปต์จะเพิ่มคอลัมน์ที่ขาดหายไป

ตัวอย่าง SQL (ในบรรทัดเดียว)

CREATE TABLE IF NOT EXISTS proxies (id INTEGER PRIMARY KEY AUTOINCREMENT, label TEXT, type TEXT, endpoint TEXT, username TEXT, password TEXT, region TEXT, group_name TEXT, expected_country TEXT, last_ip TEXT, enabled INTEGER DEFAULT 1, created_at INTEGER, updated_at INTEGER); CREATE TABLE IF NOT EXISTS checks (id INTEGER PRIMARY KEY AUTOINCREMENT, proxy_id INTEGER, ts INTEGER, status TEXT, latency_ms INTEGER, ip TEXT, country TEXT, city TEXT, org TEXT, error_reason TEXT, FOREIGN KEY(proxy_id) REFERENCES proxies(id)); CREATE INDEX IF NOT EXISTS idx_checks_proxy_ts ON checks(proxy_id, ts); CREATE TABLE IF NOT EXISTS incidents (id INTEGER PRIMARY KEY AUTOINCREMENT, proxy_id INTEGER, opened_at INTEGER, closed_at INTEGER, kind TEXT, last_status TEXT, last_message TEXT, active INTEGER, FOREIGN KEY(proxy_id) REFERENCES proxies(id)); CREATE TABLE IF NOT EXISTS geo_cache (ip TEXT PRIMARY KEY, country TEXT, city TEXT, org TEXT, ts INTEGER); CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT);

เคล็ดลับ: หากคุณเก็บรายการ Proxy ใน CSV หรือ JSON อยู่แล้ว ให้เพิ่มการนำเข้าสะดวกเข้าสู่ฐานข้อมูล: สคริปต์ง่ายๆ อ่านไฟล์และเพิ่มบันทึกไปยัง proxies

✅ ตรวจสอบ: เรียกใช้ฟังก์ชัน init_db และตรวจสอบว่ามีไฟล์ฐานข้อมูลปรากฏตาม DB_PATH ตรวจสอบให้แน่ใจว่าตารางถูกสร้างขึ้นโดยทำการเลือกแบบง่าย select count(*) from proxies และได้รับคำตอบเป็น 0

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: ข้อผิดพลาด no such table สาเหตุ: ไม่ได้ทำการเริ่มต้นเรียบร้อยแล้ว แนวทางแก้ไข: เรียกใช้ init_db ในขณะที่เริ่มแอปก่อนทุกการดำเนินการ
  • ปัญหา: การล็อกในการเขียน สาเหตุ: มีการทำธุรกรรมพร้อมกัน แนวทางแก้ไข: หากเป็นไปได้ให้จัดกลุ่มการบันทึกผลในชุดหรือลดระยะเวลาธุรกรรมให้สั้นลง

ขั้นตอนที่ 5: สร้าง Telegram-Bot บน aiogram 3

เป้าหมายของขั้นตอน

สร้าง Bot ที่ตอบสนองต่อคำสั่ง สามารถส่งการแจ้งเตือนในแชทของคุณและอ่านการตั้งค่าจาก .env ตั้งค่าคำสั่งพื้นฐาน: /start, /status, /chatid, /addproxy, /list, /enable, /disable, /interval, /export

คำแนะนำละเอียด

  1. เปิด app/bot/handlers.py สร้างเส้นทางคำสั่ง สำหรับ aiogram 3 ใช้ Router, Dispatcher และแฮนเดลเลอร์แบบอะซิงโครนัส
  2. ดำเนินการสำหรับ /start: ตอบสนองด้วยคำอธิบายสั้น ๆ เกี่ยวกับฟังก์ชันและช่วงเวลาปัจจุบันของการตรวจสอบ
  3. ดำเนินการสำหรับ /chatid: ส่งหมายเลข ID ของแชท เพื่อให้คุณบันทึก TELEGRAM_CHAT_ID ใน .env สะดวก หากคุณเปิด Bot จากแชทส่วนตัวหรือตามกลุ่ม
  4. ดำเนินการสำหรับ /status: ค้นหาการตรวจสอบสุดท้าย N รายการสำหรับ Proxy แต่ละรายการและให้สรุปสั้น ๆ: สถานะ, latency, ประเทศ, เวลาที่อัปเดต
  5. ดำเนินการสำหรับ /list: แสดงรายการ Proxy พร้อม ID, label, type, region, enabled
  6. ดำเนินการสำหรับ /addproxy: โดยรับพารามิเตอร์เป็น type, endpoint, username, password, region, group, expected_country ในขั้นตอนแรกสามารถพัฒนาเวอร์ชันง่าย ๆ ที่รับสตริงในรูปแบบ type=http endpoint=host:port region=EU และจัดเก็บพารามิเตอร์
  7. ดำเนินการสำหรับ /enable และ /disable โดยใช้พารามิเตอร์ id เพื่อเปิดหรือปิด Proxy รายการเฉพาะได้อย่างรวดเร็ว
  8. ดำเนินการสำหรับ /interval N เพื่อเปลี่ยนช่วงเวลาการตรวจสอบเป็นนาที เก็บค่าในตาราง settings
  9. ดำเนินการสำหรับ /export เพื่อสร้าง CSV จากการตรวจสอบล่าสุดในช่วงเวลา ในภายหลังเราจะเพิ่มปุ่มที่คล้ายกันในแดชบอร์ดเว็บ

การส่งการแจ้งเตือน

ใน app/bot/notifications.py สร้างฟังก์ชัน notify_change ที่สร้างข้อความเกี่ยวกับเหตุการณ์ ตัวอย่างข้อความ: Proxy: EU-1 (http) ภูมิภาค: EU กลุ่ม: EUROPE สถานะ: DOWN สาเหตุ: timeout IP ล่าสุด: 203.0.113.45 ที่คาดไว้: ประเทศ DE ที่ได้รับ: ประเทศ NL เวลา: 2026-02-01 12:34:56 ความล่าช้า: n/a สำหรับ UP ให้ใช้ป้าย UP, สำหรับ DEGRADED เป็น DEGRADED เพิ่มการจัดเรียงตามความสำคัญ: DOWN ก่อน DEGRADED, จากนั้นเป็นข้อความเกี่ยวกับการเปลี่ยน IP เพิ่มไอคอนอีโมจิเพื่อความชัดเจน เช่น ✅ สำหรับ UP และ ⚠️ สำหรับ DEGRADED และ ❌ สำหรับ DOWN หาก TELEGRAM_CHAT_ID ไม่กำหนดให้ส่งไปยังแชทปัจจุบันที่คำสั่งมาจาก ในการผลิตควรบันทึก chat_id ใน .env

เคล็ดลับ: สำหรับกลุ่ม Bot อาจต้องทำให้สิทธิในการส่งข้อความ ตรวจสอบการตั้งค่ากลุ่มว่า Bot เป็นสมาชิกพร้อมสิทธิในการเขียนหรือไม่

✅ ตรวจสอบ: เริ่ม Bot ในระหว่างการทำงาน และส่งคำสั่ง /chatid ให้คุณได้รับหมายเลข ID คุณตั้งค่า TELEGRAM_CHAT_ID ใน .env ส่ง /start และ /status Bot ควรตอบสนอง คำสั่ง /list อาจว่างเปล่าชั่วคราวซึ่งถือเป็นสิ่งปกติ

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: Bot ไม่เริ่มทำงาน สาเหตุ: Token ไม่ถูกต้อง แนวทางแก้ไข: ตรวจสอบ BOT_TOKEN ใน .env ว่ามีช่องว่างเพิ่มเติมหรือไม่
  • ปัญหา: คำสั่งไม่ทำงาน สาเหตุ: Router ไม่เชื่อมต่อ แนวทางแก้ไข: ตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม Router ใน Dispatcher และเริ่มการ polling

ขั้นตอนที่ 6: ตัวจัดการตรวจสอบ APScheduler

เป้าหมายของขั้นตอน

ตั้งค่าการตรวจสอบ Proxy ที่เปิดใช้งานทุก 5-15 นาที ตามช่วงเวลาที่ตั้งไว้ในการตั้งค่า ทำการตรวจสอบในเวลาเดียวกันโดยไม่โหลดเกินไป บันทึกประวัติและส่งการแจ้งเตือนเมื่อมีการเปลี่ยนแปลง

คำแนะนำละเอียด

  1. เปิด app/scheduler.py เริ่มต้น AsyncIOScheduler
  2. สร้างงาน run_checks ที่เลือก Proxy ทั้งหมดจากฐานข้อมูลซึ่งมี enabled=1 ส่งไปตรวจสอบในกลุ่มงาน asynchronous พร้อม semaphore PROXY_CONCURRENCY และเก็บผล
  3. สำหรับผลแต่ละรายการให้บันทึกบันทึกใน checks อัปเดต last_ip ใน proxies หากมีการเปลี่ยนแปลง
  4. แนวคิดเหตุการณ์: หากสถานะคือ DOWN และไม่มีเหตุการณ์ให้สร้างบันทึก incidents (active=1) หากสถานะกลับมาเป็น UP ปิดเหตุการณ์ (active=0, closed_at=ts) สำหรับ DEGRADED สามารถรวมกันเป็นเหตุการณ์ที่ทำงานอยู่ภายใต้สถานะเดียวกัน หรือปิดเมื่อมีการฟื้นตัว
  5. ส่งการแจ้งเตือน: หากมีการเปลี่ยนลงสู่ DOWN, DEGRADED, ฟื้นตัวเป็น UP, การเปลี่ยน IP หรือประเทศ เปลี่ยนกลุ่มข้อความเมื่อ Proxy เปลี่ยนสถานะพร้อมกันจำนวนมาก: ส่งหัวข้อหนึ่งและรายการของรายการ
  6. สร้าง job scheduler.add_job(run_checks, 'interval', minutes=CHECK_INTERVAL_MINUTES, id='checks', replace_existing=True) เพิ่มการตอบสนองต่อ /interval เพื่อเริ่ม Job ใหม่ด้วยช่วงเวลาที่จัดตั้งใหม่ โดยไม่ต้องรีสตาร์ท Bot
  7. เริ่ม scheduler.start() ร่วมกับการเริ่ม Bot และเซิร์ฟเวอร์เว็บใน main

เคล็ดลับ:

เคล็ดลับ: เพิ่ม jitter แบบสุ่ม 0-60 วินาทีในตาราง เพื่อลดการโหลดในช่วงพีคและหลีกเลี่ยงการสอบถามที่ซิงโครนัสทั้งหมด

✅ ตรวจสอบ: ตั้งค่า CHECK_INTERVAL_MINUTES=1 ชั่วคราว และเริ่มแอป คุณต้องเห็นการตรวจสอบทำงานทุกนาทีในล็อก และบันทึกใหม่ ๆ จะถูกเพิ่มลงในตาราง checks

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: การตรวจสอบไม่เริ่มต้น สาเหตุ: Scheduler ไม่เริ่มทำงาน แนวทางแก้ไข: ตรวจสอบให้แน่ใจว่าได้เรียกให้ scheduler.start() และไม่มีข้อยกเว้นเกิดขึ้นตอนสร้าง job
  • ปัญหา: การล็อกฐานข้อมูล สาเหตุ: การบันทึกบ่อยเกินไป แนวทางแก้ไข: ลดช่วงเวลา หรือเพิ่มการบันทึกในกลุ่ม โดยการบันทึกในชุด

ขั้นตอนที่ 7: รวมทุกส่วนเข้ากับจุดเริ่มต้น main.py

เป้าหมายของขั้นตอน

รวมแอปทั้งหมดไว้ในที่เดียว: ค่ากำหนด, ฐานข้อมูล, Bot, ตรวจสอบ, กำหนดเวลา และแดชบอร์ดเว็บ เพื่อให้สามารถเริ่มต้นและหยุดอย่างถูกต้อง และจัดการสัญญาณการสิ้นสุด

คำแนะนำละเอียด

  1. เปิด app/main.py นำเข้า asyncio, logging, uvloop (ถ้าใช้ Linux), aiogram, ฟังก์ชัน init_db, router, scheduler และเซิร์ฟเวอร์เว็บ
  2. โหลดค่ากำหนดจาก .env ผ่าน python-dotenv ตรวจสอบคีย์ที่จำเป็น BOT_TOKEN และ DB_PATH
  3. เริ่มต้นฐานข้อมูล: await init_db(DB_PATH)
  4. สร้าง Dispatcher และ Router จาก aiogram 3 และเพิ่มตัวจัดการคำสั่ง
  5. สร้างตัวจัดการเวลา APScheduler และเพิ่มงาน run_checks ตามช่วงเวลา
  6. เริ่มต้นส่วนประกอบสามส่วนพร้อมกัน: polling Bot, scheduler.start(), web-dashboard ใช้ asyncio.gather เพื่อทำการเริ่มต้นแบบขนาน
  7. จัดการสัญญาณ SIGINT และ SIGTERM: หยุด scheduler อย่างถูกต้อง ปิดการเชื่อมต่อกับฐานข้อมูล และสิ้นสุดการ polling

แนวคิดการเริ่มต้นโดยง่ายในบรรทัดเดียว: import asyncio, logging; async def main(): await init_db(...); dp=Dispatcher(); dp.include_router(router); scheduler=AsyncIOScheduler(); scheduler.add_job(run_checks, 'interval', minutes=interval); scheduler.start(); await asyncio.gather(dp.start_polling(bot), start_web_server(), wait_for_signals(scheduler)); asyncio.run(main()).

เคล็ดลับ: เพิ่มการบันทึกอย่างละเอียดในระดับ INFO และ WARN ซึ่งจะช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้นเมื่อเริ่มต้นและระหว่างการตรวจสอบอย่างรวดเร็ว

✅ ตรวจสอบ: เริ่ม python app/main.py Bot ควรตอบสนองต่อ /start, เซิร์ฟเวอร์แดชบอร์ดควรเปิดอยู่ที่ http://localhost:8080 และการจัดตารางควรเริ่มการตรวจสอบตามช่วงเวลาที่ถูกกำหนด

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: ที่อยู่ 0.0.0.0:8080 ถูกใช้งานอยู่ สาเหตุ: พอร์ตถูกใช้โดยกระบวนการอื่น ๆ แนวทางแก้ไข: เปลี่ยน DASHBOARD_PORT ใน .env หรือหยุดกระบวนการที่ติดตั้งอยู่
  • ปัญหา: ข้อผิดพลาดขณะเริ่มทำการ polling สาเหตุ: Token ไม่ถูกต้องหรือปัญหาทางเครือข่าย แนวทางแก้ไข: ตรวจสอบ BOT_TOKEN และการเข้าถึงอินเทอร์เน็ต

ขั้นตอนที่ 8: รูปแบบการแจ้งเตือนและการจัดกลุ่ม Proxy

เป้าหมายของขั้นตอน

ทำให้การแจ้งเตือนมีความเข้าใจ ชัดเจน และเต็มไปด้วยข้อมูล พร้อมตั้งค่าการจัดกลุ่ม Proxy ตามภูมิภาคและประเภท เพื่อให้มีความเป็นระเบียบในการส่งข้อความ

รูปแบบการแจ้งเตือน

  • หัวข้อ: การเปลี่ยนแปลงสถานะ Proxy
  • ใต้หัวข้อ: วันและเวลา
  • หมวดหมู่ตามความสำคัญ: DOWN ก่อน DEGRADED, ฟื้นตัว, เปลี่ยน IP, เปลี่ยนภูมิศาสตร์
  • แต่ละรายการ: [ภูมิภาค] [กลุ่ม] [Label] ([type]) สถานะ ความล่าช้า IP ประเทศ สาเหตุ
  • ไอคอน: DOWN จะเป็น ❌ DEGRADED จะเป็น ⚠️ และ UP จะเป็น ✅

การจัดกลุ่ม Proxy

  • ตามฟิลด์ region: EU, US, ASIA และอื่น ๆ
  • ตามฟิลด์ group_name: การจัดกลุ่มเชิงตรรกะ เช่น EUROPE, PAID, TESTING
  • ตามประเภท: http, https, socks5

การดำเนินการ

  1. ใน app/bot/notifications.py สร้างฟังก์ชัน group_by_region และ group_by_type เพื่อจัดกลุ่มผลลัพธ์ก่อนการส่งออก เพื่อส่งข้อความได้น้อยลงและอ่านง่ายขึ้น
  2. สำหรับแต่ละบล็อกให้สร้างข้อความสั้นๆ ที่มีข้อมูลสำคัญ: "EU, EUROPE, EU-1 (http): ❌ DOWN, timeout" หรือ "US, AMERICA, US-2 (socks5): ⚠️ DEGRADED, 2300ms, country US"
  3. หากมีการเปลี่ยนแปลงมากมาย ส่งหัวข้อสรุปหนึ่งและข้อความจำนวนมากตามภูมิภาค ดีกว่าการส่งข้อความเดี่ยว 100 ข้อความ

✅ ตรวจสอบ: เปลี่ยน Proxy หนึ่งรายการเป็น endpoint ที่ไม่ทำงาน และรอการตรวจสอบ คุณจะได้รับการแจ้งเตือนไปยัง DOWN เปลี่ยน Proxy กลับเป็นทำงาน แล้วคุณจะเห็นการแจ้งเตือนการฟื้นตัว

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: ข้อความยาวเกินไป สาเหตุ: มีการรายละเอียดมากเกินไป แนวทางแก้ไข: ลดฟิลด์ให้สั้นลง รายละเอียดสามารถลึกลงไปในคำสั่ง /status หรือ /details id
  • ปัญหา: การแจ้งเตือนซ้ำ สาเหตุ: การส่งซ้ำท่ามกลางสถานะที่ไม่เปลี่ยนแปลง แนวทางแก้ไข: ส่งการแจ้งเตือนเฉพาะเมื่อมีการเปลี่ยนแปลงสถานะและเมื่อมีการเปลี่ยนแปลง IP หรือประเทศ

ขั้นตอนที่ 9: การติดตั้งบน VPS (Ubuntu) และการเริ่มทำงานอัตโนมัติ

เป้าหมายของขั้นตอน

ติดตั้ง Bot บนเซิร์ฟเวอร์ระยะไกล ตั้งค่าการเริ่มทำงานอัตโนมัติผ่าน systemd มอบหมายการบันทึกและการอัปเดตที่ง่าย

การเตรียม VPS

  1. เชื่อมต่อไปยัง VPS: ssh user@server_ip
  2. อัปเดตระบบ: sudo apt update && sudo apt upgrade -y
  3. ติดตั้ง Python หากยังไม่มี: sudo apt install -y python3.11 python3.11-venv python3-pip
  4. สร้างผู้ใช้สำหรับแอป หากจำเป็น: sudo adduser botuser; จากนั้นล็อกอินด้วยผู้ใช้นั้น
  5. คัดลอกโปรเจกต์ไปยังเซิร์ฟเวอร์โดยใช้ scp หรือ git clone จาก Repository ของคุณ
  6. สร้างสภาพแวดล้อมเสมือนและติดตั้ง dependencies ตามขั้นตอนที่ 2
  7. ตรวจสอบ .env เติมค่าจริง BOT_TOKEN และ TELEGRAM_CHAT_ID

บริการ systemd

  1. สร้างไฟล์บริการ: sudo nano /etc/systemd/system/proxy-monitor.service
  2. ตัวอย่าง Unit (ในบรรทัดเดียว): [Unit] Description=Proxy Monitor Bot After=network.target [Service] Type=simple User=botuser WorkingDirectory=/home/botuser/proxy-monitor-bot ExecStart=/home/botuser/proxy-monitor-bot/.venv/bin/python -m app.main Environment=PYTHONUNBUFFERED=1 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target.
  3. โหลด daemon ใหม่: sudo systemctl daemon-reload
  4. เปิดใช้การเริ่มทำงานอัตโนมัติ: sudo systemctl enable proxy-monitor.service
  5. เริ่มต้น: sudo systemctl start proxy-monitor.service
  6. ตรวจสอบล็อก: journalctl -u proxy-monitor.service -f

เคล็ดลับ: หากคุณใช้ uvloop ให้ตรวจสอบว่าได้ติดตั้งในสภาพแวดล้อมเสมือน หากใช้ Windows uvloop จะไม่ถูกใช้ แต่จะช่วยเพิ่มประสิทธิภาพใน Linux

✅ ตรวจสอบ: Bot ตอบสนองต่อ /start ของคุณจาก Telegram ในตอนที่บริการทำงานอยู่ ในล็อกเห็นการเริ่มต้น scheduler และ web-dashboard ฟังที่พอร์ต 8080

ปัญหาที่อาจเกิดขึ้นและแนวทางแก้ไข

  • ปัญหา: บริการล้มเหลวทันที สาเหตุ: เส้นทาง Python หรือเวิร์กกิ้งไดเรกทอรีไม่ถูกต้อง แนวทางแก้ไข: ตรวจสอบ ExecStart และ WorkingDirectory สิทธิ์ของผู้ใช้
  • ปัญหา: ไม่มีการเข้าถึงพอร์ต 8080 จากภายนอก สาเหตุ: UFW หรือไฟร์วอลล์จากคลาวด์ แนวทางแก้ไข: เปิดพอร์ต: sudo ufw allow 8080 หรือจัดการกฎในแผงควบคุมของผู้ให้บริการ

การตรวจสอบผลลัพธ์

รายการตรวจสอบ

  • Bot รับคำสั่ง /start, /status, /list, /chatid
  • ตัวจัดการตรวจสอบจะเริ่มการตรวจสอบตามช่วงเวลา บันทึกจะปรากฏในตาราง checks
  • เมื่อ Proxy ล้มเหลว Bot จะส่งการแจ้งเตือนไปที่ Telegram
  • การเปลี่ยนแปลง IP จะถูกบันทึกและระบุในข้อความ
  • การระบุภูมิศาสตร์จะถูกตรวจสอบและเปรียบเทียบกับประเทศที่คาดไว้
  • แดชบอร์ดจะแสดงข้อมูลที่พอร์ตที่กำหนด แสดงเวลาใช้งานและเหตุการณ์ล่าสุด
  • การส่งออก CSV ทำงานและผลิตไฟล์ที่ถูกต้อง

วิธีการทดสอบ

  1. ปิด Proxy หนึ่งรายการหรือระบุพอร์ตที่ไม่ถูกต้อง รอการแจ้งเตือน DOWN
  2. เปลี่ยน endpoint ชั่วคราวเพื่อให้เกิดการเปลี่ยน IP ตรวจสอบให้แน่ใจว่า Bot แจ้งการเปลี่ยน IP และประเทศ หากมีการเปลี่ยนแปลง
  3. เพิ่มความล่าชาแบบประดิษฐ์โดยการจำกัดเครือข่าย (ถ้าเป็นไปได้) หรือทำการทดสอบที่หนักหน่วงเพื่อให้ได้ DEGRADED
  4. ตรวจสอบคำสั่ง: /interval 5, /list, /enable, /disable และตรวจสอบสถานะ

การวัดความสำเร็จ

  • การตรวจสอบที่มีเสถียรภาพโดยไม่มีข้อผิดพลาดในล็อก
  • การแจ้งเตือนที่ส่งมาอย่างทันท่วงทีเมื่อเกิดปัญหาจริง
  • การทำงานของเหตุการณ์ที่ถูกต้อง: การเ

    เกี่ยวกับผู้เขียน

    Roman Melnikov

    Roman Melnikov

    Technical Writer and System Administrator

    ประสบการณ์ทำงาน: Technical writer and DevOps engineer with 9 years of experience. Created over 50 detailed guides on system configuration and administration. His instructions helped thousands of professionals successfully solve technical tasks. Popular author on Habr and YouTube.
    การศึกษา: Bauman Moscow State Technical University. Information Systems and Technologies
    ความเชี่ยวชาญ:
    Technical Documentation DevOps System Administration Linux Docker and Kubernetes CI/CD Infrastructure Automation Cloud Technologies System Monitoring Bash and Python Scripting

    แชร์บทความ: