从仪表盘探索 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.mzph.cn/bicheng/63259.shtml

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

相关文章

mac安装php和xdebug调试

要在Mac上安装PHP 7.4,你可以通过几种方式来完成,但鉴于PHP7.4官方已不再维护,并且Homebrew默认仓库中不再提供此版本,我们需要从第三方仓库或直接从源代码进行安装。本文以brew方式安装,如果安装的是8.0以上&#xff…

UIlicious - 自动化端到端测试

在现代软件开发中,测试自动化已然成为产品交付质量的基石。而端到端测试(E2E),作为验证整个应用流畅运行的关键,常常是测试工作中最具挑战性的一环。这时,一款简单高效的自动化测试工具——UIlicious&#…

新一代零样本无训练目标检测

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

Python_Flask01

所有人都不许学Java了,都来学Python! 如果不来学的话请网爆我的老师---蔡老师 Flask的前世姻缘 我不知道,没啥用,要学好这个框架,其实多读书,多看报就行了,真心想了解的话! Welcom…

微信小程序版小米商城的搭建流程详解!

很多初学微信小程序语法的同学,可能不知道如何布局和搭建一个项目,下面我将讲解初学者如何搭建项目和注意事项。 目录 一、 app.json的配置 二、引入vant 三、主页banner携带参数跳转 四、点击商品项跳转详情页 一、 app.json的配置 {"pages&q…

Neo4j启动时指定JDK版本

项目使用jdk1.8,同时需要安装neo4j5.15版本,使用jdk17. 1.mac或者liunx,找到neo4j目录bin的下neo4j文件 设置JAVA_HOME: 2.windows,找到bin下面的neo4j.bat文件 set "JAVA_HOME{JDK文件目录}" 重启后生效。

AI大模型驱动数据分析:利用自然语言实现数据查询与可视化(1)

在当今AI驱动的时代,数据分析已成为各行各业不可或缺的能力。然而,传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能,这对非技术背景的业务人员来说是一个不小的挑战。 想象一下,当数据中心的负责人打开手机时…

汽车总线协议分析-FlexRay总线

随着汽车智能化发展,汽车增加安全性和舒适体验的功能增多,用于实现这些功能的传感器、ECU的数量也在持续上升,严重阻碍了线控技术的发展。常用的CAN、LIN等总线由于缺少同步性、确定性和容错性不能满足汽车线控系统(X-by-Wire)的要求。因此&a…

第二篇:k8s工作流程

我们来看通过deployment部署pod的常规流程: kubectl向apiserver发送部署请求(例如使用 kubectl create -f deployment.yml)apiserver将 Deployment 持久化到etcd;etcd与apiserver进行一次http通信。controller manager通过watch a…

SPC三种判定准则的算法

1.连续6个点递增或递减 //传入数据列表 //返回连续X个及以上递增或递减的数组下标int n = array.Length; int X = X_in; List<int> regions_start = new List<int>(); List<int> regions_end = new List<int>();if(Open){for (int i = 0; i < n - (…

工业—使用Flink处理Kafka中的数据_ProduceRecord1

1 、 使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入Redis 中, key 值为

python爬虫01

前言 之前的学习不是很努力就间断更新了&#xff0c;现在所有的内容是在具有python基础和web基础上继续更新的。接下来是爬虫和Flask框架共同更新&#xff0c;一起加油吧。 接v&#xff1a;13053025350&#xff08;毕设&#xff0c;小程序&#xff09; 看不懂python基础的可以…

第四篇:k8s 理解Service工作原理

什么是service&#xff1f; Service是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。 简单来说K8s提供了service对象来访问pod。我们在《k8s网络模型与集群通信》中也说过k8s集群中的每一个Pod&#xff08;最小调度单位&#xff09;都有自己的IP地址&#xff0c;都…

hhdb数据库介绍(10-43)

安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 &#xff08;一&#xff09;密码修改 用户可以在“安全->密码安全管理->数据…

基于DFA算法实现敏感词过滤

1、什么是DFA&#xff1f; DFA&#xff08;Deterministic Finite Automaton&#xff09;&#xff0c;即确定有穷自动机。其特征为&#xff1a;有一个有限状 态集合和一些从一个状态通向另一个状态的边&#xff0c;每条边上标记有一个符号&#xff0c;其中一个状态是 初态&#…

隐私安全大考,Facebook 如何应对?

随着数字时代的到来和全球互联网用户的快速增长&#xff0c;隐私安全问题已上升为网络世界的重要议题。社交媒体巨头Facebook因其庞大的用户群体和大量的数据处理活动&#xff0c;成为隐私问题的聚焦点。面对隐私安全的大考&#xff0c;Facebook采取了一系列策略来应对这些挑战…

基于深度学习的甲状腺结节影像自动化诊断系统(PyQt5界面+数据集+训练代码)

随着医学影像技术的发展&#xff0c;计算机辅助诊断在甲状腺结节的早期筛查中发挥着重要作用。甲状腺结节的良恶性鉴别对临床治疗具有重要意义&#xff0c;但传统的诊断方法依赖于医生的经验和影像学特征&#xff0c;存在一定的主观性和局限性。为了解决这一问题&#xff0c;本…

秒懂:使用js验证hash, content hash , chunk hash的区别

一、使用js验证hash, content hash , chunk hash的区别 1、计算一般的 Hash&#xff08;以简单字符串为例&#xff09; 使用crypto-js库来进行哈希计算&#xff0c;需提前引入npm install crypto-js库。 crypto-js&#xff1a; 是一个JavaScript加密算法库&#xff0c;用于实…

Telnet不安全?如何配置使用更安全的STelnet远程登录华为AR1000V路由器?

在上一篇文章中&#xff0c;我们介绍了如何配置一台全新的AR1000V&#xff0c;来实现通过Telnet远程登录设备&#xff08;如何配置使用Telnet远程登录华为AR1000V路由器&#xff1f;&#xff09;。其实&#xff0c;在之前的文章中&#xff0c;我们已经介绍过Telnet是一种不安全…

CV(2)-插值和卷积

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 看看年前可以学到哪。 频率&#xff1a; 灰度值变化程度的指标&#xff0c;是灰度再平面上的梯度幅值: 幅值&#xff1a; 是在一个周期内&#xff0c;交流电瞬时出现的最大绝对值&#xff0c;也是一个正弦波&#xff0c;波…