IBM Cloud 特定工具和診斷指令,以排除效能故障

您可以使用 IBM Cloud 的各種工具和功能來協助進行效能疑難排解。

使用 IBM Cloud Monitoring (Sysdig)

MongoDB 與由 Sysdig 提供的 IBM Cloud Monitoring 整合,以獲得全面的可觀察性。

存取監控儀表板

  1. 在 IBM Cloud 主控台中導航至您的 MongoDB 部署。
  2. 按一下左側導覽中的監控
  3. 按一下啟動監控,開啟 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

建立自訂儀表板

  1. 在 Sysdig 中,按一下儀表板 > 建立儀表板
  2. 新增關鍵指標面板。
  3. 使用篩選器來專注於您的 MongoDB 部署。
  4. 儲存並與團隊分享。

儀表板佈局範例

  • 第 1 行:CPU、記憶體、磁碟使用率
  • 第 2 行:每秒作業次數、使用中的連線
  • 第 3 行:複製滯後、查詢效能
  • 第 4 行:快取統計、鎖爭用

歷史分析

  • 使用歷史資料的時間範圍選擇器
  • 比較目前的指標與基線
  • 識別趨勢和模式
  • 將事件與效能變更相關聯

建議採取的行動:

  • 在問題發生前設定警示。
  • 每日檢閱儀表板。
  • 建立基線指標。
  • 記錄正常模式與異常模式的比較。
  • 使用指標進行容量規劃。

IBM Cloud Activity Tracker 整合

IBM Cloud Activity Tracker 可協助您追蹤可能影響效能的組態變更和管理動作。

存取 Activity Tracker

  1. 導覽到 Observability > Activity Tracker 在 IBM Cloud 主控台中。
  2. 選擇您的區域。
  3. 依據您的 MongoDB 範例篩選事件。

需要監控的關鍵事件:

  • 設定變更:

    • 擴充作業 (CPU、記憶體、磁碟)
    • 備份組態變更
    • 網路組態更新
    • 使用者存取權限修改
  • 影響績效的事件

    • 資料庫重新啟動
    • 故障移轉事件
    • 維護作業
    • 索引的建立與刪除

將事件與效能問題相關聯

  1. 請注意效能下降的時間戳記。
  2. 在 Activity Tracker 搜尋該時間附近的活動。
  3. 尋找組態變更或管理動作。
  4. 與監控指標相關聯。

事件分析範例

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 主控台:

    1. 導覽到您的 MongoDB 部署。
    2. 按一下左側導覽中的資源
    3. 調整記憶體CPU 滑桿。
    4. 檢討成本影響。
    5. 按一下刻度
  • 使用 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 主控台:

    1. 導航至「資源」。
    2. 調整「會員」滑桿。
    3. 審查配置。
    4. 按一下刻度
  • 使用 IBM Cloud CLI:

    # Add a replica set member
    ibmcloud cdb deployment-groups-set <deployment-id> member \
      --members 4
    

好處

  • 將讀取負載分散至各個二次端子
  • 改善容錯能力
  • 更好的地理分佈
  • 新增會員時不會停機

儲存擴充

增加磁碟空間和 IOPS,以獲得更好的效能。

  • 使用 IBM Cloud 主控台:

    1. 導航至「資源」。
    2. 調整 Disk(磁碟 )滑桿。
    3. 檢視 IOPS 分配。
    4. 按一下刻度
  • 使用 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 工作負載的更佳效能

設定:

  1. 導覽至「設定」>「端點」。
  2. 啟用私人端點
  3. 更新應用程式中的連線字串。

連線字串範例:

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
});