SQLite Litestream Observability Stack — ระบบ

SQLite Litestream Observability

SQLite Litestream Observability Stack Replication Prometheus Grafana Alertmanager Loki WAL S3 Metrics Dashboard Monitoring
| Component | Role | Port | Data |
|---|---|---|---|
| Litestream | SQLite Replication + Metrics | 9090 (metrics) | WAL → S3/GCS |
| Prometheus | Metrics Collection | 9090 | Time Series Metrics |
| Grafana | Dashboard + Alerting | 3000 | Visualization |
| Alertmanager | Alert Routing | 9093 | Slack Email PagerDuty |
| Loki | Log Aggregation | 3100 | Litestream Logs |
Alert & Recovery
# === Alert Rules & Recovery Procedure ===
@dataclass
class AlertRule:
alert: str
expr: str
duration: str
severity: str
runbook: str
alerts = [
AlertRule("LitestreamDown",
"up{job='litestream'} == 0",
"1m",
"critical",
"ตรวจ Process Status, Restart systemd service, Check Logs"),
AlertRule("ReplicaLagHigh",
"litestream_replica_lag_seconds > 60",
"5m",
"critical",
"ตรวจ Network, S3 Connectivity, Disk I/O, Litestream Logs"),
AlertRule("DatabaseSizeLarge",
"litestream_db_size_bytes > 5e9",
"30m",
"warning",
"ตรวจ Data Growth, VACUUM Database, Archive Old Data"),
AlertRule("WALSizeLarge",
"litestream_wal_size_bytes > 100e6",
"10m",
"warning",
"ตรวจ WAL Checkpoint, Long-running Transactions"),
AlertRule("ReplicationStopped",
"rate(litestream_replica_bytes_total[10m]) == 0",
"10m",
"critical",
"ตรวจ Litestream Process, S3 Permissions, Network"),
]
@dataclass
class RecoveryStep:
step: int
action: str
command: str
duration: str
recovery = [
RecoveryStep(1, "Stop Application",
"systemctl stop my-app",
"5 วินาที"),
RecoveryStep(2, "Restore Database",
"litestream restore -config /etc/litestream.yml /data/app.db",
"1-10 นาที (ขึ้นกับขนาด)"),
RecoveryStep(3, "Verify Database",
"sqlite3 /data/app.db 'PRAGMA integrity_check;'",
"10 วินาที"),
RecoveryStep(4, "Start Application",
"systemctl start my-app",
"5 วินาที"),
RecoveryStep(5, "Start Litestream",
"systemctl start litestream",
"5 วินาที"),
RecoveryStep(6, "Verify Replication",
"curl localhost:9090/metrics | grep replica_lag",
"30 วินาที"),
]
print("=== Alert Rules ===")
for a in alerts:
print(f" [{a.alert}] Severity: {a.severity}")
print(f" Expr: {a.expr} for {a.duration}")
print(f" Runbook: {a.runbook}")
print("\n=== Recovery Steps ===")
for r in recovery:
print(f" Step {r.step}: {r.action} ({r.duration})")
print(f" Command: {r.command}")
เคล็ดลับ
- Sidecar: ใช้ Litestream เป็น Sidecar Container ใน Kubernetes
- Multi-replica: ส่งไปหลาย Storage พร้อมกัน S3 + GCS
- Snapshot: ตั้ง Snapshot Interval 24h เร่ง Restore
- VACUUM: รัน VACUUM เป็นระยะ ลดขนาด Database
- Test: ทดสอบ Restore ทุกเดือน ไม่ใช่แค่ Backup
Best Practices สำหรับนักพัฒนา

การเขียนโค้ดที่ดีไม่ใช่แค่ทำให้โปรแกรมทำงานได้ แต่ต้องเขียนให้อ่านง่าย ดูแลรักษาง่าย และ Scale ได้ หลัก SOLID Principles เป็นพื้นฐานสำคัญที่นักพัฒนาทุกคนควรเข้าใจ ได้แก่ Single Responsibility ที่แต่ละ Class ทำหน้าที่เดียว Open-Closed ที่เปิดให้ขยายแต่ปิดการแก้ไข Liskov Substitution ที่ Subclass ต้องใช้แทน Parent ได้ Interface Segregation ที่แยก Interface ให้เล็ก และ Dependency Inversion ที่พึ่งพา Abstraction ไม่ใช่ Implementation
เรื่อง Testing ก็ขาดไม่ได้ ควรเขียน Unit Test ครอบคลุมอย่างน้อย 80% ของ Code Base ใช้ Integration Test ทดสอบการทำงานร่วมกันของ Module ต่างๆ และ E2E Test สำหรับ Critical User Flow เครื่องมือยอดนิยมเช่น Jest, Pytest, JUnit ช่วยให้การเขียน Test เป็นเรื่องง่าย
เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง DNS over HTTPS Domain Driven Design DDD
เรื่อง Version Control ด้วย Git ใช้ Branch Strategy ที่เหมาะกับทีม เช่น Git Flow สำหรับโปรเจคใหญ่ หรือ Trunk-Based Development สำหรับทีมที่ Deploy บ่อย ทำ Code Review ทุก Pull Request และใช้ CI/CD Pipeline ทำ Automated Testing และ Deployment
แนะนำเพิ่มเติม — ดูสัญญาณเทรดที่ XM Signal
Litestream คืออะไร
SQLite Streaming Replication WAL S3 GCS Real-time Backup Sidecar Low Resource RPO ~0 Restore คำสั่งเดียว Open Source Edge IoT
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: React Suspense Message Queue Design
Observability Stack ประกอบด้วยอะไร
Litestream Metrics Prometheus Grafana Dashboard Alertmanager Loki Logs db_size wal_size replica_lag throughput Snapshot Alert
ตั้งค่า Replication อย่างไร
litestream.yml dbs path replicas type s3 gcs retention sync-interval snapshot-interval systemd Kubernetes Sidecar Volume Share Restore
แนะนำเพิ่มเติม — คอร์สเทรด Forex ที่ iCafeForex
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน Burp Suite Pro Shift Left Security —
Alert ตั้งอย่างไร
Prometheus Alert Rules replica_lag > 60s LitestreamDown DatabaseSize WAL ReplicationStopped Slack PagerDuty Runbook Recovery Restore
สรุป
SQLite Litestream Observability Stack Replication S3 WAL Prometheus Grafana Alertmanager Loki Dashboard Alert Recovery Production
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: Chai N Thai — คู่มือฉบับสมบูรณ์ 2026





