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 เป็นเรื่องง่าย
เรื่อง Version Control ด้วย Git ใช้ Branch Strategy ที่เหมาะกับทีม เช่น Git Flow สำหรับโปรเจคใหญ่ หรือ Trunk-Based Development สำหรับทีมที่ Deploy บ่อย ทำ Code Review ทุก Pull Request และใช้ CI/CD Pipeline ทำ Automated Testing และ Deployment
Litestream คืออะไร
SQLite Streaming Replication WAL S3 GCS Real-time Backup Sidecar Low Resource RPO ~0 Restore คำสั่งเดียว Open Source Edge IoT
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
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





