

BetterUptime Docker Container Deploy — คู่มือฉบับสมบูรณ์ 2026 | SiamCafe Blog
ในยุคที่การให้บริการดิจิทัลต้องแข่งขันกันด้วยความเสถียรและความน่าเชื่อถือ “การตรวจสอบสถานะ (Uptime Monitoring)” ได้กลายเป็นหัวใจสำคัญที่ไม่ว่า Startup ขนาดเล็กหรือองค์กรระดับองค์กรก็ไม่สามารถมองข้ามได้ BetterUptime คือหนึ่งในเครื่องมือ Monitoring ที่ได้รับความนิยมสูง ด้วยฟีเจอร์ที่ครบครันทั้ง Heartbeat Monitoring, Incident Management, Status Page และการแจ้งเตือนผ่านช่องทางหลากหลาย อย่างไรก็ตาม การติดตั้งและดูแลรักษาเซิร์ฟเวอร์สำหรับการตรวจสอบเองก็เป็นงานที่ท้าทาย
โซลูชันที่ทรงพลังและยืดหยุ่นที่สุดในปี 2026 นี้ คือการนำ BetterUptime มาบรรจุใน Docker Container การดีพลอยด้วย Docker ช่วยให้กระบวนการติดตั้งเป็นมาตรฐาน รันได้บนทุกแพลตฟอร์ม ขยายขนาดได้ง่าย และที่สำคัญคือแยกการทำงานออกจากระบบหลักอย่างสมบูรณ์ คู่มือฉบับสมบูรณ์นี้จะพาคุณเดินทางตั้งแต่พื้นฐานไปจนถึงการดีพลอยในสภาพแวดล้อมจริง พร้อมด้วย Best Practices ล่าสุดและกรณีศึกษาให้เรียนรู้
BetterUptime คืออะไร และทำไมต้องใช้ร่วมกับ Docker?
BetterUptime คือ SaaS Platform สำหรับ Monitoring เว็บไซต์, API, Cron Job และ Infrastructure ต่างๆ โดยจะส่งคำขอ (Request) ไปยังเป้าหมายเป็นระยะๆ หากพบข้อผิดพลาด (เช่น HTTP Error, Timeout) ระบบจะสร้าง Incident ขึ้นทันที และแจ้งเตือนทีมงานผ่านอีเมล, SMS, Slack, Discord หรือแม้แต่โทรศัพท์ โดยอัตโนมัติ พร้อมระบบ Escalation เพื่อให้แน่ใจว่ามีคนรับผิดชอบจัดการปัญหา
แต่แทนที่จะใช้บริการแบบ SaaS โดยตรง การรัน BetterUptime ใน Docker Container ของตัวเองให้ประโยชน์ที่ชัดเจนหลายประการ:
- ความเป็นเจ้าของข้อมูล (Data Ownership): ข้อมูลการตรวจสอบและประวัติ Incident ทั้งหมดอยู่ภายใน Infrastructure ของคุณเอง ลดความกังวลเรื่อง Data Privacy และ Compliance
- การตรวจสอบภายในเครือข่าย (Internal Network Monitoring): สามารถมอนิเตอร์บริการภายในที่ไม่ได้เปิดสู่สาธารณะอินเทอร์เน็ตได้ เช่น ฐานข้อมูลภายใน, Microservice ภายในเครือข่าย Private
- ลดต้นทุนในระยะยาว: สำหรับองค์กรที่ต้องมอนิเตอร์ Endpoint จำนวนมาก การรัน Self-hosted Instance สามารถประหยัดค่าใช้จ่ายได้มากเมื่อเทียบกับแบบ Subscription
- ปรับแต่งได้ไม่จำกัด: คุณสามารถปรับแต่ง Logic การตรวจสอบ, Integrate กับระบบภายในอื่นๆ ได้อย่างอิสระ
- ความยืดหยุ่นในการดีพลอย: Docker Container รันได้ทุกที่ ไม่ว่าจะเป็นบนเซิร์ฟเวอร์ส่วนตัว, Cloud VM, หรือแม้แต่ Kubernetes Cluster
เตรียมสภาพแวดล้อมและโครงสร้างโปรเจค
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมีเครื่องมือต่อไปนี้ติดตั้งไว้แล้ว:
- Docker และ Docker Compose (เวอร์ชันล่าสุดแนะนำ)
- Git สำหรับดึงโค้ดตัวอย่าง
- Text Editor (เช่น VS Code, Sublime Text)
โครงสร้างไดเรกทอรีโปรเจค
เราจะสร้างโครงสร้างไฟล์ที่จัดระเบียบเพื่อให้จัดการได้ง่ายในระยะยาว
betteruptime-selfhosted/
├── docker-compose.yml
├── .env.example
├── config/
│ └── betteruptime/
│ ├── docker-entrypoint.sh
│ └── production.env
├── data/
│ ├── postgres/
│ └── redis/
└── logs/
└── betteruptime/
ไฟล์กำหนดค่าสภาพแวดล้อม (.env)
สร้างไฟล์ .env ที่รากโปรเจคเพื่อเก็บค่าความลับและค่ากำหนดต่างๆ
# BetterUptime Core Configuration
SECRET_KEY_BASE=your_very_long_and_secure_secret_key_here_change_me
RAILS_ENV=production
DATABASE_URL=postgresql://postgres:strong_password@db:5432/betteruptime_production
REDIS_URL=redis://redis:6379/1
# Email Configuration (สำหรับการแจ้งเตือน)
SMTP_ADDRESS=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASSWORD=your_app_specific_password
SMTP_AUTHENTICATION=plain
SMTP_ENABLE_STARTTLS_AUTO=true
[email protected]
# Application Settings
APP_HOST=https://status.yourdomain.com
RAILS_SERVE_STATIC_FILES=true
RAILS_LOG_TO_STDOUT=true
# Security (สำคัญ!)
FORCE_SSL=true
DISABLE_REGISTRATION=true # ปิดการสมัครสมาชิกสาธารณะหลังติดตั้ง
คำเตือน: ต้องเปลี่ยน SECRET_KEY_BASE และรหัสผ่านทั้งหมดให้เป็นค่าที่ปลอดภัยและไม่เปิดเผยที่เก็บใน Repository สาธารณะ
การดีพลอยด้วย Docker Compose แบบละเอียด
ในส่วนนี้ เราจะสร้างไฟล์ docker-compose.yml ที่กำหนดบริการทั้งหมดที่จำเป็นสำหรับ BetterUptime
ไฟล์ docker-compose.yml
version: '3.8'
services:
db:
image: postgres:15-alpine
container_name: betteruptime_postgres
restart: unless-stopped
environment:
POSTGRES_DB: betteruptime_production
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- betteruptime-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: betteruptime_redis
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- ./data/redis:/data
networks:
- betteruptime-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
web:
image: betteruptime/app:latest
container_name: betteruptime_app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "3000:3000"
environment:
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- DATABASE_URL=postgresql://postgres:${DB_PASSWORD}@db:5432/betteruptime_production
- REDIS_URL=redis://redis:6379/1
- RAILS_ENV=${RAILS_ENV}
- SMTP_ADDRESS=${SMTP_ADDRESS}
- SMTP_PORT=${SMTP_PORT}
- SMTP_USER_NAME=${SMTP_USER_NAME}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL}
- APP_HOST=${APP_HOST}
volumes:
- ./logs/betteruptime:/app/log
networks:
- betteruptime-network
command: >
sh -c "
rails db:prepare &&
rails server -b 0.0.0.0 -p 3000"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
worker:
image: betteruptime/app:latest
container_name: betteruptime_worker
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
environment:
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- DATABASE_URL=postgresql://postgres:${DB_PASSWORD}@db:5432/betteruptime_production
- REDIS_URL=redis://redis:6379/1
- RAILS_ENV=${RAILS_ENV}
volumes:
- ./logs/betteruptime:/app/log
networks:
- betteruptime-network
command: bundle exec sidekiq -C config/sidekiq.yml
profiles:
- full-deploy
cron:
image: betteruptime/app:latest
container_name: betteruptime_cron
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
environment:
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- DATABASE_URL=postgresql://postgres:${DB_PASSWORD}@db:5432/betteruptime_production
- REDIS_URL=redis://redis:6379/1
- RAILS_ENV=${RAILS_ENV}
volumes:
- ./logs/betteruptime:/app/log
networks:
- betteruptime-network
command: bundle exec clockwork config/clock.rb
profiles:
- full-deploy
networks:
betteruptime-network:
driver: bridge
volumes:
postgres_data:
redis_data:
คำอธิบายบริการและขั้นตอนการรัน
ไฟล์ Compose นี้กำหนดบริการหลัก 4 ส่วน:
- db (PostgreSQL): ฐานข้อมูลสำหรับเก็บข้อมูลผู้ใช้, Monitoring Check, Incident
- redis: คิวข้อความสำหรับ Job Queue (Sidekiq) และ Caching
- web: ตัวแอปพลิเคชันหลัก (Rails) ที่ให้เว็บอินเตอร์เฟซและ API
- worker (โปรไฟล์ full-deploy): ประมวลผลงานเบื้องหลัง เช่น ส่งการแจ้งเตือน, ประมวลผล Heartbeat
- cron (โปรไฟล์ full-deploy): ตัวจัดการ Cron Job สำหรับเรียกตรวจสอบเป็นระยะ
ขั้นตอนการรันเบื้องต้น:
# 1. คัดลอกไฟล์ตัวอย่างสภาพแวดล้อม
cp .env.example .env
# แก้ไขค่าในไฟล์ .env ให้ถูกต้อง
# 2. ดึง Docker Image และเริ่มบริการหลัก (Web, DB, Redis)
docker-compose up -d db redis web
# 3. ตรวจสอบ Log เพื่อดูว่าแอปพลิเคชันเริ่มทำงานเรียบร้อยหรือไม่
docker-compose logs -f web
# 4. เมื่อพร้อม ให้เริ่มบริการ Worker และ Cron (สำหรับการตรวจสอบเต็มรูปแบบ)
docker-compose --profile full-deploy up -d worker cron
การกำหนดค่าและปรับแต่งขั้นสูง
หลังจากการติดตั้งพื้นฐานสำเร็จ ขั้นตอนต่อไปคือการกำหนดค่าแอปพลิเคชันให้เหมาะสมกับการใช้งานจริง
การตั้งค่า Administrator และความปลอดภัย
เมื่อเข้าถึงเว็บแอปเป็นครั้งแรก (ที่ http://your-server:3000) คุณจะต้องสร้างบัญชีผู้ดูแลระบบแรก หลังจากนั้น ให้ทำตามขั้นตอนเหล่านี้ทันที:
- ไปที่ Settings → Security และเปิดใช้งานการยืนยันตัวตนสองปัจจัย (2FA)
- ใน Settings → General ตรวจสอบให้แน่ใจว่า
APP_HOSTถูกตั้งค่าเป็นโดเมนจริงของคุณ - ปิดการสมัครสมาชิกใหม่โดยตั้งค่า Environment Variable
DISABLE_REGISTRATION=trueและรีสตาร์ท Container
การกำหนดค่า Monitoring Check ประเภทต่างๆ
BetterUptime รองรับการตรวจสอบหลายประเภท ซึ่งสามารถกำหนดค่าได้ผ่าน UI หรือ API
| ประเภท Check | คำอธิบาย | Use Case ตัวอย่าง |
|---|---|---|
| HTTP(S) Check | ส่ง HTTP Request ไปยัง URL ตรวจสอบ Status Code, Response Time, Response Body | ตรวจสอบเว็บแอป, API Endpoint |
| Heartbeat Monitor | รอรับ Ping จากงานของคุณ (Cron Job, Script) หากไม่ได้รับในเวลาที่กำหนด ถือว่า Fail | ตรวจสอบว่า Batch Job, Backup Script ทำงานครบ |
| Keyword Monitor | ตรวจสอบว่าคำสำคัญ (Keyword) ปรากฏใน Response Body หรือไม่ | ตรวจสอบความถูกต้องของหน้า Landing Page, ตรวจหาข้อความ Error |
| Port / Ping Monitor | ตรวจสอบการตอบสนองของพอร์ตหรือการ Ping ไปยังเซิร์ฟเวอร์ | ตรวจสอบเซิร์ฟเวอร์ Database, Cache Server ภายในเครือข่าย |
การ Integrate กับการแจ้งเตือน (Notification)
หัวใจของ Monitoring คือการแจ้งเตือนที่ทันท่วงที BetterUptime รองรับช่องทางหลักๆ ดังนี้
- Email: กำหนดค่า SMTP ในไฟล์ .env ให้เรียบร้อย
- Slack: สร้าง Incoming Webhook ใน Slack Workspace ของคุณ และเพิ่มใน BetterUptime → Settings → Notifications
- Discord: ใช้ Webhook URL จาก Channel Discord
- Telegram: สร้าง Bot ผ่าน BotFather และเพิ่ม Chat ID
- Webhook: ส่ง Payload ไปยัง Endpoint ใดๆ ก็ได้ของคุณ เพื่อ Integrate กับระบบภายใน
Best Practices สำหรับการ Production Deployment
เพื่อให้ระบบ Self-hosted BetterUptime ของคุณมีเสถียรภาพและความปลอดภัยสูงสุดในสภาพแวดล้อม Production ควรปฏิบัติตามแนวทางเหล่านี้
1. การจัดการความลับ (Secrets Management)
ห้ามเก็บ Secret ในไฟล์ docker-compose.yml หรือ Repository ควรใช้ระบบจัดการความลับ เช่น:
- Docker Secrets (ใน Docker Swarm)
- HashiCorp Vault
- Cloud Provider Secret Manager (AWS Secrets Manager, GCP Secret Manager)
- อย่างน้อยที่สุด ให้ใช้ไฟล์
.envที่ถูก exclude ใน.gitignoreและตั้งค่า Permission ให้ปลอดภัย
2. การสำรองข้อมูล (Backup)
ข้อมูล Monitoring มีความสำคัญ ต้องมีแผนสำรองข้อมูลที่ชัดเจน
# สคริปต์ตัวอย่างสำหรับ Backup ฐานข้อมูล PostgreSQL
#!/bin/bash
BACKUP_DIR="/path/to/backups"
DATE=$(date +%Y%m%d_%H%M%S)
docker exec betteruptime_postgres pg_dump -U postgres betteruptime_production | gzip > "$BACKUP_DIR/betteruptime_db_$DATE.sql.gz"
# ลบไฟล์ Backup ที่เก่ากว่า 30 วัน
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete
สิ่งที่ต้อง Backup:
1. โวลุ่มข้อมูล PostgreSQL (ที่อยู่ที่ ./data/postgres)
2. โวลุ่มข้อมูล Redis (อาจไม่จำเป็นหากเป็นแค่ Cache ชั่วคราว)
3. ไฟล์ Environment Variables (.env)
4. Configuration Files ที่คุณปรับแต่ง
3. การอัพเดทและแพตช์ความปลอดภัย
ติดตามอัพเดทของ BetterUptime Docker Image เป็นประจำ กระบวนการอัพเดทที่ปลอดภัย:
- ดึง Image เวอร์ชันล่าสุด:
docker-compose pull - หยุดบริการ:
docker-compose down - ทำ Backup ฐานข้อมูล (ตามขั้นตอนด้านบน)
- อัพเดท:
docker-compose up -d - ตรวจสอบ Log หลังอัพเดท:
docker-compose logs -f web
4. การติดตั้ง Reverse Proxy และ SSL
ห้ามเปิดพอร์ต 3000 โดยตรงสู่สาธารณะ! ควรใช้ Reverse Proxy เช่น Nginx หรือ Caddy
# ตัวอย่าง Nginx Configuration Snippet
server {
listen 80;
server_name status.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name status.yourdomain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# ... SSL settings ...
location / {
proxy_pass http://localhost:3000; # ชี้ไปที่ Docker Container
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
5. การตรวจสอบและ Logging
“Who monitors the monitor?” ควรมีระบบตรวจสอบสุขภาพของ BetterUptime Instance ตัวเอง เช่น
- ใช้ External Monitoring Service (เช่น UptimeRobot) ตรวจสอบ URL Status Page ของคุณ
- ตั้ง Heartbeat Monitor จากเซิร์ฟเวอร์อีกตัวหนึ่งมายัง BetterUptime Instance
- ส่ง Log จาก Container ไปยัง Centralized Logging System (ELK Stack, Loki, Cloud Logging)
กรณีศึกษาและตัวอย่างการนำไปใช้จริง
กรณีศึกษา 1: Startup SaaS ขนาดเล็ก
ปัญหา: Startup แห่งหนึ่งมีทีม DevOps เพียง 2 คน ต้องการมอนิเตอร์เว็บแอปพลิเคชัน, API 3 ตัว และ Cron Job รายวันสำหรับสร้างรายงาน โดยมีงบประมาณจำกัดและต้องการควบคุมข้อมูลภายในองค์กร
โซลูชัน:
- ดีพลอย BetterUptime Docker บน Cloud VM ขนาดเล็ก (2GB RAM) ราคาประมาณ $10/เดือน
- ตั้งค่า HTTP Check 5 นาทีต่อครั้ง สำหรับเว็บแอปและ API
- ตั้งค่า Heartbeat Monitor สำหรับ Cron Job รายวัน
- Integrate การแจ้งเตือนไปยัง Slack Channel #alerts ของทีม
- ใช้ Cloudflare Tunnel เพื่อให้ Instance สามารถมอนิเตอร์บริการภายใน Private Network ได้โดยไม่ต้องเปิดพอร์ต
ผลลัพธ์: ลดค่าใช้จ่าย Monitoring ลง 60% เมื่อเทียบกับ SaaS Plan ที่ให้ Feature เทียบเท่า ได้รับการแจ้งเตือนล่วงหน้า 2 ครั้งก่อนที่ลูกค้าจะรายงานปัญหา
กรณีศึกษา 2: องค์กรการเงินที่มีข้อกำหนดความปลอดภัยสูง
ปัญหา: ธนาคารแห่งหนึ่งมีนโยบายห้ามส่งข้อมูลการเชื่อมต่อภายใน (เช่น Database Endpoint, Internal API URL) ไปยังบริการ Cloud ภายนอกได้ จำเป็นต้องมี Monitoring Solution ที่รันภายใน Data Center เท่านั้น
โซลูชัน:
- ดีพลอย BetterUptime บน Kubernetes Cluster ภายใน Private Data Center
- ใช้ Internal Load Balancer และ Service Mesh (Istio) สำหรับการ Routing
- ตั้งค่า Monitoring Check มากกว่า 200 จุด สำหรับ Microservice ภายในทั้งหมด
- Integrate การแจ้งเตือนผ่าน Webhook ไปยังระบบ Incident Management ภายในขององค์กร (PagerDuty Enterprise)
- ตั้งค่า Status Page แบบ Private สำหรับทีมงานภายในเท่านั้น
- ทำ High Availability ด้วยการรัน Replica ของ Web, Worker และใช้ PostgreSQL Cluster
ผลลัพธ์: เป็นไปตาม Compliance Policy พร้อมทั้งเพิ่ม Mean Time To Detection (MTTD) ให้เร็วขึ้นอย่างมีนัยสำคัญ สามารถมอนิเตอร์ระบบภายในที่ซับซ้อนได้โดยไม่รั่วไหลของข้อมูล
การเปรียบเทียบ: Self-hosted vs SaaS
| มิติ | BetterUptime Self-hosted (Docker) | BetterUptime SaaS |
|---|---|---|
| ต้นทุน | ต้นทุนต่ำในระยะยาว (เฉพาะ Infrastructure) แต่มีค่าแรงตั้งต้น/ดูแล | ต้นทุนต่อเดือนที่คาดการณ์ได้ แต่เพิ่มตามจำนวน Check |
| ความปลอดภัย & Compliance | ควบคุมข้อมูลได้เต็มที่ เหมาะกับองค์กรที่มีข้อกำหนดเข้มงวด | พึ่งพาการรักษาความปลอดภัยของผู้ให้บริการ |
| ความยืดหยุ่น | ปรับแต่งได้ไม่จำกัด Integrate กับระบบภายในได้ลึก | จำกัดอยู่ภายใน Feature ที่ผู้ให้บริการกำหนด |
| ความสะดวก | ต้องดูแลตั้งค่า, อัพเดท, Backup, Security เองทั้งหมด | ใช้งานได้ทันที ไม่ต้องกังวลเรื่อง Infrastructure |
| การมอนิเตอร์ระบบภายใน | ทำได้ง่ายและปลอดภัย | ทำได้ยาก ต้องใช้ Agent หรือเปิด Firewall ออก |
| ความรับผิดชอบ | คุณรับผิดชอบ Uptime ของ Monitoring ตัวมันเอง | ผู้ให้บริการรับผิดชอบ Uptime ของแพลตฟอร์ม |
Summary
การดีพลอย BetterUptime ด้วย Docker Container เป็นกลยุทธ์ที่ทรงพลังสำหรับทีมและองค์กรที่ต้องการควบคุมระบบตรวจสอบสถานะของตนเองอย่างเต็มที่ ตั้งแต่การเป็นเจ้าของข้อมูล การตรวจสอบบริการภายในเครือข่าย ไปจนถึงการลดต้นทุนในระยะยาว คู่มือฉบับสมบูรณ์นี้ได้พาคุณผ่านทุกขั้นตอน ตั้งแต่การเตรียมสภาพแวดล้อมด้วย Docker Compose การกำหนดค่าที่ปลอดภัยและเหมาะสมสำหรับ Production การ Implement Best Practices ด้าน Backup, Security และ Monitoring ซ้ำสองชั้น รวมไปถึงกรณีศึกษาในโลกจริงที่แสดงให้เห็นถึงความยืดหยุ่นของการนำไปใช้
ในปี 2026 แนวทางนี้ยังคงมีความทันสมัยและเป็นที่นิยม เนื่องจากองค์กรต่างๆ ต่างให้ความสำคัญกับความเป็นอิสระ (Independence) และความปลอดภัยของข้อมูลมากขึ้น การที่คุณสามารถมีเครื่องมือ Monitoring ชั้นดีที่รันอยู่ภายใต้การควบคุมของคุณเอง ไม่เพียงเพิ่มความน่าเชื่อถือของบริการเท่านั้น แต่ยังเสริมสร้างศักยภาพของทีม DevOps ให้สามารถตอบสนองต่อปัญหาได้รวดเร็วและแม่นยำยิ่งขึ้น เริ่มต้นจาก VM เครื่องเล็กๆ ก่อน แล้วค่อยๆ ขยายไปสู่ Kubernetes เมื่อต้องการความยืดหยุ่นและความทนทานต่อความล้มเหลวที่สูงขึ้น สุดท้ายนี้ จำไว้ว่ากฎเหล็กของการ Monitoring คือ “อย่าวางใจการตรวจสอบเพียงจุดเดียว” แม้คุณจะมี BetterUptime ที่ยอดเยี่ยมแล้ว ก็ควรมีกลไกตรวจสอบสุขภาพแบบง่ายๆ จากภายนอกไว้เป็นสายสำรองเสมอ