前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能测试-mongostat监控mongoDB性能

性能测试-mongostat监控mongoDB性能

作者头像
打铁读书郎
发布2024-04-11 21:18:13
760
发布2024-04-11 21:18:13
举报

20230111_性能测试-mongostat监控mongoDB性能并生成图表

MongoDB Database Tools安装

MongoDB4.4之后不再自带mongostat命令,需要手动安装下载MongoDB Database Tools

然而网络上好多过时的资料不会给你强调这一点

安装

代码语言:javascript
复制
... # 登录至mongo所在服务器
cd  $存放路径
wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.5.2.rpm
yum install -y cyrus-sasl-gssapi cyrus-sasl-plain
yum install -y  cyrus-sasl
rpm -ivh mongodb-database-tools-rhel70-x86_64-100.5.2.rpm

测试

代码语言:javascript
复制
(base) [root@s mongo_tool]#  mongostat --host localhost:27017 
insert query update delete getmore command dirty  used flushes vsize   res qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     0|0  0.0% 63.2%       0 4.57G 2.94G 0|0 1|0   111b   43.6k   20 Jan  4 14:58:36.840
    *0    *0     *0     *0       0     1|0  0.0% 63.2%       0 4.57G 2.94G 0|0 1|0   112b   44.3k   20 Jan  4 14:58:37.833

MongoStat指令

Mongo host及端口

命令默认host为localhost:27017, 如果不是需要修改

代码语言:javascript
复制
mongostat --host localhost:27017 

Mongo 数据库是否开启认证

开启认证则需要填写mongoDB用户名,密码以及认证库(一般是admin)

用户需要有测试数据库clusterMonitor角色权限

如何给账户赋予权限?

参照:Manage Users and Roles — MongoDB Manual

如何在mongostat中填写认证信息?

代码语言:javascript
复制
mongostat -h 127.0.0.1:27017 -u root -p 123456 --authenticationDatabase admin 

使用无头模式运行

  • 通过--noheaders去除header,
  • -n 60 60代表每60s查询一次状态, 查询60次(60min), 可以根据压测时间灵活配置
  • 将状态写入日志中, 后续方便转化为趋势图
代码语言:javascript
复制
mongostat --noheaders -n 60 60>> test.log

其他命令参数可参照Reference官网文档及简书文章

图表生成

代码逻辑:

  • 通过pandas读入清洗数据
  • 通过pyecharts把数据生成图表

最终会生成一个html图表, 可以作为mongo测试报告使用

代码语言:javascript
复制
import os
import re
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from pyecharts.charts import Bar, Page
from pyecharts import options as opts
from pyecharts.globals import ThemeType

def text2list(text: str):
    temp = text.replace("|", " ").replace("*", " ").replace("G", " ").replace("M", " ").replace("b", " ").replace("k", " ")
    return re.split("\s+", temp)

def data_clean(attrs_origin: str, filename: str):
    """获取数据并进行清洗"""
    data = pd.read_table(filename)
    # list = []
    list = []
    for i in data.values:
        # 删除* , 将|转换为空格
        li = text2list(i[0])
        # 删除无用参数, 和attr对齐
        temp = li[1:20]
        temp.append(li[-1])
        list.append(temp)

    data = pd.DataFrame(list, columns=text2list(attrs_origin))
    return data

def series2list(data: pd.DataFrame ,column: str):
    # 获取1列数据
    data_str = list(data[column])
    return list(map(eval, data_str))

if __name__ == '__main__':
    # 数据清洗 : attrs_origin一般不需要动, 指定filename
    attrs_origin = "insert query update delete getmore command|command2 dirty  used flushes vsize  res qr|qw ar|aw net_in net_out conn                time"
    filename = "test_s10.log"
    data = data_clean(attrs_origin, filename)
    # 图表生成
    time_data = list(map(lambda x:x[0:5] ,data['time']))

    # 将文本转化为数字
    insert = series2list(data, "insert")
    query = series2list(data, "query")
    update = series2list(data, "update")
    delete = series2list(data, "delete")
    flushes = series2list(data, "flushes")
    res = series2list(data, "res")
    ar = series2list(data, "ar")
    aw = series2list(data, "aw")
    qr = series2list(data, "qr")
    qw = series2list(data, "qw")
    conn = series2list(data, "conn")

    # 使用pyecharts形成图表

    page = Page(layout=Page.DraggablePageLayout)

    bar1 = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
        .add_xaxis(time_data)
        .add_yaxis("insert",  insert)
        .add_yaxis("query",  query)
        .add_yaxis("update",  query)
        .add_yaxis("delete",  query)
        .set_global_opts(title_opts=opts.TitleOpts(title="Mongo增删改查监控图", subtitle="此曲线图反映了Mongo执行增删改查命令的次数变化"))
    )
    bar2 = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
        .add_xaxis(time_data)
        .add_yaxis("flushes",  flushes)
        .set_global_opts(title_opts=opts.TitleOpts(title="Mongo flushes监控图", subtitle="此曲线图反映了Mongo缓存数据的频率, 长期为1则可能存在性能问题"))
    )
    bar3 = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
        .add_xaxis(time_data)
        .add_yaxis("account read",  ar)
        .add_yaxis("account write",  aw)
        .add_yaxis("queue read,",  qr)
        .add_yaxis("queue write",  qw)
        .set_global_opts(title_opts=opts.TitleOpts(title="Mongo读写队列监控图", subtitle="此曲线图反映了Mongo执行读写操作和等待读写操作的客户端数量, 一直在累计增大则可能存在性能问题"))
    )
    bar4 = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
        .add_xaxis(time_data)
        .add_yaxis("conn",  conn)
        .set_global_opts(title_opts=opts.TitleOpts(title="Mongo conn连接监控图", subtitle="此曲线图反映了qr,qw,ar,aw连接总数,建议在5000以下"))
    )
    page.add(bar1, bar2, bar3, bar4)
    page.render("test.html")
    os.system("test.html")

pyecharts效果示例

监控指标

指标

异常情况

flush

把缓存数据强行输入,1则为进行了flush操作

频繁为1则为异常

res

物理内容使用量

突然下降则为异常

ar

account read,执行读操作的活跃客户端数量

数值很大则为异常

aw

account write,执行写操作的活跃客户端数量

数值很大则为异常

qr

queue read,读操作的队列长度

一直在累计增大

qw

queue write,写操作的队列长度

一直在累计增大

conn

连接总数,qr,qw,ar,aw综合

建议在5000以下

其他打印参数可参照Reference

Reference

官方文档重点信息摘录

  • mongostat开发用于快速总览运行中mongo及实例状态信息
  • 在系统命令行运行mongostat,而不是在mongo shell
  • mongo4.4之后, mongostat从mongo服务器中独立出来,此前是mongo自带
  • mongostat支持所有x86架构不同系统的服务器
  • mongostat tool是MongoDB Database Tools的一部分, 安装MDT来使用mongostat
  • 如果开启了认证, 使用者要拥有clusterMonitor角色的账户,并且在mongo命令中指定账号密码
  • mongostat会使用FIPS模式自动连接mongoDB
  • 官方文档还提供了命令参数和打印参数的详细解读

很多中文二手资料失真严重, 有条件多看看官方文档

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 20230111_性能测试-mongostat监控mongoDB性能并生成图表
    • MongoDB Database Tools安装
      • 安装
      • 测试
    • MongoStat指令
      • Mongo host及端口
      • Mongo 数据库是否开启认证
      • 使用无头模式运行
    • 图表生成
      • 监控指标
        • Reference
          • 官方文档重点信息摘录
      相关产品与服务
      云数据库 MongoDB
      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档