ทำไมต้องมีระบบเฝ้าดู API?
ลองนึกภาพว่าระบบของคุณทำงานอยู่เป็นประจำ แต่คุณไม่รู้ว่า: - API ตอบสนองช้าลงหรือเปล่า? - มีคำขอที่ล้มเหลวมากเท่าไหร่? - ค่าใช้จ่ายประจำวันเป็นเท่าไหร่? - โมเดลไหนใช้งานหนักที่สุด? ถ้าคุณไม่มีระบบเฝ้าดู คุณจะรู้ปัญหาก็ต่อเมื่อลูกค้าบอกว่า "ระบบพังแล้ว" นั่นคือสิ่งที่บทความนี้จะช่วยคุณป้องกัน ระบบที่เราจะสร้างกันวันนี้ประกอบด้วย 3 ส่วนหลัก: 1. **Prometheus** - ตัวเก็บตัวเลขสถิติ 2. **Grafana** - หน้าจอแสดงผลสวยๆ 3. **ช่องทางแจ้งเตือน** - ไลน์, อีเมล, SMS เลือกได้ ---เครื่องมือที่ใช้มีอะไรบ้าง
ก่อนเริ่ม มาทำความรู้จักเครื่องมือแต่ละตัวกัน: | เครื่องมือ | ทำหน้าที่ | ราคา | |-----------|-----------|------| | Prometheus | เก็บข้อมูลตัวเลขจาก API เป็นระยะๆ | ฟรี | | Grafana | แสดงข้อมูลเป็นกราฟสวยๆ | ฟรี (เวอร์ชันเบสิค) | | Docker | รันโปรแกรมทุกตัวพร้อมกัน | ฟรี | ---ขั้นตอนที่ 1: ติดตั้ง Docker
Docker คือโปรแกรมที่ช่วยให้เราติดตั้งเครื่องมือต่างๆ ได้ง่ายๆ ถ้าคุณยังไม่มี: 1. ไปที่ https://www.docker.com/ 2. ดาวน์โหลด Docker Desktop 3. ติดตั้งตามขั้นตอนที่หน้าจอแนะนำ หลังติดตั้งเสร็จ เปิด Terminal (หรือ Command Prompt) แล้วพิมพ์:docker --version
ถ้าขึ้นเวอร์ชันแสดงว่าติดตั้งสำเร็จ
---
ขั้นตอนที่ 2: สร้างไฟล์ตั้งค่าระบบ
สร้างโฟลเดอร์ใหม่ชื่อholysheep-monitor แล้วสร้างไฟล์ docker-compose.yml ข้างใน:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:
ไฟล์นี้บอก Docker ว่าให้ดาวน์โหลดและรัน Prometheus กับ Grafana พร้อมกัน
---
ขั้นตอนที่ 3: ตั้งค่า Prometheus ให้อ่านข้อมูลจาก API
สร้างไฟล์prometheus.yml ในโฟลเดอร์เดียวกัน:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'holysheep-api'
static_configs:
- targets: ['localhost:9091']
metrics_path: '/metrics'
ไฟล์นี้บอก Prometheus ว่าให้ไปเก็บข้อมูลจาก port 9091 ทุก 15 วินาที
---
ขั้นตอนที่ 4: สร้างตัวเก็บข้อมูล Metrics
นี่คือสคริปต์ Python ที่จะเก็บข้อมูลจาก HolySheep API แล้วส่งให้ Prometheusimport requests
import time
from prometheus_client import start_http_server, Counter, Histogram, Gauge
กำหนด API endpoint
BASE_URL = "https://api.holysheep.ai/v1"
กำหนด Metrics ที่จะเก็บ
request_count = Counter('holysheep_requests_total', 'จำนวนคำขอทั้งหมด', ['model', 'status'])
request_duration = Histogram('holysheep_request_duration_seconds', 'เวลาตอบสนอง', ['model'])
error_count = Counter('holysheep_errors_total', 'จำนวนคำขอที่ล้มเหลว', ['error_type'])
cost_gauge = Gauge('holysheep_daily_cost', 'ค่าใช้จ่ายวันนี้ (USD)')
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
def check_api_health():
"""ตรวจสอบสถานะ API ทุก 15 วินาที"""
models = ['gpt-4.1', 'claude-sonnet-4.5', 'gemini-2.5-flash', 'deepseek-v3.2']
for model in models:
start_time = time.time()
try:
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# ทดสอบ API ด้วย prompt สั้นๆ
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json={
"model": model,
"messages": [{"role": "user", "content": "test"}],
"max_tokens": 5
},
timeout=10
)
duration = time.time() - start_time
if response.status_code == 200:
request_count.labels(model=model, status='success').inc()
request_duration.labels(model=model).observe(duration)
else:
request_count.labels(model=model, status='error').inc()
error_count.labels(error_type=str(response.status_code)).inc()
except requests.exceptions.Timeout:
request_count.labels(model=model, status='timeout').inc()
error_count.labels(error_type='timeout').inc()
except Exception as e:
request_count.labels(model=model, status='exception').inc()
error_count.labels(error_type='exception').inc()
def start_metrics_server():
"""เริ่มเซิร์ฟเวอร์สำหรับ Prometheus ดึงข้อมูล"""
start_http_server(9091)
print("Metrics server started on port 9091")
if __name__ == "__main__":
start_metrics_server()
while True:
check_api_health()
time.sleep(15) # ตรวจสอบทุก 15 วินาที
วิธีติดตั้งและรัน:
# ติดตั้งไลบรารีที่ต้องใช้
pip install requests prometheus-client
รันสคริปต์
python metrics_collector.py
ถ้าขึ้น "Metrics server started on port 9091" แสดงว่าสำเร็จ
---
ขั้นตอนที่ 5: เปิดระบบทั้งหมด
กลับไปที่โฟลเดอร์holysheep-monitor แล้วรัน:
docker-compose up -d
รอสักครู่ แล้วเช็คว่าทุกอย่างรันถูกต้อง:
docker ps
คุณจะเห็น 2 คอนเทนเนอร์ทำงานอยู่:
- prometheus
- grafana
---
ขั้นตอนที่ 6: ตั้งค่า Grafana Dashboard
1. เปิดเบราว์เซอร์ไปที่ http://localhost:3000 2. ล็อกอินด้วย user:admin password: admin
3. คลิกที่ **Add your first data source**
4. เลือก **Prometheus**
5. ช่อง URL ใส่ http://prometheus:9090
6. คลิก **Save & Test**
สร้าง Dashboard ใหม่
1. คลิก **+** → **Dashboard** 2. คลิก **Add new panel** 3. ช่อง Metrics ใส่:rate(holysheep_requests_total[5m])
4. เลือก Visualization เป็น **Graph**
5. ตั้งชื่อว่า "จำนวนคำขอต่อนาที"
6. คลิก **Save**
ทำซ้ำขั้นตอนนี้สร้างอีก 2 panel:
- **เวลาตอบสนองเฉลี่ย:** histogram_quantile(0.95, rate(holysheep_request_duration_seconds_bucket[5m]))
- **อัตราความสำเร็จ:** sum(rate(holysheep_requests_total{status="success"}[5m])) / sum(rate(holysheep_requests_total[5m])) * 100
---
ขั้นตอนที่ 7: ตั้งค่าการแจ้งเตือน
การแจ้งเตือนผ่าน LINE Notify
1. ไปที่ https://notify-bot.line.me/ 2. ล็อกอินแล้วสร้าง Personal Access Token 3. คัดลอก Token สร้างไฟล์alert_handler.py:
import requests
import time
LINE_TOKEN = "YOUR_LINE_NOTIFY_TOKEN"
def send_line_alert(message):
"""ส่งการแจ้งเตือนไป LINE Notify"""
url = "https://notify-api.line.me/api/notify"
headers = {
"Authorization": f"Bearer {LINE_TOKEN}"
}
data = {
"message": message
}
response = requests.post(url, headers=headers, data=data)
return response.status_code == 200
def check_and_alert(metrics_data):
"""ตรวจสอบเงื่อนไขแล้วส่งการแจ้งเตือน"""
# ถ้า error rate เกิน 5%
if metrics_data['error_rate'] > 5:
send_line_alert(
f"⚠️ HolySheep API Alert\n"
f"Error Rate: {metrics_data['error_rate']:.2f}%\n"
f"การดำเนินการ: ตรวจสอบสถานะ API"
)
# ถ้าเวลาตอบสนองเกิน 2 วินาที
if metrics_data['avg_duration'] > 2:
send_line_alert(
f"🐌 HolySheep API ตอบสนองช้า\n"
f"เวลาเฉลี่ย: {metrics_data['avg_duration']:.2f}s\n"
f"การดำเนินการ: ตรวจสอบ latency"
)
# ถ้าค่าใช้จ่ายเกิน $100/วัน
if metrics_data['daily_cost'] > 100:
send_line_alert(
f"💰 HolySheep API ค่าใช้จ่ายสูง\n"
f"วันนี้ใช้ไป: ${metrics_data['daily_cost']:.2f}\n"
f"การดำเนินการ: ตรวจสอบ usage pattern"
)
if __name__ == "__main__":
# ทดสอบส่งข้อความ
test_message = "ทดสอบ: ระบบแจ้งเตือน HolySheep API ทำงานปกติ ✅"
if send_line_alert(test_message):
print("ส่งการแจ้งเตือนสำเร็จ!")
else:
print("ส่งการแจ้งเตือนล้มเหลว ตรวจสอบ LINE Token")
การแจ้งเตือนผ่านอีเมล
สร้างไฟล์email_alert.py:
import smtplib
from email.mime.text import MIMEText
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
EMAIL_USER = "[email protected]"
EMAIL_PASSWORD = "your-app-password"
ALERT_EMAIL = "[email protected]"
def send_email_alert(subject, body):
"""ส่งการแจ้งเตือนทางอีเมล"""
msg = MIMEText(body, 'html')
msg['Subject'] = subject
msg['From'] = EMAIL_USER
msg['To'] = ALERT_EMAIL
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_USER, EMAIL_PASSWORD)
server.send_message(msg)
def critical_alert(service, error_detail):
"""ส่งการแจ้งเตือนวิกฤต"""
subject = f"🚨 HolySheep API Critical: {service}"
body = f"""
พบปัญหาวิกฤต
บริการ: {service}
รายละเอียด: {error_detail}
เวลา: {time.strftime('%Y-%m-%d %H:%M:%S')}
กรุณาดำเนินการตรวจสอบโดยด่วน
"""
send_email_alert(subject, body)
if __name__ == "__main__":
# ทดสอบ
send_email_alert(
"ทดสอบ: ระบบแจ้งเตือนอีเมล",
"การแจ้งเตือนทำงานปกติ ✅"
)
---
ภาพหน้าจอตัวอย่าง Dashboard
เมื่อตั้งค่าเสร็จแล้ว คุณจะเห็นหน้าจอแบบนี้:┌─────────────────────────────────────────────────────────┐
│ HolySheep API Monitoring Dashboard │
├─────────────────────────────────────────────────────────┤
│ 📊 Requests/min │ ⚡ Avg Latency │ ✅ Success % │
│ 1,234 │ 45ms │ 99.7% │
├─────────────────────────────────────────────────────────┤
│ [กราฟเส้นแสดง requests ย้อนหลัง 24 ชม.] │
├─────────────────────────────────────────────────────────┤
│ 💰 Daily Cost │ 🔥 Hot Models │ ⚠️ Errors │
│ $23.50 │ GPT-4.1 │ 0.3% │
└─────────────────────────────────────────────────────────┘
---
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
1. Docker รันไม่ขึ้น ข้อความ "port already in use"
**สาเหตุ:** Port ที่ใช้ถูกโปรแกรมอื่นใช้งานอยู่ **วิธีแก้ไข:**# ดูว่า port ไหนถูกใช้
netstat -an | grep 9090
หรือเปลี่ยน port ใน docker-compose.yml
เปลี่ยน "9090:9090" เป็น "9091:9090"
---
2. Prometheus ไม่ดึงข้อมูลจาก API
**สาเหตุ:** สคริปต์ metrics_collector.py ไม่ได้รันอยู่ หรือ API Key ไม่ถูกต้อง **วิธีแก้ไข:**# เช็คว่าสคริปต์รันอยู่ไหม
ps aux | grep python
ดู log ของสคริปต์
python metrics_collector.py
ถ้าขึ้น 401 Unauthorized แสดงว่า API Key ผิด
ไปสร้างใหม่ที่ https://www.holysheep.ai/api-keys
---
3. LINE Notify ส่งไม่ออก
**สาเหตุ:** LINE Token ไม่ถูกต้อง หรือไม่ได้ตั้งค่าสิทธิ์ **วิธีแก้ไข:**# ทดสอบ LINE Token ด้วย curl
curl -X POST \
-H "Authorization: Bearer YOUR_LINE_TOKEN" \
-F "message=ทดสอบ" \
https://notify-api.line.me/api/notify
ถ้าได้ {"status":200} แสดงว่าใช้ได้
ถ้าได้ {"status":401} แสดงว่า Token ผิด ต้องสร้างใหม่
---
4. Grafana เปิดไม่ได้ ข้อความ "502 Bad Gateway"
**สาเหตุ:** Grafana container ยังไม่พร้อม หรือล้มเหลว **วิธีแก้ไข:**# ดู log ของ Grafana
docker logs grafana
restart container
docker-compose restart grafana
ถ้ายังมีปัญหา ให้ลบ volumes แล้วสร้างใหม่
docker-compose down -v
docker-compose up -d
---