MongoDB的性能监控和故障排除的强大工具FTDC(Full-Time Diagnostics Capture)
2023-08-20 21:07 abce 阅读(717) 评论(0) 编辑 收藏 举报
MongoDB的FTDC(全时诊断捕获)是一项强大的诊断功能,可捕获关于MongoDB数据库性能、操作和行为的详细信息。它为数据库的运行提供了有价值的深入洞察,有助于性能监控和故障排除。
在本文中,将深入探讨MongoDB的FTDC(全时诊断数据捕获)功能的强大功能。将探讨它如何捕获有关MongoDB实例性能和运行的全面数据,使管理员和开发人员能够实时了解数据库的健康状况和性能。
FTDC一览
FTDC(全时诊断捕获)是集成到MongoDB的一项强大功能,可捕获有关MongoDB实例性能和运行的详细信息。它能确保持续捕获数据,为用户提供数据库性能和运行情况的实时视图。
FTDC采集的数据以压缩格式存储,终端用户无法直接读取。这种格式可确保高效利用存储空间,同时保持数据的完整性。
FTDC在MongoDB 3.2(通过 SERVER-19585)中引入,专门用于从某些命令中增量收集诊断数据。这些宝贵的信息有助于MongoDB支持人员有效地排除故障和解决问题。
在MongoDB的功能中,FTDC是最重要的功能之一。它可以每秒捕获数据,使管理员和开发人员能够更高粒度地监控数据库的性能。此外,为防止过度使用存储空间,FTDC对diagnostic.data文件夹大小的最大限制为200MB。
禁用FTDC
在配置文件中禁用,设置参数:
1 2 3 4 | # vi /etc/mongod.conf 添加以下内容: setParameter: diagnosticDataCollectionEnabled: false |
保存后,重启mongodb实例。
在mongodb shell禁用,使用以下命令:
1 | db.adminCommand({setParameter: 1, diagnosticDataCollectionEnabled: false }) |
一般建议开启该特性。默认是开启的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | PRIMARY > db.adminCommand( { getParameter:1, diagnosticDataCollectionEnabled:1 } ) { "diagnosticDataCollectionEnabled" : true , "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp (1692511843, 1), "signature" : { "hash" : BinData(0, "Hak9GmzLB/P4GcU4BrM35Pz6024=" ), "keyId" : NumberLong( "7205123825942396933" ) } }, "operationTime" : Timestamp (1692511843, 1) } PRIMARY > |
FTDC的默认路径
monogodb开启FTDC功能后,收集的数据存放在实例的dbPath下的diagnostic.data中。
mongos存放FTDC数据的位置是根据systemLog.path的设置来的,mongodb截断了日志的扩展名,并加上diagnostic.data作为扩张名。假如日志文件名是/var/log/mongodb/mongos.log,则对应的FTDC的位置就是/var/log/mongodb/mongos.diagnostic.data
FTDC捕获哪些数据
FTDC可捕获有关MongoDB性能的数据,如数据库锁争用和资源利用率。它还会捕获有关MongoDB运行的数据,如副本集状态和数据库事件。system.profile集合包含有关每个MongoDB操作的详细信息,包括操作类型、持续时间和操作过程中发生的任何错误。
要为FTDC收集日志,mongod或mongos可以使用以下命令:
1 2 3 4 5 6 7 8 9 | serverStatus: db.serverStatus({tcmalloc: true }) replSetGetStatus: rs.status() collStats for the local .oplog.rs collection (mongod only ) connPoolStats (mongos only ) |
FTDC收集的其它的系统统计指标
在MongoDB 3.2.13及更高版本中,FTDC收集的系统指标包括
·服务器配置和启动参数
·服务器统计数据,如内存使用率、CPU使用率和网络流量
1 2 3 4 5 6 7 | CPU utilization (ex: /proc/stat) Memory utilization (ex: /proc/meminfo) Disk utilization related to performance (ex: /sys/block/*/stat) Network performance statistics (/proc/net/netstat) |
通过收集这些系统指标,FTDC可以更全面地了解系统的性能和行为。这对于排除与系统资源利用率和性能相关的故障非常有帮助。
下面是每个指标的简要说明:
·CPU 利用率:
该指标从基于Linux的系统上的/proc/stat文件中获取,包含CPU在各种状态(如用户模式、系统模式和空闲模式)下所花费时间的信息,可用于分析CPU使用情况并识别潜在瓶颈。
·内存利用率:
该指标从基于Linux的系统上的/proc/meminfo文件中获取,包含内存使用情况(如总内存、可用内存和已用内存)的信息,可用于分析内存使用情况并识别潜在的内存泄漏或其他问题。
·与性能相关的磁盘利用率:
该指标从基于Linux的系统上的/sys/block/*/stat文件中获取,包括磁盘I/O操作信息(如读/写操作和传输的块),可用于分析磁盘使用情况并识别潜在的瓶颈。
·网络性能统计:
该指标从基于Linux的系统上的/proc/net/netstat文件中获取,包括网络流量信息(如接收和传输的数据包数量),可用于分析网络使用情况和识别潜在的网络相关问题。
这些示例只是MongoDB在启用FTDC并扩大范围后可以捕获的系统指标中的一小部分。根据主机操作系统和MongoDB版本的不同,可能还会捕获其他指标
修改FTDC默认的目录和文件大小
修改默认集合大小
diagnosticDataCollectionDirectorySizeMB参数设置了默认的大小,默认是200MB,如果超过该限制,系统或应用会自动移除老的诊断文件,基于时间戳。这一机制可以保证诊断文件目录不会占用太多的磁盘空间。
比如:
1 | mongod --setParameter diagnosticDataCollectionDirectorySizeMB=250 |
也可以在mongodb shell中配置:
1 | db.adminCommand({setParameter: 1, diagnosticDataCollectionDirectorySizeMB: 250}) |
修改默认的集合大小
1 | mongod --setParameter diagnosticDataCollectionFileSizeMB=20 |
诊断目录中,单个诊断文件的大小值,最大是20MB。默认是10MB。
或
1 | db.adminCommand({ setParameter: 1, diagnosticDataCollectionFileSizeMB: 20 }) |
FTDC收集数据的频率
可以通过参数diagnosticDataCollectionPeriodMillis,FTDC收集数据的频率。默认是1000
修改频率:
1 | mongod --setParameter diagnosticDataCollectionPeriodMillis=5000 |
或
1 | db.adminCommand({setParameter: 1, diagnosticDataCollectionPeriodMillis: 5000}) |
FTDC使用用例
FTDC专用于在后台持续运行,捕获数据而不会对MongoDB数据库的性能造成任何影响。这些捕获的数据存储在一组称为FTDC文件的文件集中,在诊断问题、排除故障和提高整体性能方面发挥着至关重要的作用。
对于管理员来说,FTDC数据是排查MongoDB性能问题的宝贵资源。通过分析这些数据,可以找出缓慢的查询、锁争用和其他性能瓶颈。有了这些洞察力,管理员就能优化MongoDB部署,确保顺利运行。
需要注意的是,FTDC数据不包含任何敏感或机密信息,如特定查询、查询结果或用户凭据。相反,它侧重于收集与MongoDB服务器内部状态和行为相关的诊断数据。其中包括数据库统计、服务器指标和性能计数器,这些数据对于MongoDB支持团队和系统管理员进行故障排除和监控至关重要。为确保敏感信息的安全,FTDC的设计只捕获被认为可安全收集的数据子集。因此,FTDC数据不包括任何用户特定数据,如用户创建的集合或索引的内容,也不涉及系统或MongoDB本身使用的用户凭证或安全证书。
诊断数据的隐私保护措施
需要强调的是,FTDC收集的诊断数据始终排除特定类型的数据,以优先保护隐私。这包括排除查询样本、查询谓词、查询结果、来自最终用户集合或索引的数据,以及系统或MongoDB用户凭据和安全证书。无论使用的是哪个版本的MongoDB,该排除都适用。
如何可视化诊断数据
为了使诊断数据可视化,我们使用了GitHub工具。可以执行 "git clone https://github.com/simagix/mongo-ftdc.git "命令,将mongo-ftdc仓库从GitHub克隆到本地计算机。
地址:
1 | https://github.com/simagix/mongo-ftdc |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-08-20 Innodb的redo log block
2016-08-20 mysql中all privileges包含哪些权限