當前系統已經涵蓋了多項功能,例如在樹莓派上的算力、記憶體、儲存的消耗。 在裝置之間的流量進出,透過 API (FastAPI) 進行的操作,資料庫,以及其他的周邊硬體。
CPU / RAM / Disk
Network
FastAPI
SQLite
ESP32
Meshtastic
在系統發生異常時,希望透過 log 進行錯誤排查,就有賴於程式一邊運行一邊留下的記號。
在開發的過程中,常見用 print() 方式直接輸出字串到螢幕,對於單一檔案的程式碼來說還勉強可以搜尋看看字串從哪邊吐出,頂多就是確定剛剛踩過某幾行程式碼,最後不知道怎麼死的,然後猜想可能造成失敗的原因。 但在系統龐大到很難用搜尋的方式追查後,就該思考應該在 log 中記錄些有用的訊息了!
import logging
logging.basicConfig(
level=logging.INFO,
format=(
"%(asctime)s "
"%(levelname)s "
"%(name)s "
"%(message)s"
),
)
logger = logging.getLogger(
"beggarFridge"
)
ESP32
│
│ Device Events
▼
FastAPI ───────────────┐
│ │
BarcodeService │
AMISProvider │
NotificationService │
NetworkMonitor │
MeshtasticService │
│ │
└──────────┬────────┘
▼
Logging Layer
│
┌───────┴────────┐
▼ ▼
journalctl Rotating Log
│ │
└───────┬────────┘
▼
Troubleshooting
│
┌──────┴──────┐
▼ ▼
Recent Events Runbook
│
▼
System Dashboard