MongoDB的性能监控和故障排除的强大工具FTDC(Full-Time Diagnostics Capture)

发布时间 2023-08-20 21:13:22作者: abce


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
在配置文件中禁用,设置参数:

# vi /etc/mongod.conf
添加以下内容:
setParameter:
diagnosticDataCollectionEnabled: false

保存后,重启mongodb实例。

在mongodb shell禁用,使用以下命令:

db.adminCommand({setParameter: 1, diagnosticDataCollectionEnabled: false})

一般建议开启该特性。默认是开启的:

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可以使用以下命令:

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使用率和网络流量

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,如果超过该限制,系统或应用会自动移除老的诊断文件,基于时间戳。这一机制可以保证诊断文件目录不会占用太多的磁盘空间。
比如:

mongod --setParameter diagnosticDataCollectionDirectorySizeMB=250

也可以在mongodb shell中配置:

db.adminCommand({setParameter: 1, diagnosticDataCollectionDirectorySizeMB: 250})

修改默认的集合大小

mongod --setParameter diagnosticDataCollectionFileSizeMB=20

诊断目录中,单个诊断文件的大小值,最大是20MB。默认是10MB。

db.adminCommand({ setParameter: 1, diagnosticDataCollectionFileSizeMB: 20 })

 

FTDC收集数据的频率
可以通过参数diagnosticDataCollectionPeriodMillis,FTDC收集数据的频率。默认是1000
修改频率:

mongod --setParameter diagnosticDataCollectionPeriodMillis=5000

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克隆到本地计算机。
地址:

https://github.com/simagix/mongo-ftdc