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 控制台:
- 导航至资源。
- 调整磁盘滑块。
- 审查 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}" -
使用应用程序接口扩大部署规模:
# 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 外壳检查
# 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
});