Healthchecks.io กับ Scaling Strategy วิธี Scale
Healthchecks.io คืออะไร

Healthchecks.io เป็นบริการ Cron Job Monitoring ที่ช่วยตรวจสอบว่า Scheduled Tasks ทำงานตามเวลาหรือไม่ หลักการคือ Cron Job ส่ง HTTP GET/POST ไปยัง Healthchecks.io เมื่อทำงานเสร็จ (Ping) ถ้าไม่ได้รับ Ping ภายในเวลาที่กำหนดจะแจ้งเตือน
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน LLM Fine-tuning LoRA Troubleshooting แก้ปัญหา —
เมื่อใช้ร่วมกับ Scaling Strategy ช่วยตรวจจับว่า Jobs เริ่มช้าลง (Duration เพิ่ม) หรือ Timeout เป็นสัญญาณว่าต้อง Scale Resources เพิ่ม
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: หนตดดอย — คู่มือฉบับสมบูรณ์ 2026
Setup Healthchecks.io
# === Healthchecks.io Setup ===
# 1. สมัครที่ https://healthchecks.io (Free: 20 Checks)
# หรือ Self-hosted ด้วย Docker
# === Self-hosted ด้วย Docker Compose ===
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
healthchecks:
image: healthchecks/healthchecks:latest
ports:
- "8000:8000"
environment:
- DB=postgres
- DB_HOST=postgres
- DB_NAME=healthchecks
- DB_USER=hc
- DB_PASSWORD=SecurePass123
- SECRET_KEY=your-secret-key-here
- ALLOWED_HOSTS=*
- SITE_ROOT=https://hc.example.com
- DEFAULT_FROM_EMAIL=alerts@example.com
- EMAIL_HOST=smtp.gmail.com
- EMAIL_PORT=587
- EMAIL_USE_TLS=True
- EMAIL_HOST_USER=your@gmail.com
- EMAIL_HOST_PASSWORD=app-password
- SLACK_CLIENT_ID=xxx
- SLACK_CLIENT_SECRET=xxx
depends_on:
- postgres
restart: unless-stopped
postgres:
image: postgres:16-alpine
environment:
- POSTGRES_DB=healthchecks
- POSTGRES_USER=hc
- POSTGRES_PASSWORD=SecurePass123
volumes:
- pg-data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
pg-data:
EOF
docker compose up -d
# 2. Cron Job Integration
# แต่ละ Check มี UUID เฉพาะ เช่น:
# https://hc-ping.com/abc123-def456
# === Bash — Ping เมื่อ Job เสร็จ ===
# Backup Script
#!/bin/bash
set -e
CHECK_URL="https://hc-ping.com/abc123-def456"
# แจ้งเริ่มต้น
curl -fsS -m 10 --retry 5 "$CHECK_URL/start" > /dev/null
# ทำงาน
pg_dump mydb | gzip > /backups/mydb_$(date +%Y%m%d).sql.gz
# แจ้งเสร็จ (Ping)
curl -fsS -m 10 --retry 5 "$CHECK_URL" > /dev/null
# ถ้า Error — แจ้ง Fail
# curl -fsS -m 10 --retry 5 "$CHECK_URL/fail" > /dev/null
# 3. Crontab
# 0 2 * * * /opt/scripts/backup.sh 2>&1 | curl -fsS -m 10 \
# --retry 5 --data-binary @- https://hc-ping.com/abc123-def456/log
# 4. Python Integration
# import requests
# CHECK_URL = "https://hc-ping.com/abc123-def456"
# requests.get(f"{CHECK_URL}/start")
# # ... do work ...
# requests.get(CHECK_URL) # Success
# # requests.get(f"{CHECK_URL}/fail") # Failure
echo "Healthchecks.io setup complete"

Kubernetes HPA Integration
# === Kubernetes Auto-scaling ตาม Job Metrics ===
# hpa-config.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: worker-hpa
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: worker
minReplicas: 2
maxReplicas: 20
metrics:
# Scale ตาม CPU
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
# Scale ตาม Queue Length (Custom Metric)
- type: Pods
pods:
metric:
name: job_queue_length
target:
type: AverageValue
averageValue: "10"
behavior:
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Percent
value: 50
periodSeconds: 60
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 25
periodSeconds: 120
---
# === CronJob ที่ส่ง Ping ไป Healthchecks.io ===
apiVersion: batch/v1
kind: CronJob
metadata:
name: data-sync
namespace: production
spec:
schedule: "*/30 * * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
containers:
- name: sync
image: myapp/data-sync:latest
command:
- /bin/sh
- -c
- |
curl -fsS -m 10 "$HC_PING_URL/start"
python sync.py
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
curl -fsS -m 10 "$HC_PING_URL"
else
curl -fsS -m 10 "$HC_PING_URL/fail"
fi
env:
- name: HC_PING_URL
valueFrom:
secretKeyRef:
name: healthchecks
key: data-sync-url
restartPolicy: OnFailure
Best Practices
- Start/Success Pattern: ใช้ /start Ping ก่อนเริ่ม และ Ping เมื่อเสร็จ เพื่อวัด Duration
- Grace Period: ตั้ง Grace Period ให้มากกว่า Max Duration ของ Job ป้องกัน False Alert
- Log Output: ส่ง Log Output ไปกับ Ping ด้วย (POST body) สำหรับ Debug
- Fail Ping: ส่ง /fail เมื่อ Job Error ไม่ใช่แค่รอ Timeout
- Scale Gradually: Scale Up เร็ว Scale Down ช้า ป้องกัน Thrashing
- Monitor Duration Trends: ติดตาม Duration ถ้าเพิ่มขึ้นต่อเนื่อง ต้อง Scale
Healthchecks.io คืออะไร
บริการ Cron Job Monitoring ตรวจสอบ Scheduled Tasks ทำงานตามเวลาหรือไม่ Cron Job ส่ง HTTP Ping เมื่อเสร็จ ถ้าไม่ได้รับ Ping แจ้งเตือน Email Slack PagerDuty Free Plan 20 Checks
แนะนำเพิ่มเติม — XM Signal
เนื้อหาเกี่ยวข้อง — Eleventy Static Agile Scrum Kanban





