首页 > 数据库 >MongoDB的性能监控和故障排除的强大工具FTDC(Full-Time Diagnostics Capture)

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

时间:2023-08-20 21:23:13浏览次数:44  
标签:Capture Full FTDC MongoDB 捕获 诊断 数据 性能


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

标签:Capture,Full,FTDC,MongoDB,捕获,诊断,数据,性能
From: https://www.cnblogs.com/abclife/p/17644116.html

相关文章

  • 超实用的两款截图工具(FastStone Capture 和 Snipaste)
    目录一、概述1)FastStoneCapture2)Snipaste二、FastStoneCapture和Snipaste截图软件安装一、概述"FastStoneCapture"和"Snipaste"都是计算机上常用的截图工具,用于捕捉屏幕截图、编辑图像以及进行屏幕注释等操作。下面是关于这两个工具的简要介绍:1)FastStoneCapture"Fas......
  • OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作
    前言 我开始关注这个问题,是在使用PaddleOCR+OpenCV进行视频文字识别的时候,因为OpenCV需要循环读取视频的每一帧进行解析,这就导致视频播放特别卡顿。由于视频中相邻帧的内容是一样的,重复识别也没有意义,所以我就在考虑:有没有办法跳帧输出?来源:https://blog.csdn.net/weixin_4425......
  • BGP黑洞解决办法一:full mesh
    网络环境R8:宣告了8.8.8.8路由R9:宣告了9.9.9.9路由R3:上没有运行BGP1)在AS200中R5、R1到查询到BGProuting-table如下2)R3:没有运行BGP路由3)路由表中8.8.8.8、9.9.9.9虽然都在BGP路由表中,但是却无法ping通4)查看bgprouting-table不存在问题,但是数据转发存在问题注意:虽然存在路由表,但是......
  • FileNotFoundError: Could not find module 'xxx.dll'. Try using the full path with
    首先看看报错信息 我的python版本是3.8版本,试了网上加各种办法后发现不行。然后怀疑是系统本身的问题,就下载了visual studio,用其中的dumpbin一查,发现果然少了一个dll文件。详细步骤:1.下载并安装visual studio 2.找到开发者命令工具,并打开 3.在打开的控制台上......
  • 进程注入检测 —— RtlCaptureStackBackTrace 获取当前函数的调用栈函数
    https://stackoverflow.com/questions/590160/how-to-log-stack-frames-with-windows-x64 https://cpp.hotexamples.com/examples/-/-/RtlCaptureStackBackTrace/cpp-rtlcapturestackbacktrace-function-examples.html  例子参考  平日里用VS开发工具在调时在Debug下有一个选......
  • 安防视频监控平台EasyCVR修改参数提示database or disk is full的原因排查
    EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等能力。视频监控综合管理平台EasyCVR具备视频汇聚融合能力,平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,......
  • (转)关于施用full gc频繁的分析及解决
    分析当频繁fullgc时,jstack打印出堆栈信息如下:sudo-uadmin-H/opt/taobao/java/bin/jstack`pgrepjava`>#yourfilepath#可以看到的确是在跑低价信息另外在应用频繁fullgc时和应用正常时,也执行了如下2种命令:sudo-uadmin-H/opt/taobao/java/bin/jmap-histo`pgrep......
  • 跨域iframe 配置fullscreen权限
    在新版本的Chrome等浏览器中,默认情况下禁止了跨域iframe开启全屏的权限。在iframe中,我们通常使用 element.requestFullscreen() 方法来进行全屏展示。根据MDN文档,为了让iframe展示全屏,我们需要配置 allowfullscreen 属性,注意这个属性已经被重新定义为 allow="fulls......
  • 频繁FullGC的原因竟然是“开源代码”
    前言首先java语言的特性是不需像C和C++那样自己手动释放内存,因为java本身有垃圾回收机制(垃圾回收称为GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。JVM运行时占用内存最大的空间就是堆内存,另外栈区和方法区也会占用空间但是占用有限本章就不探究了。那么堆中的空间又分为年轻......
  • 频繁FullGC的原因竟然是“开源代码”? | 京东云技术团队
    前言首先java语言的特性是不需像C和C++那样自己手动释放内存,因为java本身有垃圾回收机制(垃圾回收称为GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。JVM运行时占用内存最大的空间就是堆内存,另外栈区和方法区也会占用空间但是占用有限本章就不探究了。那么堆中的空间又分为年轻代......