从仪表盘探索 MongoDB 关键指标

news/2024/12/2 18:05:35/文章来源:https://www.cnblogs.com/ulricqin/p/18582406

这是 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.hqwc.cn/news/845539.html

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

相关文章

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

20222425 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 本周学习内容:本周我们学了web安全的章节,首先我们了解了前端和后端技术,其次我们学习了一些web安全攻防的内容,例如SQL注入和XSS跨站脚本攻击、CSRF以及安全防范的内容。在实验的过程中我们学到了网络欺诈与防范技术。 2.实验过程 主机IP:192.168.35.1 kali(…

基于Bootstrap3的简单柱状图表插件

jchart是一款简单小巧的基于Bootstrap3.x的jquery柱状图表插件。该柱状图片表插件通过简单的设置,就可以生成非常漂亮的水平柱状图,并带有水平和垂直标签以及图表的头部和尾部。 在线演示 下载 使用方法 该jQuery柱状图插件可以通过javascript来调用,也可以直接使用HTML标…

编译OpenCV——jetson嵌入式平台

jetson嵌入式平台的系统为:ubuntu20.04 aarch64 不再研究Ubuntu x64上交叉编译ubuntu aarch64的OpenCV库,因为无法识别到arm的GTK导致编译不进去,最终imshow时会报如下错误:modules/highgui/src/window.cpp:611:error: (-2) The function is not implemented. Rebuild the …

Breakout pg walkthrough Intermediate

nmap ┌──(root㉿kali)-[~/lab] └─# nmap -p- -A 192.168.192.182 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-02 04:50 UTC Nmap scan report for 192.168.192.182 Host is up (0.071s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SE…

从开发者工具转型 AI 呼叫中心,这家 Voice Agent 公司已服务 100+客户

Retell.ai 的 5 位联创。(图:maginative.com)Retell AI 提供一个平台,用于构建和部署可进行自然、类人对话的 AI voice agent,赋能呼叫中心,替代或辅助人工座席。Retell AI 起初为构建 voice agent 产品的开发者提供 API,现已将重点转向为中型企业提供完整的 AI 呼叫中心…

实验5文档部分代码

实验一找到输入数据中的最大值和最小值 指向x[0]输出最大数 可以 实验二80 s1的内存大小和字符串长度 能 s1存储的内容是字符串"Learning makes me happy",而sizeof(s1)返回的是整个指针类型的大小\ 不能 在原始代码中,通过赋值的方式为s1分配内存空间,并初始化其…

IC Compiler II(ICC II)后端设计流程——超详细

Preface 本文中英文结合(学习一些专有名词),主要介绍ICC II软件进行后端设计的主要流程,在阅读之前需要对数字IC设计流程有一定的了解。 逻辑综合相关知识请查看:Synopsys逻辑综合及DesignCompiler的使用(想了解逻辑综合的可以看看这个,但内容较多) 数字IC设计整体流程…

迁移工具简介

迁移工具能有序、安全、便捷、轻松地将数字资产、服务、IT 资源及应用程序部分或完全迁移到天翼云,同时保证云上业务的可用性、安全性以及连续性。支持 x86、 ARM 同构服务器间迁移,覆盖多种主流操作系统、支持信创适配。本文分享自天翼云开发者社区《迁移工具简介》,作者:…

智慧园区算法视频分析服务器如何确保视频监控系统在极端天气下也能稳定运行?

在面对极端天气条件时,确保智慧园区算法视频分析服务器的稳定运行对于维持关键监控系统的连续性和数据安全性至关重要。以下是一系列措施,旨在保障视频监控系统在诸如暴雨、高温、暴雪等恶劣天气条件下的可靠性和有效性。通过实施这些策略,我们可以最大程度地减少极端天气对…

Docker常用应用之稍后阅读

1.简介 wallabag是一款开源的,可以自托管的稍后阅读工具。提供了浏览器插件和手机客户端,可以很方便的收藏文章用于稍后再看。 wallabag官网,wallabag github地址,wallabag dockerhub 2.部署 2.1.docker部署 cd /docker_data/ mkdir -p wallabag/data cd wallabag vi docke…

css 边框镶角

效果图:background: linear-gradient(to left, yellow, yellow) left top no-repeat,linear-gradient(to bottom, yellow, yellow) left top no-repeat,linear-gradient(to left, yellow, yellow) right top no-repeat,linear-gradient(to bottom, yellow, yellow) right top …