IBM Cloud 特定工具和診斷指令,以排除效能故障
您可以使用 IBM Cloud 的各種工具和功能來協助進行效能疑難排解。
使用 IBM Cloud Monitoring (Sysdig)
MongoDB 與由 Sysdig 提供的 IBM Cloud Monitoring 整合,以獲得全面的可觀察性。
存取監控儀表板
- 在 IBM Cloud 主控台中導航至您的 MongoDB 部署。
- 按一下左側導覽中的監控。
- 按一下啟動監控,開啟 Sysdig 面板。
需要追蹤的主要指標:
-
平台指標:
- CPU 使用率- 目標:< 75% 持續
- 磁碟使用率- 目標:< 80
- 磁碟 IOPS- 飽和監控
- 網路吞吐量- 確認頻寬限制
-
MongoDB-specific 度量:
- 每秒作業次數- 追蹤工作量模式
- 活躍連線- 監控計劃限額
- 複製滯後- 目標:< 1 秒
- 查詢執行時間- 識別緩慢的查詢
- 快取記憶體命中率- 目標:> 95%
設定警示
針對關鍵臨界值建立警示:
Alert: High CPU Usage
Condition: CPU > 80% for 10 minutes
Action: Notify operations team
Alert: Replication Lag
Condition: Replication lag > 5 seconds
Action: Page on-call engineer
Alert: Disk Space
Condition: Disk usage > 85%
Action: Trigger scaling workflow
建立自訂儀表板
- 在 Sysdig 中,按一下儀表板 > 建立儀表板。
- 新增關鍵指標面板。
- 使用篩選器來專注於您的 MongoDB 部署。
- 儲存並與團隊分享。
儀表板佈局範例
- 第 1 行:CPU、記憶體、磁碟使用率
- 第 2 行:每秒作業次數、使用中的連線
- 第 3 行:複製滯後、查詢效能
- 第 4 行:快取統計、鎖爭用
歷史分析
- 使用歷史資料的時間範圍選擇器
- 比較目前的指標與基線
- 識別趨勢和模式
- 將事件與效能變更相關聯
建議採取的行動:
- 在問題發生前設定警示。
- 每日檢閱儀表板。
- 建立基線指標。
- 記錄正常模式與異常模式的比較。
- 使用指標進行容量規劃。
IBM Cloud Activity Tracker 整合
IBM Cloud Activity Tracker 可協助您追蹤可能影響效能的組態變更和管理動作。
存取 Activity Tracker
- 導覽到 Observability > Activity Tracker 在 IBM Cloud 主控台中。
- 選擇您的區域。
- 依據您的 MongoDB 範例篩選事件。
需要監控的關鍵事件:
-
設定變更:
- 擴充作業 (CPU、記憶體、磁碟)
- 備份組態變更
- 網路組態更新
- 使用者存取權限修改
-
影響績效的事件
- 資料庫重新啟動
- 故障移轉事件
- 維護作業
- 索引的建立與刪除
將事件與效能問題相關聯
- 請注意效能下降的時間戳記。
- 在 Activity Tracker 搜尋該時間附近的活動。
- 尋找組態變更或管理動作。
- 與監控指標相關聯。
事件分析範例
Event: Database scaled from 2GB to 4GB RAM
Time: 2024-01-15 14:30:00 UTC
Impact: Temporary connection disruption (30 seconds)
Result: Improved performance after scaling
符合規定的稽核記錄
- 追蹤變更人和變更時間
- 保持遵守安全政策
- 檢視存取模式
- 識別未經授權的變更
建議採取的行動:
- 定期檢閱 Activity Tracker 記錄。
- 為重要事件設定警報。
- 記錄變更管理程序。
- 將事件與效能指標相關聯。
- 用於事故後分析。
IBM Cloud 縮放選項
Databases for MongoDB 提供彈性的擴充選項,以符合您的效能需求。
垂直擴充 (運算與記憶體)
擴充 CPU 和記憶體資源,以處理增加的工作量。
-
使用 IBM Cloud 主控台:
- 導覽到您的 MongoDB 部署。
- 按一下左側導覽中的資源。
- 調整記憶體和 CPU 滑桿。
- 檢討成本影響。
- 按一下刻度。
-
使用 IBM Cloud CLI:
# Scale memory to 8GB and CPU to 4 cores ibmcloud cdb deployment-groups-set <deployment-id> member \ --memory 8192 \ --cpu-allocation 4
考量
- 縮放過程中出現短暫的連線中斷。
- 計劃 5-10 分鐘的停機時間。
- 在飽和之前主動調整規模。
- 監控擴充後的指標。
橫向縮放(複製集成員)
新增複製集成員,以進行讀取擴充和高可用性。
-
使用 IBM Cloud 主控台:
- 導航至「資源」。
- 調整「會員」滑桿。
- 審查配置。
- 按一下刻度。
-
使用 IBM Cloud CLI:
# Add a replica set member ibmcloud cdb deployment-groups-set <deployment-id> member \ --members 4
好處
- 將讀取負載分散至各個二次端子
- 改善容錯能力
- 更好的地理分佈
- 新增會員時不會停機
儲存擴充
增加磁碟空間和 IOPS,以獲得更好的效能。
-
使用 IBM Cloud 主控台:
- 導航至「資源」。
- 調整 Disk(磁碟 )滑桿。
- 檢視 IOPS 分配。
- 按一下刻度。
-
使用 IBM Cloud CLI:
# Scale disk to 100GB ibmcloud cdb deployment-groups-set <deployment-id> member \ --disk-allocation 102400
重要資訊:
- 儲存空間只能增加,不能減少
- IOPS 隨磁碟大小調整
- 儲存擴充不會停機
- 監控磁碟使用趨勢
擴充最佳實務
| 情境 | 建議動作 |
|---|---|
| 高 CPU (>80%) | 縮放 CPU 核心 |
| 磁碟延遲 | 增加磁碟大小以獲得更多 IOPS | 磁碟延遲 | 連線限制 | 擴充至更高層級 | 擴充至更高層級 | 讀取繁重的工作負載 | 新增複製件成員 | 讀取繁重的工作負載 | 新增複製件成員 | 讀取繁重的工作負載 | 寫入量大的工作負載 | 擴充 CPU 和記憶體 | 儲存空間
成本最佳化
- 調整部署的大小。
- 使用監控來確定實際需求。
- 在低流量期間縮小規模 (如果支援)。
- 考慮為可預測的工作負載預留容量。
自動化
# Example: Auto-scale based on CPU threshold
if [ $(ibmcloud cdb deployment-metrics <deployment-id> --metric cpu) -gt 80 ]; then
ibmcloud cdb deployment-groups-set <deployment-id> member --cpu-allocation 6
fi
IBM Cloud 診斷的 CLI 和 API
使用 IBM Cloud CLI 和 API 進行自動診斷和監控。
安裝 IBM Cloud CLI
# Install IBM Cloud CLI
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
# Install databases plugin
ibmcloud plugin install cloud-databases
基本診斷指令
-
取得部署資訊:
# List all MongoDB deployments ibmcloud cdb deployments --type mongodb # Get specific deployment details ibmcloud cdb deployment <deployment-id> -
檢查部署狀態:
# Get deployment status ibmcloud cdb deployment-status <deployment-id> # Get connection strings ibmcloud cdb deployment-connections <deployment-id> -
監控指標:
# Get CPU metrics ibmcloud cdb deployment-metrics <deployment-id> --metric cpu # Get memory metrics ibmcloud cdb deployment-metrics <deployment-id> --metric memory # Get disk metrics ibmcloud cdb deployment-metrics <deployment-id> --metric disk -
縮放操作:
# Scale memory ibmcloud cdb deployment-groups-set <deployment-id> member \ --memory 16384 # Scale CPU ibmcloud cdb deployment-groups-set <deployment-id> member \ --cpu-allocation 8 # Scale disk ibmcloud cdb deployment-groups-set <deployment-id> member \ --disk-allocation 204800 -
備份作業:
# List backups ibmcloud cdb backups <deployment-id> # Get backup information ibmcloud cdb backup <backup-id>
使用 IBM Cloud API
-
鑑別:
# Get IAM token export IAM_TOKEN=$(ibmcloud iam oauth-tokens --output json | jq -r '.iam_token') -
使用 API 取得部署指標:
# Get metrics curl -X GET \ "https://api.{region}.databases.cloud.ibm.com/v5/deployments/{deployment-id}/metrics" \ -H "Authorization: ${IAM_TOKEN}" -
使用 API 進行規模部署:
# Scale resources curl -X PATCH \ "https://api.{region}.databases.cloud.ibm.com/v5/deployments/{deployment-id}/groups/member" \ -H "Authorization: ${IAM_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "memory": { "allocation_mb": 16384 }, "cpu": { "allocation_count": 8 } }' -
診斷腳本範例:
#!/bin/bash # MongoDB Performance Check Script DEPLOYMENT_ID="your-deployment-id" echo "=== MongoDB Performance Diagnostics ===" echo "" # Check CPU CPU=$(ibmcloud cdb deployment-metrics $DEPLOYMENT_ID --metric cpu --output json | jq -r '.metrics[0].value') echo "CPU Usage: ${CPU}%" if [ $(echo "$CPU > 80" | bc) -eq 1 ]; then echo "⚠️ WARNING: High CPU usage detected" fi # Check Memory MEMORY=$(ibmcloud cdb deployment-metrics $DEPLOYMENT_ID --metric memory --output json | jq -r '.metrics[0].value') echo "Memory Usage: ${MEMORY}%" if [ $(echo "$MEMORY > 80" | bc) -eq 1 ]; then echo "⚠️ WARNING: High memory usage detected" fi # Check Disk DISK=$(ibmcloud cdb deployment-metrics $DEPLOYMENT_ID --metric disk --output json | jq -r '.metrics[0].value') echo "Disk Usage: ${DISK}%" if [ $(echo "$DISK > 80" | bc) -eq 1 ]; then echo "⚠️ WARNING: High disk usage detected" fi # Check Status STATUS=$(ibmcloud cdb deployment-status $DEPLOYMENT_ID --output json | jq -r '.status') echo "Deployment Status: ${STATUS}" echo "" echo "=== Diagnostics Complete ===" -
自動化建議
- 安排定期健康檢查。
- 與監控系統整合。
- 根據臨界值自動調整縮放比例。
- 為關鍵指標建立警示。
- 記錄所有作業以進行稽核追蹤。
IBM Cloud 網路最佳化
網路配置會顯著影響 MongoDB 的效能,尤其是分散式應用程式。 比較私人端點與公共端點:
私人端點(建議)
優點:
- 較低延遲
- 加強安全
- 無網際網路出口費用
- IBM Cloud 工作負載的更佳效能
設定:
- 導覽至「設定」>「端點」。
- 啟用私人端點。
- 更新應用程式中的連線字串。
連線字串範例:
mongodb://user:pass@host.private.databases.appdomain.cloud:port/database?authSource=admin&replicaSet=replset
公用端點
使用案例:
- 外部應用程式
- 開發與測試
- 混合雲方案
安全考量:
- 使用 IP 允許列表。
- 執行 TLS / SSL.
- 定期輪換憑證。
服務端點
IBM Cloud 服務端點在 IBM Cloud 內提供最佳化的連線。
好處
- 減少延遲
- 無公共網際網路穿越
- 改善安全勢態
- 節省頻寬成本
配置
# Enable service endpoint
ibmcloud cdb deployment-service-endpoint-enable <deployment-id>
多區域部署考量
Databases for MongoDB 可跨越多個可用性區域。
最佳作法
- 在同一區域部署應用程式。
- 使用讀取偏好設定,將延遲時間降至最低。
- 考慮
nearest閱讀多區應用程式的偏好。 - 監控區域之間的複製滯後。
網路延遲疑難排解
-
測量應用程式的延遲
# Test connection latency time mongo "mongodb://host:port/database" --eval "db.runCommand({ping: 1})" -
從 IBM Cloud shell 檢查
# Ping test (if ICMP allowed) ping -c 10 your-mongodb-host.databases.appdomain.cloud # TCP connection test nc -zv your-mongodb-host.databases.appdomain.cloud 27017
MongoDB 連接診斷
// Check network latency
db.runCommand({ ping: 1 })
// Check connection pool stats
db.serverStatus().connections
地理分佈
適用於全球分散式應用程式:
策略
- 單一區域:最低延遲、單點故障
- 具有讀取複本的多區域:讀取擴充、最終一致性
- 跨區域複製:災難復原、較高的延遲
建議
- 將資料庫放置在主要使用者群附近。
- 將 CDN 用於靜態內容。
- 實施應用程式層級快取。
- 考慮資料居住地要求。
頻寬最佳化
- 使用預測來限制資料傳輸。
- 為大型結果集實施分頁。
- 在應用程式層級壓縮資料。
- 使用大量作業以減少往返行程。
連線池最佳實作
// Node.js example
const client = new MongoClient(uri, {
maxPoolSize: 50,
minPoolSize: 10,
maxIdleTimeMS: 30000,
serverSelectionTimeoutMS: 5000,
socketTimeoutMS: 45000
});