从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇,前面几篇文章的链接如下:

  • MongoDB 监控(一)
  • MongoDB 监控(二)
  • MongoDB 监控(三)
  • MongoDB 监控(四)
  • MongoDB 监控(五)
  • MongoDB 监控(六)

按照前面系列文章,我们已经采集到 MongoDB 的监控数据了,并且通过 Grafana 和 Nightingale 的仪表盘看到了数据,这一节开始,我们来探索一下 MongoDB 的关键指标,对于未来配置告警规则、排查问题都有帮助。

通过 MongoDB Grafana 仪表盘查看 MongoDB 关键指标

一般仪表盘中每个图表的左上角,会有一个 i 图标,点击这个图标,可以看到这个图表的一些提示信息,这个信息可是非常重要,是制作仪表盘的那个人的经验总结。我们先看看 Grafana 那个仪表盘,看的时候注意看这个提示信息。

mongodb_instance_uptime_seconds

这个指标是 MongoDB 实例的运行时间,这个指标是一个累加值,单位是秒,可以用来判断 MongoDB 实例的运行时间,如果这个值突然变小,说明 MongoDB 服务重启了。有人会创建一个告警规则:如果这个值小于 300,就报警,说明最近 5 分钟内发生过重启。当然了,这么粗暴的告警规则,在新实例刚刚启动的时候,也会报警。

qps

sum(irate(mongodb_op_counters_total{type!="command"}[5m]))

mongodb_op_counters_total 表示总的操作次数,显然是 counter 类型,即单调递增的,所以使用 irate 或 rate 求每秒操作次数,又因为 type 有多种取值,所以 sum 一下把各类操作求和,但是 type 排除了 command,不知道原因是啥,莫非是因为 command 是什么特殊操作?回头再研究。

latency

irate(mongodb_mongod_op_latencies_latency_total{type="command"}[5m]) / irate(mongodb_mongod_op_latencies_ops_total{type="command"}[5m])

mongodb_mongod_op_latencies_latency_total 是延迟总量,mongodb_mongod_op_latencies_ops_total 是操作总量,求 rate 之后再相除,就是每个操作的平均延迟了。具体细节还需要进一步研究。

Current ReplSet State

这个图表有提示:

This shows the role of the selected service. Normally this should be one of PRIMARY, SECONDARY and ARBITER, but if the system is newly added it could show STARTUP2 during its initial sync.

看起来是 MongoDB 集群中某个实例的角色,一般是 PRIMARY、SECONDARY 和 ARBITER 三种,如果是新加入的实例,可能会显示 STARTUP2,这个提示很有用,可以帮助我们理解这个图表。但是我的显示的是 STARTUP,可能是因为我是一个 standalone 实例,不是集群。

在 Prometheus 生态里没法存储字符串,所以这里显示的内容显然是根据数字换算出来的,我们先看看这个图表对应的指标:

max by (instance) (mongodb_mongod_replset_my_state{})

核心就是 mongodb_mongod_replset_my_state 指标,这个指标是一个数字,根据这个数字,我们可以知道这个实例的角色。从图表上可以看到对应关系:

MongoDB state value mapping

Command Operations

这个图表包含三个 promql:

irate(mongodb_op_counters_total{job="$job", instance="$instance", type!="command"}[5m])
irate(mongodb_mongod_op_counters_repl_total{job="$job", instance="$instance", type!~"(command|query|getmore)"}[5m])
irate(mongodb_mongod_metrics_ttl_deleted_documents_total{job="$job", instance="$instance"}[5m])

mongodb_op_counters_total 用于计算普通操作,mongodb_mongod_op_counters_repl_total 用于计算 repl 相关的操作,mongodb_mongod_metrics_ttl_deleted_documents_total 用于计算 TTL 删除的文档数。具体含义就需要研究 MongoDB 的文档和原理了,回头再说。

Latency detail

irate(mongodb_mongod_op_latencies_latency_total{job="$job", instance="$instance"}[5m]) / irate(mongodb_mongod_op_latencies_ops_total{job="$job", instance="$instance"}[5m]) > 0

这个 promql 和前面的 Latency 是一样的,只不过上面的是展示的当前值,下面这个展示的是趋势图,并且下面的会把不同的 type 的 command 都展示出来,这样可以看到不同操作的延迟情况。

Current Connections

mongodb_connections{job="$job", instance="$instance", state="current"}

对于数据库而言,连接数是一个非常重要的指标,这个图表展示了当前连接数,这个指标是一个 gauge 类型,即时的,不是累加值。

Cursors

mongodb_mongod_metrics_cursor_open{job="$job", instance="$instance"}

这个图表展示了当前打开的游标数,这个指标是一个 gauge 类型,即时的,不是累加值。从图表的 legend 可以看出,这个指标有个 state 标签,用来区分不同状态的游标。

Document Operations

irate(mongodb_mongod_metrics_document_total{job="$job", instance="$instance"}[5m])

表示文档操作的总数,这个指标是一个 counter 类型,即单调递增的,所以使用 irate 或 rate 求每秒操作次数。从 legend 可以看出,这个指标有个 state 标签,用来区分不同类型的文档操作。

Queued Operations

这个 panel 有个提示:Operations queued due to a lock. 由于锁的缘故积压的操作数。

mongodb_mongod_global_lock_current_queue{job="$job", instance="$instance"}

没有使用 rate、irate 之类的,说明是一个 gauge 类型的指标,从 legend 看出这个指标有个 type 标签,用来区分不同类型的数据。

Query Efficiency

Panel 提示:Ratio of Documents returned or Index entries scanned / full documents scanned。 返回的文档数或索引条目数与扫描的完整文档数的比率。

sum(irate(mongodb_mongod_metrics_document_total{job="$job", instance="$instance", state="returned"}[5m]))
/
sum(irate(mongodb_mongod_metrics_query_executor_total{job="$job", instance="$instance", state="scanned_objects"}[5m]))

另一个:

sum(irate(mongodb_mongod_metrics_query_executor_total{job="$job", instance="$instance", state="scanned"}[5m]))
/
sum(irate(mongodb_mongod_metrics_query_executor_total{job="$job", instance="$instance", state="scanned_objects"}[5m]))

如果扫描了很多,但是返回的很少,即上面的值较小说明效率低,反之效率高。具体还需要再研究。

Scanned and Moved Objects

这个 panel 有提示:This panel shows the number of objects (both data (scanned_objects) and index (scanned)) as well as the number of documents that were moved to a new location due to the size of the document growing. Moved documents only apply to the MMAPv1 storage engine。 此面板显示了由于文档大小增长而将对象(数据(scanned_objects)和索引(scanned))移动到新位置的数量,由于文档大小增长而移动的文档仅适用于 MMAPv1 存储引擎。

irate(mongodb_mongod_metrics_query_executor_total{job="$job", instance="$instance"}[5m])

另一个:

irate(mongodb_mongod_metrics_record_moves_total{job="$job", instance="$instance"}[5m])

这两个指标都是 counter 类型,即单调递增的,所以使用 irate 或 rate 求每秒操作次数。

getLastError Write Time

这个 panel 有提示:Legacy driver operation: Number of, and Sum of time spent, per second executing getLastError commands to confirm write concern. 传统驱动程序操作:每秒执行 getLastError 命令以确认写入关注点的数量和时间总和。

irate(mongodb_mongod_metrics_get_last_error_wtime_total_milliseconds{job="$job", instance="$instance"}[5m])

这个指标明显是一个 counter 类型,单位是 milliseconds,求 rate 之后表示每秒中有多少 ms 是用于 getLastError 的。

Assert Events

这个 panel 有提示:This panel shows the number of assert events per second on average over the given time period. In most cases assertions are trivial, but you would want to check your log files if this counter spikes or is consistently high. 此面板显示了给定时间段内每秒平均的断言事件数。 在大多数情况下,断言是微不足道的,但如果此计数器激增或持续很高,则应检查日志文件。

irate(mongodb_asserts_total{job="$job", instance="$instance"}[1m])

这个指标是一个 counter 类型,即单调递增的,所以使用 irate 或 rate 求每秒操作次数。

Page Faults

这个 panel 有提示:Unix or Window memory page faults. Not necessarily from mongodb. Unix 或 Windows 内存页面错误。 不一定来自 mongodb。

irate(mongodb_extra_info_page_faults_total{job="$job", instance="$instance"}[3m])

这个指标是一个 counter 类型,即单调递增的,所以使用 irate 或 rate 求每秒次数。

总结

通过每个 panel 的研读,我们对 MongoDB 的监控知识又前进了一步,要想彻底弄懂还需要研究 MongoDB 的文档和原理。本文的探索希望给大家一些学习这类知识的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机LCD分区刷新技术介绍

分区刷新也称为分区变频,LCD分区刷新功能的目的是将屏幕分为上下半区,分区显示不同帧率,上方区块High Frame Rate,下方区块Low Frame Rate。使用者可以动态自定义上方高刷显示区的结尾位置。 当前的智能手机屏幕上,显示…

php基础:文件处理

​​​​​​1.PHP 操作文件 读取文件并写到输出流的 PHP 代码如下&#xff08;如读取成功则 readfile() 函数返回字节数&#xff09;&#xff1a; <?php echo readfile("webdictionary.txt"); ?> 2.PHP 文件打开/读取/关闭 打开使用fopen&#xff08;&…

Redis高阶集群搭建+集群读写

问题 容量不够&#xff0c;redis 如何进行扩容&#xff1f;并发写操作&#xff0c; redis 如何分摊&#xff1f;另外&#xff0c;主从模式&#xff0c;薪火相传模式&#xff0c;主机宕机&#xff0c;导致 ip 地址发生变化&#xff0c;应用程序中配置需要修改对应的主机地址、端…

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…

springboot vue 会员收银系统 (12)购物车关联服务人员 订单计算提成 开源

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中&#xff0c;我们完成订单的挂单和取单功能&#xff0c;今天我们完成购物车关联服务人员&#xff0c;用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…

leetcode 1853 转换日期格式(postgresql)

需求 表: Days ----------------- | Column Name | Type | ----------------- | day | date | ----------------- day 是这个表的主键。 给定一个Days表&#xff0c;请你编写SQL查询语句&#xff0c;将Days表中的每一个日期转化为"day_name, month_name day, year"…

java操作doc(二)——java利用Aspose.Words动态创建自定义doc文档

有关java动态操作word文档&#xff0c;上一篇写了如何使用模板动态设置对于内容以及相关单元格的动态合并问题&#xff0c;详细请参看如下文档&#xff1a; java利用Aspose.Words操作Word动态模板文档并动态设置单元格合并 这篇文档说说&#xff0c;如何利用Aspose.Words动态…

仿蝠鲼软体机器人实现高速多模态游动

近期&#xff0c;华南理工大学周奕彤老师研究团队最新成果"Manta Ray-Inspired Soft Robotic Swimmer for High-speed and Multi-modal Swimming"被机器人领域会议 IEEE/RSJ International Conference on Intelligent Robots and Systems&#xff08;IROS 2024&#…

【网络原理】网络地址转换----NAT技术详解

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 我们在 IP协议 一文中介绍过&#xff0c;由于IPv4协议中 IP地址只有32位&#xff0c;导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…

D86【python 接口自动化学习】- pytest基础用法

day86 pytest配置testpaths 学习日期&#xff1a;20241202 学习目标&#xff1a;pytest基础用法 -- pytest配置testpaths 学习笔记&#xff1a; pytest配置项 主目录创建pytest.ini文件 [pytest] testpaths./testRule 然后Terminal里直接命令&#xff1a;pytest&#xff…

电机瞬态分析基础(15):电机的电磁转矩(三相同步电机和三相感应电机)

1. 三相同步电机电磁转矩 1.1 隐极同步电机 图1. 三相隐极同步电机基本结构 三相隐极同步电机的基本结构可用图1来简单表示&#xff0c;图中&#xff0c;定子分布绕组可等效为三相对称绕组A-X、B-Y和C-Z&#xff1b;转子分布绕组为励磁绕组。若在定子三相对称绕组中通入三相…

人工智能与机器学习在智能扭矩系统中的应用

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。】 在当今科技飞速发展的时代&#xff0c;智能扭矩系统正经历着一场深刻的变革&#xff0c;而人工智能&#xff08;AI&#xff09;和机器学习算法的应用成为了推动这一变革的关键力量。 传统的扭矩…

Android hid 数据传输(device 端 )

最近一直在处理hid 数据需求&#xff0c;简而言之就是两台设备直接可以通过usb 线互相传递数据。 项目架构 为什么Device 端要采用HID&#xff08;人机接口设备&#xff09;的方式发送和接收数据呢&#xff1f; 主要是速度快&#xff0c;举个例子&#xff0c;就是鼠标移动&am…

K8S离线部署Nacos集群【Oracle作外部数据源】

一、前言 由于公司的要求下要使Nacos集群以Oracle作为外部数据源&#xff0c;前期咱们已经阐述了如何在本地搭建&#xff08;Nacos集群搭建【Oracle作外部数据源】&#xff09;&#xff0c;本次将带领大家在k8s上部署Nacos集群并以Oracle作为外部数据源。 二、软件包 nacos-f…

【Java开发】Springboot集成mybatis-plus

1、引入 mybatis-plus 依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.0</version> </dependency> <!--mysql依赖--> <dependen…

技术成长战略是什么?

文章目录 技术成长战略是什么&#xff1f;1. 前言2. 跟技术大牛学成长战略2.1 系统性能专家案例2.2 从开源到企业案例2.3 技术媒体大V案例2.4 案例小结 3. 学习金字塔和刻意训练4. 战略思维的诞生5. 建议 技术成长战略是什么&#xff1f; 1. 前言 在波波的微信技术交流群里头…

【开源免费】基于Vue和SpringBoot的课程答疑系统(附论文)

博主说明&#xff1a;本文项目编号 T 070 &#xff0c;文末自助获取源码 \color{red}{T070&#xff0c;文末自助获取源码} T070&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

【二分查找】力扣 275. H 指数 II

一、题目 二、思路 h 指数是高引用引用次数&#xff0c;而 citations 数组中存储的就是不同论文被引用的次数&#xff0c;并且是按照升序排列的。也就是说 h 指数将整个 citations 数组分成了两部分&#xff0c;左半部分是不够引用 h 次 的论文&#xff0c;右半部分论文的引用…

【LeetCode】169.多数元素

题目连接&#xff1a; https://leetcode.cn/problems/majority-element/solutions/2362000/169-duo-shu-yuan-su-mo-er-tou-piao-qing-ledrh/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述&#xff1a; 思路一&#xff1a; 使用哈希表unordered_map记录每个元…

SpringBoot整合knife4j,以及会遇到的一些bug

这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”&#xff0c;文中的讲解内容简单清晰&#xff0c;易于学习与理解&#xff0c;下面请大家跟着小编的思路慢慢深入&#xff0c;一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧&#xff01; 一…