# Momentry 監控系統 ## 概述 Momentry 監控系統採用七層架構,涵蓋從外部服務到本地存儲的全部監控需求。 --- ## 監控架構 (七層) ``` Layer 1: External 監控 - DDNS、網關、互聯網連接 Layer 2: Service 監控 - 15 個 momentry 服務 Layer 3: Workflow 監控 - n8n Workflow 狀態 Layer 4: Portal 監控 - WordPress 頁面與帳號 Layer 5: Database 監控 - PostgreSQL/Redis/Qdrant/MariaDB Layer 6: 使用者監控 - 連線/本機使用者/異常檢測 Layer 7: Storage 監控 - 冷溫熱分層/歸檔/檔案註冊 ``` --- ## 快速開始 ### 查看監控狀態 ```bash cd /Users/accusys/momentry_core_0.1/monitor ./control/monitor_control.sh status ``` ### 執行全面檢查 ```bash ./control/monitor_control.sh check all ``` ### 查看特定層級 ```bash ./control/monitor_control.sh check service # Layer 2 ./control/monitor_control.sh check workflow # Layer 3 ./control/monitor_control.sh check portal # Layer 4 ./control/monitor_control.sh check database # Layer 5 ./control/monitor_control.sh check users # Layer 6 ./control/monitor_control.sh check storage # Layer 7 ``` --- ## 各層監控說明 ### Layer 1: External 監控 監控外部依賴服務的可用性。 **監控項目**: - DDNS 域名解析 (momentry.ddns.net) - 網關連通性 - 外部 API 連接 **腳本**: `service/external_monitor.sh` ### Layer 2: Service 監控 監控 15 個 momentry 服務的運行狀態。 **監控項目**: | 服務 | Port | 狀態檢查 | |------|------|----------| | PostgreSQL | 5432 | pg_isready | | Redis | 6379 | redis-cli ping | | MariaDB | 3306 | mysql ping | | n8n | 5678 | HTTP GET | | Caddy | 443 | HTTPS | | Gitea | 3000 | HTTP | | SFTPGo | 2222 | SSH | | Ollama | 11434 | API | | Qdrant | 6333 | API | | PHP-FPM | - | Process | | RustDesk | 21116 | Port | | MongoDB | 27017 | Mongo ping | **腳本**: `service/health_check.sh` ### Layer 3: n8n Workflow 監控 監控 n8n Workflow 的執行狀態和閒置分析。 **監控項目**: - Workflow 數量與狀態 - 執行次數與結果 - 閒置 Workflow 識別 - 改善建議生成 **閒置定義**: 無排程 AND 無 API 觸發 AND 超過 30 天未執行 **腳本**: - `workflow/n8n_workflow_monitor.sh` - `workflow/idle_analyzer.sh` ### Layer 4: WordPress Portal 監控 監控 WordPress 頁面可訪問性和內部帳號。 **監控項目**: - 首頁/登入頁可訪問性 - 響應時間 - 用戶列表與角色 - 新增/刪除用戶 **腳本**: - `portal/page_monitor.sh` - `portal/account_monitor.sh` ### Layer 5: Database 監控 監控所有資料庫的健康狀態和性能指標。 **PostgreSQL**: - 表數量、行數、大小 - 死元組、慢查詢 - 表結構變更 **Redis**: - 連線數、內存使用 - 命中率、操作數 - 客戶端列表 **Qdrant**: - Collection 列表 - Points 數、向量維度 - 磁盤使用 **MariaDB**: - 連線數、緩衝池 - WordPress 表結構 **腳本**: - `database/postgres_monitor.sh` - `database/redis_monitor.sh` - `database/qdrant_monitor.sh` - `database/mariadb_monitor.sh` ### Layer 6: 使用者監控 監控連線使用者和本機使用者的活動。 **連線使用者**: - SSH 登入與命令 - Web 服務登入 (n8n, Gitea, WP) - 資料庫連線 - SFTP 傳輸 **本機使用者**: - 系統登入 - sudo 使用記錄 - 服務帳戶活動 - 異常檢測 **腳本**: - `users/session_tracker.sh` - `users/login_monitor.sh` - `users/sudo_tracker.sh` - `users/anomaly_detector.sh` ### Layer 7: Storage 架構 管理數據的冷溫熱分層和歸檔策略。 **目錄結構**: ``` /Users/accusys/momentry/ ├── var/ # 服務數據 (熱) ├── etc/ # 配置 (溫) ├── log/ # 日誌 (溫) ├── data/ # 用戶數據 │ ├── family/ # 家庭集群 │ ├── work/ # 工作集群 │ ├── wordpress/ # WP 隔離 │ └── shared/ # 共享 ├── backup/ # 備份 │ ├── daily/ # 每日備份 (保留 30 天) │ ├── weekly/ # 每週備份 (保留 12 週) │ ├── monthly/ # 每月備份 (保留 12 個月) │ └── archive/ # 歸檔 (保留 12 個月+) └── tmp/ # 臨時 ``` **分層標準**: | 等級 | 條件 | 存放 | |------|------|------| | 熱 | 7天內訪問 > 10次 | NVMe | | 溫 | 30天內訪問 > 1次 | RAID | | 冷 | 90天未訪問 | Object Storage | **備份溫冷分層**: | 等級 | 保留時間 | 用途 | |------|---------|------| | daily | 7天 | 快速恢復 | | weekly | 30天 | 標準恢復 | | monthly | 365天 | 長期歸檔 | | archive | >365天 | 法規遵循 | **腳本**: - `storage/storage_manager.sh` - 存儲管理 - `storage/backup_monitor.sh` - 備份監控與溫冷轉移 - `storage/migration_engine.sh` - 數據遷移 - `storage/file_registry.py` - 檔案註冊 --- ## 配置 ### 主配置 編輯 `config/monitor_config.yaml`: ```yaml monitoring: enabled: true check_interval: 300 # 秒 service: enabled: true services: - postgresql - redis - mariadb - n8n - caddy - gitea - sftpgo - ollama - qdrant - php - rustdesk workflow: enabled: true idle_threshold_days: 30 portal: enabled: true database: enabled: true users: enabled: true storage: enabled: false # 獨立實現 ``` --- ## 數據庫表 監控數據存儲在 PostgreSQL `momentry` 資料庫。 **主要表**: - `monitor_services` - 服務健康狀態 - `monitor_workflows` - n8n Workflow 監控 - `monitor_databases` - 資料庫指標 - `monitor_sessions` - 使用者會話 - `monitor_logins` - 登入歷史 - `monitor_anomalies` - 異常檢測 - `file_registry` - 檔案註冊 **創建表**: `database/schema.sql` --- ## 報警規則 | 層級 | 異常類型 | 等級 | 處理 | |------|----------|------|------| | Service | 服務宕機 | Critical | 記錄 | | Service | 響應過慢 | Warning | 記錄 | | Workflow | 閒置 > 30天 | Info | 記錄 | | Workflow | 連續失敗 | Critical | 記錄 | | Portal | 頁面不可訪問 | Critical | 記錄 | | Database | 表結構變更 | Critical | 記錄 | | Database | 連線過載 | Warning | 記錄 | | Users | 暴力破解 | Critical | 記錄 | | Users | 異常登入 | Warning | 記錄 | **異常處理**: 僅記錄到資料庫,後續分析 --- ## 維護 ### 手動執行監控 ```bash # 單次檢查 ./control/monitor_control.sh check service # 持續監控 (每 5 分鐘) ./control/monitor_control.sh monitor ``` ### 查看歷史 ```bash # 查看服務狀態 psql -U accusys -h localhost -d momentry -c "SELECT * FROM monitor_services ORDER BY checked_at DESC LIMIT 10;" # 查看異常 psql -U accusys -h localhost -d momentry -c "SELECT * FROM monitor_anomalies WHERE detected_at > NOW() - INTERVAL '24 hours';" ``` ### 清理歷史數據 ```bash # 保留 30 天 psql -U accusys -h localhost -d momentry -c "DELETE FROM monitor_services WHERE checked_at < NOW() - INTERVAL '30 days';" ``` --- ## 文件結構 ``` monitor/ ├── MONITORING.md # 本文件 ├── config/ │ └── monitor_config.yaml # 配置文件 ├── control/ │ └── monitor_control.sh # 控制腳本 ├── service/ │ ├── health_check.sh # 服務健康檢查 │ └── external_monitor.sh # 外部監控 ├── workflow/ │ ├── n8n_workflow_monitor.sh │ └── idle_analyzer.sh ├── portal/ │ ├── page_monitor.sh │ └── account_monitor.sh ├── database/ │ ├── schema.sql # 數據庫表 │ ├── postgres_monitor.sh │ ├── redis_monitor.sh │ ├── qdrant_monitor.sh │ └── mariadb_monitor.sh ├── users/ │ ├── session_tracker.sh │ ├── login_monitor.sh │ ├── sudo_tracker.sh │ └── anomaly_detector.sh ├── storage/ │ ├── storage_manager.sh │ └── migration_engine.sh └── docs/ └── TROUBLESHOOTING.md ``` --- ## 相關文檔 - [Storage 架構設計規範](./storage/STORAGE_SPEC.md) - [WordPress 監控](./wordpress/MONITORING.md) - [異常檢測規則](./users/ANOMALY_RULES.md)