Skip to content

MongoDB Ops Manager 监控

监控代理配置

监控代理安装

  1. Linux 系统安装

    bash
    # 下载监控代理
    wget https://cloud.mongodb.com/download/agent/monitoring/mongodb-mms-monitoring-agent_latest_amd64.ubuntu1804.deb
    
    # 安装监控代理
    dpkg -i mongodb-mms-monitoring-agent_latest_amd64.ubuntu1804.deb
    
    # 配置监控代理
    vi /etc/mongodb-mms/monitoring-agent.config
  2. Windows 系统安装

    powershell
    # 下载监控代理 MSI 安装包
    Invoke-WebRequest -Uri "https://cloud.mongodb.com/download/agent/monitoring/mongodb-mms-monitoring-agent-latest.windows_x86_64.msi" -OutFile "mongodb-mms-monitoring-agent.msi"
    
    # 安装监控代理
    msiexec /i mongodb-mms-monitoring-agent.msi /quiet
  3. Docker 部署

    bash
    # 拉取监控代理镜像
    docker pull mongodb/mongodb-enterprise-agent
    
    # 运行监控代理容器
    docker run -d \
      --name monitoring-agent \
      -v /path/to/config:/etc/mongodb-mms \
      mongodb/mongodb-enterprise-agent:latest

监控代理配置文件

  1. 核心配置项

    yaml
    # Ops Manager 服务器 URL
    mmsBaseUrl=https://opsmanager.example.com
    
    # API 密钥
    apiKey=your-api-key-here
    
    # 监控数据收集间隔(秒)
    mongoStatsIntervalSeconds=60
    
    # 系统指标收集间隔(秒)
    systemStatsIntervalSeconds=60
    
    # 日志级别
    logLevel=INFO
  2. 高级配置项

    yaml
    # 启用详细日志
    enableDetailedLogging=true
    
    # 代理身份验证
    authUsername=agent-user
    authPassword=agent-password
    
    # 代理 TLS 配置
    sslRequireValidServerCertificates=true
    sslClientCertificate=/path/to/client.crt
    sslClientCertificatePassword=cert-password

监控代理状态管理

  1. 启动/停止/重启代理

    bash
    # Linux 系统
    systemctl start mongodb-mms-monitoring-agent
    systemctl stop mongodb-mms-monitoring-agent
    systemctl restart mongodb-mms-monitoring-agent
    
    # 检查代理状态
    systemctl status mongodb-mms-monitoring-agent
  2. 查看代理日志

    bash
    # Linux 系统
    tail -f /var/log/mongodb-mms/monitoring-agent.log
    
    # Windows 系统
    Get-Content -Path "C:\Program Files\MongoDB\Ops Manager\Monitoring Agent\log\monitoring-agent.log" -Tail 100 -Wait

监控指标配置

指标收集频率

  1. 默认收集频率

    • 数据库指标:60 秒
    • 系统指标:60 秒
    • 复制集指标:60 秒
    • 分片集群指标:60 秒
  2. 调整收集频率

    yaml
    # 在监控代理配置文件中调整
    mongoStatsIntervalSeconds=30  # 数据库指标收集间隔
    systemStatsIntervalSeconds=30  # 系统指标收集间隔
    replSetStatsIntervalSeconds=30  # 复制集指标收集间隔

自定义监控指标

  1. 添加自定义指标

    javascript
    // 使用 MongoDB 聚合框架创建自定义指标
    db.adminCommand({
      aggregate: 1,
      pipeline: [
        { $currentOp: { allUsers: true } },
        { $group: { _id: "$command", count: { $sum: 1 } } },
        { $out: "custom_metrics.current_operations" }
      ],
      cursor: {}
    })
  2. 在 Ops Manager 中配置自定义指标

    • 登录 Ops Manager Web UI
    • 导航到 "监控" > "自定义指标"
    • 点击 "添加自定义指标"
    • 配置指标名称、数据源和查询

告警配置

告警规则设置

  1. 内置告警规则

    • 实例状态变化
    • 复制延迟过高
    • 连接数过高
    • CPU 使用率过高
    • 内存使用率过高
    • 磁盘空间不足
    • 慢查询数量过多
  2. 创建自定义告警规则

    bash
    # 使用 Ops Manager API 创建告警规则
    curl -X POST \
      -u "apiKey:your-api-key" \
      -H "Content-Type: application/json" \
      -d '{"enabled": true, "alertConfigType": "HOST", "eventTypeName": "HOST_DISK_PARTITION_USAGE", "threshold": 80, "thresholdComparator": "GREATER_THAN"}' \
      https://opsmanager.example.com/api/public/v1.0/groups/{groupId}/alertConfigs
  3. 告警级别

    • 信息:提示性信息,不影响服务
    • 警告:需要关注的潜在问题
    • 严重:影响服务的严重问题
    • 紧急:需要立即处理的紧急问题

告警通知方式

  1. 邮件通知

    • 配置邮件服务器
    • 设置收件人列表
    • 自定义邮件模板
  2. 短信通知

    • 配置 SMS 服务提供商
    • 设置手机号码列表
    • 配置短信模板
  3. Webhook 通知

    • 配置 Webhook URL
    • 选择通知事件类型
    • 配置 Webhook 认证
  4. 第三方集成

    • PagerDuty 集成
    • Slack 集成
    • Microsoft Teams 集成
    • Jira 集成

告警管理

  1. 查看告警历史

    bash
    # 使用 Ops Manager API 查询告警历史
    curl -X GET \
      -u "apiKey:your-api-key" \
      https://opsmanager.example.com/api/public/v1.0/groups/{groupId}/alerts
  2. 静默告警

    • 临时禁用特定告警
    • 设置静默时间窗口
    • 自动恢复告警
  3. 告警升级策略

    • 配置告警升级规则
    • 设置升级时间间隔
    • 配置升级接收人

监控数据可视化

仪表板配置

  1. 默认仪表板

    • 实例概览仪表板:显示所有实例的基本状态
    • 性能仪表板:显示查询、写入、连接等性能指标
    • 复制集仪表板:显示复制集状态和延迟
    • 分片集群仪表板:显示分片分布和状态
  2. 创建自定义仪表板

    • 登录 Ops Manager Web UI
    • 导航到 "监控" > "仪表板"
    • 点击 "创建仪表板"
    • 添加图表和指标
    • 配置图表布局和时间范围
  3. 导出仪表板

    • 支持导出为 PNG 图片
    • 支持导出为 PDF 文档
    • 支持共享仪表板链接

图表类型

  1. 折线图

    • 用于显示指标随时间的变化趋势
    • 适合展示查询速率、写入速率等时间序列数据
  2. 柱状图

    • 用于比较不同时间段或不同实例的指标值
    • 适合展示 CPU 使用率、内存使用率等
  3. 饼图

    • 用于显示数据分布比例
    • 适合展示分片数据分布、集合大小分布等
  4. 热力图

    • 用于显示高密度数据点的分布
    • 适合展示慢查询分布、连接数分布等

数据查询和分析

  1. 时间范围选择

    • 支持预设时间范围:1小时、6小时、24小时、7天、30天
    • 支持自定义时间范围
    • 支持相对时间范围:过去24小时、过去7天
  2. 指标对比

    • 支持在同一图表中对比多个指标
    • 支持对比不同实例的同一指标
    • 支持对比不同时间段的同一指标
  3. 数据导出

    bash
    # 使用 Ops Manager API 导出监控数据
    curl -X GET \
      -u "apiKey:your-api-key" \
      -H "Accept: application/json" \
      https://opsmanager.example.com/api/public/v1.0/groups/{groupId}/hosts/{hostId}/metrics?start=2023-01-01T00:00:00Z&end=2023-01-02T00:00:00Z&metrics=CPU_USAGE,RAM_USAGE

性能诊断

慢查询分析

  1. 慢查询监控

    • Ops Manager 自动收集慢查询日志
    • 支持按查询类型、执行时间、集合等维度过滤
    • 提供慢查询执行计划分析
  2. 慢查询导出

    bash
    # 使用 Ops Manager API 导出慢查询
    curl -X GET \
      -u "apiKey:your-api-key" \
      -H "Accept: application/json" \
      https://opsmanager.example.com/api/public/v1.0/groups/{groupId}/processes/{processId}/profilerLogs?start=2023-01-01T00:00:00Z&end=2023-01-02T00:00:00Z
  3. 慢查询优化建议

    • 自动识别缺少索引的查询
    • 提供索引创建建议
    • 分析查询执行计划,提供优化建议

性能瓶颈定位

  1. 资源瓶颈分析

    • CPU 瓶颈:高 CPU 使用率、上下文切换频繁
    • 内存瓶颈:高内存使用率、频繁页面交换
    • 磁盘瓶颈:高磁盘 I/O、高等待时间
    • 网络瓶颈:高网络延迟、丢包
  2. 连接瓶颈分析

    • 连接数接近或达到上限
    • 连接创建速率过高
    • 连接空闲时间过长
  3. 查询瓶颈分析

    • 慢查询数量过多
    • 全表扫描频繁
    • 索引使用率低

监控最佳实践

监控代理部署最佳实践

  1. 代理数量规划

    • 每个 MongoDB 服务器部署一个监控代理
    • 对于大型集群,考虑部署多个代理分担负载
    • 确保代理服务器有足够的资源
  2. 代理配置优化

    • 根据 MongoDB 实例数量调整收集频率
    • 只收集必要的指标,避免收集过多低价值指标
    • 配置适当的日志级别,避免日志过大
  3. 代理高可用性

    • 监控代理本身的状态
    • 配置代理故障告警
    • 考虑部署备用代理

告警配置最佳实践

  1. 告警规则设计

    • 基于业务需求设置告警阈值
    • 避免设置过多告警,减少误报
    • 为不同级别的告警设置不同的通知方式
  2. 告警测试

    • 定期测试告警通知
    • 验证告警接收和处理流程
    • 调整告警阈值以减少误报
  3. 告警响应流程

    • 建立明确的告警响应流程
    • 定义不同级别告警的处理责任人
    • 记录告警处理过程和结果

性能监控最佳实践

  1. 建立性能基线

    • 收集正常状态下的性能指标
    • 建立性能基线和阈值
    • 定期更新性能基线
  2. 关联分析

    • 关联多个指标进行分析
    • 关联监控数据与业务指标
    • 关联监控数据与日志数据
  3. 定期性能评审

    • 定期评审性能监控数据
    • 识别性能趋势和潜在问题
    • 制定性能优化计划

常见问题(FAQ)

Q1: Ops Manager 监控支持哪些 MongoDB 版本?

A1: Ops Manager 支持监控 MongoDB 3.4 及以上版本,包括社区版和企业版。建议使用最新版本的 Ops Manager 以获得最佳的监控体验和最新功能。

Q2: 监控代理需要哪些系统资源?

A2: 监控代理的资源需求取决于监控的 MongoDB 实例数量和收集频率。一般来说,单个监控代理可以监控 50-100 个 MongoDB 实例,需要:

  • CPU:至少 1 核
  • 内存:至少 1 GB
  • 磁盘空间:至少 10 GB
  • 网络带宽:根据监控实例数量和收集频率而定

Q3: 如何解决监控代理连接失败问题?

A3: 解决监控代理连接失败问题的步骤:

  1. 检查网络连接:确保监控代理可以访问 Ops Manager 服务器
  2. 检查 API 密钥:确保配置文件中的 API 密钥正确
  3. 检查 TLS 配置:确保 TLS 证书有效且配置正确
  4. 检查防火墙规则:确保允许监控代理访问 Ops Manager 服务器的 8443 端口
  5. 查看代理日志:分析代理日志中的错误信息

Q4: 如何调整监控数据的保留时间?

A4: Ops Manager 默认保留监控数据的时间如下:

  • 细粒度数据(1 分钟间隔):保存 24 小时
  • 中等粒度数据(5 分钟间隔):保存 7 天
  • 粗粒度数据(1 小时间隔):保存 30 天

可以通过修改 Ops Manager 配置文件中的以下参数调整保留时间:

yaml
# 细粒度数据保留时间(分钟)
mongodb.metrics.resolution1Minute.retentionMinutes=1440

# 中等粒度数据保留时间(分钟)
mongodb.metrics.resolution5Minute.retentionMinutes=10080

# 粗粒度数据保留时间(分钟)
mongodb.metrics.resolution1Hour.retentionMinutes=43200

Q5: 如何监控 MongoDB Atlas 集群?

A5: MongoDB Atlas 提供了内置的监控功能,无需部署额外的监控代理。可以通过 Atlas Web UI 查看监控数据和设置告警。Atlas 还支持将监控数据导出到外部系统,如 Datadog、New Relic 等。

Q6: Ops Manager 监控与 MongoDB Cloud Manager 有什么区别?

A6: Ops Manager 是本地部署的 MongoDB 管理工具,而 Cloud Manager 是 MongoDB 提供的托管服务。两者的功能基本相同,包括监控、备份、自动化管理等,但部署方式不同:

  • Ops Manager:本地部署,完全控制在用户自己的环境中
  • Cloud Manager:托管服务,由 MongoDB 管理,用户无需维护基础设施

Q7: 如何迁移监控数据?

A7: 迁移 Ops Manager 监控数据的步骤:

  1. 备份原 Ops Manager 数据库中的监控数据
  2. 在新的 Ops Manager 环境中恢复数据
  3. 重新配置监控代理指向新的 Ops Manager 服务器
  4. 验证监控数据是否正常显示

Q8: 如何监控 MongoDB 副本集的选举情况?

A8: 可以通过以下方式监控 MongoDB 副本集的选举情况:

  1. 在 Ops Manager Web UI 中查看复制集的 "选举" 标签页
  2. 设置选举相关的告警规则,如选举次数过多告警
  3. 查看 MongoDB 日志中的选举相关信息
  4. 使用 Ops Manager API 查询选举历史数据

Q9: 如何监控慢查询?

A9: 监控慢查询的方法:

  1. 在 Ops Manager Web UI 中查看 "慢查询" 标签页
  2. 设置慢查询相关的告警规则,如慢查询数量过多告警
  3. 配置慢查询日志,定期分析慢查询日志
  4. 使用自定义指标收集和分析慢查询

Q10: 如何优化监控性能?

A10: 优化监控性能的方法:

  1. 减少监控代理的收集频率
  2. 只收集必要的指标
  3. 增加监控代理的资源(CPU、内存)
  4. 优化 Ops Manager 后端数据库
  5. 使用适当的图表类型和时间范围
  6. 定期清理过期的监控数据