外观
MongoDB Ops Manager 监控
监控代理配置
监控代理安装
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.configWindows 系统安装
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 /quietDocker 部署
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
监控代理配置文件
核心配置项
yaml# Ops Manager 服务器 URL mmsBaseUrl=https://opsmanager.example.com # API 密钥 apiKey=your-api-key-here # 监控数据收集间隔(秒) mongoStatsIntervalSeconds=60 # 系统指标收集间隔(秒) systemStatsIntervalSeconds=60 # 日志级别 logLevel=INFO高级配置项
yaml# 启用详细日志 enableDetailedLogging=true # 代理身份验证 authUsername=agent-user authPassword=agent-password # 代理 TLS 配置 sslRequireValidServerCertificates=true sslClientCertificate=/path/to/client.crt sslClientCertificatePassword=cert-password
监控代理状态管理
启动/停止/重启代理
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查看代理日志
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
监控指标配置
指标收集频率
默认收集频率
- 数据库指标:60 秒
- 系统指标:60 秒
- 复制集指标:60 秒
- 分片集群指标:60 秒
调整收集频率
yaml# 在监控代理配置文件中调整 mongoStatsIntervalSeconds=30 # 数据库指标收集间隔 systemStatsIntervalSeconds=30 # 系统指标收集间隔 replSetStatsIntervalSeconds=30 # 复制集指标收集间隔
自定义监控指标
添加自定义指标
javascript// 使用 MongoDB 聚合框架创建自定义指标 db.adminCommand({ aggregate: 1, pipeline: [ { $currentOp: { allUsers: true } }, { $group: { _id: "$command", count: { $sum: 1 } } }, { $out: "custom_metrics.current_operations" } ], cursor: {} })在 Ops Manager 中配置自定义指标
- 登录 Ops Manager Web UI
- 导航到 "监控" > "自定义指标"
- 点击 "添加自定义指标"
- 配置指标名称、数据源和查询
告警配置
告警规则设置
内置告警规则
- 实例状态变化
- 复制延迟过高
- 连接数过高
- CPU 使用率过高
- 内存使用率过高
- 磁盘空间不足
- 慢查询数量过多
创建自定义告警规则
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告警级别
- 信息:提示性信息,不影响服务
- 警告:需要关注的潜在问题
- 严重:影响服务的严重问题
- 紧急:需要立即处理的紧急问题
告警通知方式
邮件通知
- 配置邮件服务器
- 设置收件人列表
- 自定义邮件模板
短信通知
- 配置 SMS 服务提供商
- 设置手机号码列表
- 配置短信模板
Webhook 通知
- 配置 Webhook URL
- 选择通知事件类型
- 配置 Webhook 认证
第三方集成
- PagerDuty 集成
- Slack 集成
- Microsoft Teams 集成
- Jira 集成
告警管理
查看告警历史
bash# 使用 Ops Manager API 查询告警历史 curl -X GET \ -u "apiKey:your-api-key" \ https://opsmanager.example.com/api/public/v1.0/groups/{groupId}/alerts静默告警
- 临时禁用特定告警
- 设置静默时间窗口
- 自动恢复告警
告警升级策略
- 配置告警升级规则
- 设置升级时间间隔
- 配置升级接收人
监控数据可视化
仪表板配置
默认仪表板
- 实例概览仪表板:显示所有实例的基本状态
- 性能仪表板:显示查询、写入、连接等性能指标
- 复制集仪表板:显示复制集状态和延迟
- 分片集群仪表板:显示分片分布和状态
创建自定义仪表板
- 登录 Ops Manager Web UI
- 导航到 "监控" > "仪表板"
- 点击 "创建仪表板"
- 添加图表和指标
- 配置图表布局和时间范围
导出仪表板
- 支持导出为 PNG 图片
- 支持导出为 PDF 文档
- 支持共享仪表板链接
图表类型
折线图
- 用于显示指标随时间的变化趋势
- 适合展示查询速率、写入速率等时间序列数据
柱状图
- 用于比较不同时间段或不同实例的指标值
- 适合展示 CPU 使用率、内存使用率等
饼图
- 用于显示数据分布比例
- 适合展示分片数据分布、集合大小分布等
热力图
- 用于显示高密度数据点的分布
- 适合展示慢查询分布、连接数分布等
数据查询和分析
时间范围选择
- 支持预设时间范围:1小时、6小时、24小时、7天、30天
- 支持自定义时间范围
- 支持相对时间范围:过去24小时、过去7天
指标对比
- 支持在同一图表中对比多个指标
- 支持对比不同实例的同一指标
- 支持对比不同时间段的同一指标
数据导出
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
性能诊断
慢查询分析
慢查询监控
- Ops Manager 自动收集慢查询日志
- 支持按查询类型、执行时间、集合等维度过滤
- 提供慢查询执行计划分析
慢查询导出
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慢查询优化建议
- 自动识别缺少索引的查询
- 提供索引创建建议
- 分析查询执行计划,提供优化建议
性能瓶颈定位
资源瓶颈分析
- CPU 瓶颈:高 CPU 使用率、上下文切换频繁
- 内存瓶颈:高内存使用率、频繁页面交换
- 磁盘瓶颈:高磁盘 I/O、高等待时间
- 网络瓶颈:高网络延迟、丢包
连接瓶颈分析
- 连接数接近或达到上限
- 连接创建速率过高
- 连接空闲时间过长
查询瓶颈分析
- 慢查询数量过多
- 全表扫描频繁
- 索引使用率低
监控最佳实践
监控代理部署最佳实践
代理数量规划
- 每个 MongoDB 服务器部署一个监控代理
- 对于大型集群,考虑部署多个代理分担负载
- 确保代理服务器有足够的资源
代理配置优化
- 根据 MongoDB 实例数量调整收集频率
- 只收集必要的指标,避免收集过多低价值指标
- 配置适当的日志级别,避免日志过大
代理高可用性
- 监控代理本身的状态
- 配置代理故障告警
- 考虑部署备用代理
告警配置最佳实践
告警规则设计
- 基于业务需求设置告警阈值
- 避免设置过多告警,减少误报
- 为不同级别的告警设置不同的通知方式
告警测试
- 定期测试告警通知
- 验证告警接收和处理流程
- 调整告警阈值以减少误报
告警响应流程
- 建立明确的告警响应流程
- 定义不同级别告警的处理责任人
- 记录告警处理过程和结果
性能监控最佳实践
建立性能基线
- 收集正常状态下的性能指标
- 建立性能基线和阈值
- 定期更新性能基线
关联分析
- 关联多个指标进行分析
- 关联监控数据与业务指标
- 关联监控数据与日志数据
定期性能评审
- 定期评审性能监控数据
- 识别性能趋势和潜在问题
- 制定性能优化计划
常见问题(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: 解决监控代理连接失败问题的步骤:
- 检查网络连接:确保监控代理可以访问 Ops Manager 服务器
- 检查 API 密钥:确保配置文件中的 API 密钥正确
- 检查 TLS 配置:确保 TLS 证书有效且配置正确
- 检查防火墙规则:确保允许监控代理访问 Ops Manager 服务器的 8443 端口
- 查看代理日志:分析代理日志中的错误信息
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=43200Q5: 如何监控 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 监控数据的步骤:
- 备份原 Ops Manager 数据库中的监控数据
- 在新的 Ops Manager 环境中恢复数据
- 重新配置监控代理指向新的 Ops Manager 服务器
- 验证监控数据是否正常显示
Q8: 如何监控 MongoDB 副本集的选举情况?
A8: 可以通过以下方式监控 MongoDB 副本集的选举情况:
- 在 Ops Manager Web UI 中查看复制集的 "选举" 标签页
- 设置选举相关的告警规则,如选举次数过多告警
- 查看 MongoDB 日志中的选举相关信息
- 使用 Ops Manager API 查询选举历史数据
Q9: 如何监控慢查询?
A9: 监控慢查询的方法:
- 在 Ops Manager Web UI 中查看 "慢查询" 标签页
- 设置慢查询相关的告警规则,如慢查询数量过多告警
- 配置慢查询日志,定期分析慢查询日志
- 使用自定义指标收集和分析慢查询
Q10: 如何优化监控性能?
A10: 优化监控性能的方法:
- 减少监控代理的收集频率
- 只收集必要的指标
- 增加监控代理的资源(CPU、内存)
- 优化 Ops Manager 后端数据库
- 使用适当的图表类型和时间范围
- 定期清理过期的监控数据
