MongoDB 可观测性最佳实践
MongoDB 介绍
MongoDB 是一个高性能、开源的 NoSQL 数据库,它采用灵活的文档数据模型,非常适合处理大规模的分布式数据。MongoDB 的文档存储方式使得数据结构可以随需求变化而变化,提供了极高的灵活性。它支持丰富的查询语言,允许执行复杂的数据操作,同时具备自动分片和副本集等特性,确保了数据的高可用性和水平扩展性。MongoDB 的易用性、高性能和可扩展性使其成为现代应用程序,特别是需要处理大量非结构化或半结构化数据的应用程序的理想选择。
对 MongoDB 进行监控是确保数据库系统健康、优化性能和预防故障的关键措施。监控可以帮助管理员实时了解数据库的运行状态,包括性能指标、资源使用情况和潜在的安全威胁。通过监控,可以及时发现并解决性能瓶颈,如慢查询或高内存使用,从而提高应用程序的响应速度和用户体验。此外,监控还能帮助预测和预防系统故障,比如通过监控磁盘空间来避免潜在的数据丢失。总的来说,监控 MongoDB 对于维护数据库的稳定性、安全性和高效性至关重要。
观测云
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
部署 DataKit
DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。
登录观测云控制台,在「集成」 - 「DataKit」 选择对应安装方式,当前采用 Linux 主机部署 DataKit。

开启 MongoDB 采集器
进入 DataKit 安装目录下的 conf.d/db 目录,复制 mongodb.conf.sample 并命名为 mongodb.conf。示例如下:
[[inputs.mongodb]]## Gathering intervalinterval = "10s"## Specify one single Mongodb server. These server related fields will be ignored when the 'servers' field is not empty.## connection_format is a string in the standard connection format (mongodb://) or SRV connection format (mongodb+srv://).connection_format = "mongodb://"## The host and port. host_port = "127.0.0.1:27017"## Usernameusername = "datakit"## Passwordpassword = "<PASS>"## The authentication database to use.# default_db = "admin"## A query string that specifies connection specific options as <name>=<value> pairs.# query_string = "authSource=admin&authMechanism=SCRAM-SHA-256"## A list of Mongodb servers URL## Note: must escape special characters in password before connect to Mongodb server, otherwise parse will failed.## Form: "mongodb://[user ":" pass "@"] host [ ":" port]"## Some examples:## mongodb://user:pswd@localhost:27017/?authMechanism=SCRAM-SHA-256&authSource=admin## mongodb://user:pswd@127.0.0.1:27017,## mongodb://10.10.3.33:18832,# servers = ["mongodb://127.0.0.1:27017"]## When true, collect replica set statsgather_replica_set_stats = false## When true, collect cluster stats## Note that the query that counts jumbo chunks triggers a COLLSCAN, which may have an impact on performance.gather_cluster_stats = false## When true, collect per database statsgather_per_db_stats = true## When true, collect per collection statsgather_per_col_stats = true## List of db where collections stats are collected, If empty, all dbs are concerned.col_stats_dbs = []## When true, collect top command stats.gather_top_stat = true## Set true to enable electionelection = true## TLS connection config# ca_certs = ["/etc/ssl/certs/mongod.cert.pem"]# cert = "/etc/ssl/certs/mongo.cert.pem"# cert_key = "/etc/ssl/certs/mongo.key.pem"# insecure_skip_verify = true# server_name = ""## Mongodb log files and Grok Pipeline files configuration# [inputs.mongodb.log]# files = ["/var/log/mongodb/mongod.log"]# pipeline = "mongod.p"## Customer tags, if set will be seen with every metric.# [inputs.mongodb.tags]# "key1" = "value1"# "key2" = "value2"# ...
重启 DataKit。
# Linux/Mac 可能需加上 sudo
datakit service -R # restart
关键指标
| 指标名称 | 描述 |
|---|---|
| uptime_ns | MongoDB实例的总运行时间 |
| cpu_usage | 系统CPU的使用率 |
| mem_used_percent | 系统内存的使用率 |
| disk_used_percent | 系统磁盘的使用率 |
| net_out_bytes | 从MongoDB实例发送出去的网络字节数 |
| net_in_bytes | 进入MongoDB实例的网络字节数 |
| connections_current | 当前与数据库服务器的活跃连接数 |
| connections_total_created | 每秒新创建的连接数 |
| queries_per_sec | 每秒执行的查询次数 |
| inserts_per_sec | 每秒执行的插入操作次数 |
| updates_per_sec | 每秒执行的更新操作次数 |
| deletes_per_sec | 每秒执行的删除操作次数 |
| percent_cache_used | 缓存的使用率 |
| percent_cache_dirty | 脏缓存的使用率 |
| cursor_total_count | 当前打开的游标数量 |
| cursor_timed_out_count | 因超时而关闭的游标数量 |
| cursor_total | MongoDB维护的游标总数 |
| cursor_pinned_count | 固定的游标数量 |
| aggregate_command_total | 聚合命令执行的总次数 |
| aggregate_command_failed | 聚合命令失败的次数 |
| assert_msg | 消息断言发生的次数 |
| assert_user | 用户断言发生的次数 |
| ttl_deletes_per_sec | 每秒因TTL索引而删除的文档数量 |
| ttl_passes_per_sec | 每秒后台TTL线程进行删除的次数 |
| document_inserted | 插入的文档总数 |
| document_deleted | 删除的文档总数 |
| document_returned | 返回的文档总数 |
| document_updated | 更新的文档总数 |
| insert_command_total | insert 命令执行的总次数 |
| delete_command_total | delete 命令执行的总次数 |
| update_command_total | update 命令执行的总次数 |
| find_command_total | find 命令执行的总次数 |
| insert_command_failed | insert 命令失败的次数 |
| find_command_failed | find 命令失败的次数 |
| update_command_failed | update 命令失败的次数 |
| delete_command_failed | delete 命令失败的次数 |
| repl_state | Replica Set成员的状态 |
| repl_queries, repl_deletes, repl_inserts, repl_updates | Replica Set的查询、删除、插入、更新操作 |
| repl_lag | 主从复制的滞后时间 |
场景视图
登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “MongoDB”, 选择 “MongoDB 监控视图”,点击 “确定” 即可添加视图。

监控器(告警)
主从写操作延迟超过30ms告警


Mongodb的连接数过高

Mongodb聚合命令失败率过多

总结
通过观测云平台对 MongoDB 进行统一监控,我们能够实时追踪关键性能指标,如活跃读写连接数、聚合命令的执行与失败次数、以及断言情况。这些指标对于优化数据库性能、识别性能瓶颈、及时排查故障至关重要。它们帮助我们提升缓存策略,确保数据一致性,进行有效的容量规划,并为业务分析提供支持。这样的监控不仅增强了用户体验,也显著提高了系统的可靠性和稳定性。
相关文章:
MongoDB 可观测性最佳实践
MongoDB 介绍 MongoDB 是一个高性能、开源的 NoSQL 数据库,它采用灵活的文档数据模型,非常适合处理大规模的分布式数据。MongoDB 的文档存储方式使得数据结构可以随需求变化而变化,提供了极高的灵活性。它支持丰富的查询语言,允许…...
论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
LoRA 论文 传统全面微调,对每个任务学习的参数与原始模型相同: m a x Φ ∑ ( x , y ) ∈ Z ∑ t 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(…...
UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·
1. GameMode 与 GameState 关系描述 GameMode:定义游戏规则和逻辑,控制游戏的开始、进行和结束。GameState:存储和同步全局游戏状态,如得分、时间、胜利条件等。 联动方式 GameMode初始化GameState:GameMode在游戏…...
Redis的IO多路复用机制:高效的网络通信设计
在高并发、高性能的应用中,如何有效地管理和处理大量的客户端请求是一个至关重要的问题。Redis作为一个高性能的内存数据存储系统,面对大量并发客户端请求时,需要具备良好的网络通信能力。在Redis的设计中,IO多路复用机制是其核心…...
Ubuntu24.04 启动后突然进入tty,无法进入图形界面
问题描述 昨晚在编译 Android AOSP 14 后,进入了登录页面,但出现了无法输入密码的情况,且无法正常关机,只能强制重启。重启后,系统只能进入 TTY 页面,无法进入图形界面。 问题排查 经过初步排查&#x…...
搭建主从服务器
任务需求 客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步,并且都开启防…...
jenkins 配置邮件问题整理
版本:Jenkins 2.492.1 插件: A.jenkins自带的, B.安装功能强大的插件 配置流程: 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“,是配置之后发件人的email。 2.配置系统自带的邮件A…...
Scala语言的计算机基础
Scala语言的计算机基础 计算机科学是一门极具挑战性和创造力的学科,其中编程语言是连接人类与计算机的桥梁。Scala(特指可扩展语言)作为一种现代编程语言,其设计初衷是为了简化软件开发过程,并结合了面向对象和函数式…...
定义模型生成数据表
1. 数据库配置 js import { Sequelize, DataTypes } from sequelize; // 创建一个 Sequelize 实例,连接到 SQLite 数据库。 export const sequelize new Sequelize(test, sa, "123456", { host: localhost, dialect: sqlite, storage: ./blog.db })…...
JVM中常量池和运行时常量池、字符串常量池三者之间的关系
文章目录 前言常量池(Constant Pool)运行时常量池(Runtime Constant Pool)字符串常量池(String Literal Pool)运行时常量池和字符串常量池位置变化方法区与永久代和元空间的关系三者之间的关系常量池与运行…...
KV 缓存简介
以下是关于 KV缓存(Key-Value Cache) 的简介,涵盖其定义、原理、作用及优化意义: 1. 什么是KV缓存? KV缓存 是Transformer架构(如GPT、LLaMA等大模型)在自回归生成任务(如文本生成&…...
Mysql篇——SQL优化
本篇将带领各位了解一些常见的sql优化方法,学到就是赚到,一起跟着练习吧~ SQL优化 准备工作 准备的话我们肯定是需要一张表的,什么表都可以,这里先给出我的表结构(表名:userinfo) 通过sql查看…...
算法基础 -- ARM 体系架构设计专家的算法提升目标
算法提升目标:ARM 体系架构设计专家 1. 位运算优化 相关 ARM 知识点:SIMD、NEON、SVE、低功耗优化、加密计算、数据压缩 推荐题目: 136. 只出现一次的数字(异或运算)190. 颠倒二进制位(位反转,ARM rbit…...
不同开发语言对字符串的操作
一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…...
Oracle Linux Server 7.9安装fail2ban
yum search oracle-epel-release yum install oracle-epel-release-el7 search fail2ban yum install fail2ban nano /etc/fail2ban/jail.d/00-firewalld.conf # defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。 [DEFAULT] # 用于指定哪…...
FPGA|Verilog-SPI驱动
最近准备蓝桥杯FPGA的竞赛,因为感觉官方出的IIC的驱动代码思路非常好,写的内容非常有逻辑并且规范。也想学习一下SPI的协议,所以准备自己照着写一下。直到我打开他们给出的SPI底层驱动,我整个人傻眼了,我只能说&#x…...
Windows11 新机开荒(二)电脑优化设置
目录 前言: 一、注册微软账号绑定权益 二、此电脑 桌面图标 三、系统分盘及默认存储位置更改 3.1 系统分盘 3.2 默认存储位置更改 四、精简任务栏 总结: 前言: 本文承接上一篇 新机开荒(一) 上一篇文章地址&…...
关于deepseek R1模型分布式推理效率分析
1、引言 DeepSeek R1 采用了混合专家(Mixture of Experts,MoE)架构,包含多个专家子网络,并通过一个门控机制动态地激活最相关的专家来处理特定的任务 。DeepSeek R1 总共有 6710 亿个参数,但在每个前向传播…...
揭秘大数据 | 9、大数据从何而来?
在科技发展史上,恐怕没有任何一种新生事物深入人心的速度堪比大数据。 如果把2012年作为数据量爆发性增长的第一年,那么短短数年,大数据就红遍街头巷尾——从工业界到商业界、学术界,所有的行业都经受了大数据的洗礼。从技术的迭…...
使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题
目录 1、问题描述 2、用Dependency Walker工具打开qr.dll库,查看库与库的依赖关系以及接口调用情况,定位问题 3、使用Beyond Compare工具比较一下正常的msvcr100d.dll和问题msvcr100d.dll的差异 4、最后 C软件异常排查从入门到精通系列教程ÿ…...
3.14学习总结 排序算法
插入排序: 1.直接插入排序 维护一个有序区,把元素一个个插入有序区的适当位置,直到所有元素都有序为止。 for (int i 0;i < n - 1;i) {//升序int end i;int temp k[end 1];while (end > 0) {if (temp < k[end]) {k[end 1] …...
Hadoop、Spark、Flink Shuffle对比
一、Hadoop的shuffle 前置知识: Map任务的数量由Hadoop框架自动计算,等于分片数量,等于输入文件总大小 / 分片大小,分片大小为HDFS默认值128M,可调 Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设…...
本地部署 RAGFlow - 修改默认端口
本地部署 RAGFlow - 修改默认端口 1. 前提条件2. 部署 RAGFlow 1. 前提条件 确保 vm.max_map_count 不小于 262144: 如需确认 vm.max_map_count 的大小: sysctl vm.max_map_count如果 vm.max_map_count 的值小于 262144,可以进行重置&…...
repo init 错误 Permission denied (publickey)
一、已经生成ssh-key并设置到gerrit上 二、已经设置.gitconfig (此步骤是公司要求,设置gerrit地址为一个别名之类的,有的公司不需要) 然后出现下面的错误,最后发现忘记设置git的用户名和邮箱 1. git config --globa…...
Django settings.py 文件全解析
本篇详细介绍 Django settings.py 文件各个配置项的教程,涵盖核心配置项的作用及最佳实践 一、基础配置 1. BASE_DIR BASE_DIR Path(__file__).resolve().parent.parent作用:项目根目录路径,用于构建其他路径(如模板、静态…...
TSB - AD 解读 — 迈向可靠、透明的 TSAD 任务
目录 一 文章动机 二 TSAD 领域内的两类缺陷 三 数据集的构建 四 实验结果及结论 项目宣传链接:TSB-AD 代码链接: TheDatumOrg/TSB-AD: TSB-AD: Towards A Reliable Time-Series Anomaly Detection Benchmark 原作者解读:NeurIPS 2…...
下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?
下载 CSS 文件会对页面的渲染过程产生影响,具体是否阻塞 DOM 树的构建和页面的显示,取决于浏览器的渲染机制。 1. CSS 文件下载是否会阻塞 DOM 树的构建? 一般情况下,CSS 文件下载不会阻塞 DOM 树的构建: DOM 树的构建…...
6个月的Go语言学习甘特图路线图 从零基础到项目实战
以下是为期6个月的Go语言学习甘特图(2025年4月-2025年10月),包含详细阶段划分、对应资源及项目产出文档说明: #mermaid-svg-yQbkZCpCAXv6iXKC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fi…...
论文阅读:2023-arxiv Can AI-Generated Text be Reliably Detected?
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 文章目录 Abstract(摘要)1 Introduction(引言)Conclusion(结论) Can AI-Generated Text be Reliably D…...
查看IP地址/Ping 命令
目录 Windows Linux macOS Ping 命令 Windows 使用终端: 按下 Win R 键,打开“运行”对话框,输入 cmd 并按 Enter。 在命令提示符中输入 ipconfig,按 Enter。系统会显示网络适配器的详细信息,包括 IPv4 地址、子…...
