ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ติดตั้ง Uptime Kuma เฝ้าดูเว็บไซต์ของตัวเอง
Home ติดตั้ง Uptime Kuma เฝ้าดูเว็บไซต์ของตัวเอง

ติดตั้ง Uptime Kuma เฝ้าดูเว็บไซต์ของตัวเอง

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

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

สิ่งที่ต้องเตรียม

  • เซิร์ฟเวอร์ที่มี Docker RAM เพียง 512 MB ก็เพียงพอ
  • โดเมนย่อยสำหรับเข้าหน้าจอ
  • ควรติดตั้งบนเซิร์ฟเวอร์คนละเครื่องกับเว็บที่จะเฝ้าดู เพราะหากอยู่เครื่องเดียวกันและเครื่องนั้นล่ม ระบบเฝ้าดูก็ล่มไปด้วยจึงแจ้งเตือนไม่ได้

ขั้นตอนที่ 1: ติดตั้ง

sudo mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
sudo nano docker-compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    volumes:
      - ./data:/app/data
    environment:
      TZ: Asia/Bangkok
sudo docker compose up -d
sudo docker compose logs -f

ขั้นตอนที่ 2: ตั้ง Nginx และ SSL

sudo nano /etc/nginx/sites-available/uptime
server {
    listen 80;
    server_name status.example.com;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
sudo ln -s /etc/nginx/sites-available/uptime /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d status.example.com --agree-tos -m [email protected] --redirect

WebSocket จำเป็นสำหรับหน้าจอนี้ เพราะข้อมูลอัปเดตแบบเรียลไทม์

ขั้นตอนที่ 3: สร้างการตรวจสอบ

เข้าหน้าเว็บแล้วสร้างบัญชีผู้ดูแล จากนั้นกด Add New Monitor ชนิดที่ใช้บ่อยและควรตั้งไว้

เว็บไซต์ (HTTP/s)

  • URL ใส่ที่อยู่เต็ม
  • Heartbeat Interval 60 วินาที
  • Retries 2 ครั้งก่อนถือว่าล่ม ลดการแจ้งเตือนผิดพลาดจากเครือข่ายสะดุดชั่วคราว
  • Accepted Status Codes 200-299

ตรวจเนื้อหาในหน้าเว็บ (HTTP/s - Keyword)

ใช้เมื่อเว็บตอบ 200 ได้แต่แสดงหน้าข้อผิดพลาด ใส่คำที่ต้องมีในหน้าปกติ เช่น ชื่อบริษัท ทำให้จับปัญหาที่การตรวจสอบธรรมดามองไม่เห็น

วันหมดอายุของใบรับรอง SSL

ในการตรวจสอบแบบ HTTP ให้ตั้ง Certificate Expiry Notification ไว้ที่ 14 และ 7 วัน ป้องกันใบรับรองหมดอายุโดยไม่รู้ตัว

บริการอื่น

  • TCP Port สำหรับฐานข้อมูลหรือ SSH
  • Ping สำหรับอุปกรณ์เครือข่าย
  • DNS ตรวจว่าระเบียนยังชี้ถูกที่
  • Push สำหรับงานตามเวลา โดยให้สคริปต์เรียก URL เมื่อทำงานสำเร็จ หากไม่มีการเรียกภายในเวลาที่กำหนดจะถือว่าล้มเหลว ซึ่งจับกรณีที่งานสำรองข้อมูลหยุดทำงานเงียบ ๆ ได้

ขั้นตอนที่ 4: ตั้งการแจ้งเตือน

ไปที่ Settings แล้ว Notifications กด Setup Notification

LINE Notify

ขอ Token จากหน้าเว็บของ LINE Notify แล้วเลือกชนิด LINE Notify ใส่ Token ที่ได้ ทดสอบด้วยปุ่ม Test

อีเมล

Hostname: smtp.example.com
Port: 587
Security: STARTTLS
Username: [email protected]
Password: รหัสผ่าน
From: [email protected]
To: [email protected]

Telegram

สร้างบอทผ่าน BotFather เอา Token มาใส่ และหา Chat ID ด้วยการส่งข้อความหาบอทแล้วเรียก

curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates" | grep -o '"id":[0-9-]*' | head -1

ตั้งการแจ้งเตือนอย่างน้อยสองช่องทางเสมอ เผื่อช่องทางหนึ่งมีปัญหา

ขั้นตอนที่ 5: สร้างหน้าสถานะสาธารณะ

ไปที่ Status Pages แล้ว New Status Page ตั้งชื่อและที่อยู่ เลือกว่าจะแสดงบริการไหนบ้าง

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

แสดงหน้านี้บนโดเมนแยก เช่น status.example.com และต้องอยู่คนละเซิร์ฟเวอร์กับระบบหลัก ไม่เช่นนั้นเมื่อระบบหลักล่ม หน้าสถานะก็เปิดไม่ได้

เพิ่มประกาศเหตุการณ์ด้วยปุ่ม Create Incident เพื่อแจ้งความคืบหน้าระหว่างแก้ไข

ขั้นตอนที่ 6: ตั้งช่วงเวลาบำรุงรักษา

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

ขั้นตอนที่ 7: สำรองข้อมูล

sudo tar czf /var/backups/uptime-kuma-$(date +%F).tar.gz -C /opt/uptime-kuma data

ข้อมูลทั้งหมดอยู่ในโฟลเดอร์เดียว จึงสำรองและย้ายเครื่องได้ง่าย

ปัญหาที่พบบ่อย

หน้าเว็บไม่อัปเดตแบบเรียลไทม์

Nginx ไม่ส่งต่อ WebSocket ตรวจคอนฟิกตามขั้นตอนที่ 2

แจ้งเตือนผิดพลาดบ่อย

เพิ่มค่า Retries เป็น 2-3 ครั้ง และเพิ่มระยะเวลา Heartbeat หากเว็บปลายทางตอบช้าโดยธรรมชาติ ตรวจด้วยว่าเซิร์ฟเวอร์ที่รัน Uptime Kuma มีเครือข่ายที่เสถียร

ตรวจเว็บตัวเองแล้วขึ้นล่มทั้งที่เปิดได้

หากเว็บอยู่หลัง Cloudflare หรือมีระบบป้องกันบอต อาจบล็อกคำขอจากระบบเฝ้าดู เพิ่ม IP ของเซิร์ฟเวอร์เข้ารายการที่อนุญาต หรือตั้ง User-Agent เฉพาะแล้วยกเว้นที่ฝั่งเว็บ

ลืมรหัสผ่านผู้ดูแล

รีเซ็ตได้จากในคอนเทนเนอร์

sudo docker compose exec uptime-kuma node extra/reset-password.js

ต้องการระบบเฝ้าระวังที่มีทีมวิศวกรดูแลตลอด 24 ชั่วโมง ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security