keyhole操作文档功能概述Part1

keyhole操作文档功能概述Part1Keyhole 操作文档 简介 Keyhole 是一个用 GO Golang 编写的性能分析工具 用于收集统计信息并分析 MongoDB 集群的性能 在使用 Keyhole 进行性能分析时 不需要安装额外的解释器或软件来获取分析结果 使用 Keyhole 得到的分析结果可以通过 Mobi 毛笔 转换成 HTML keyhole 项目地址

大家好,我是讯享网,很高兴认识大家。

Keyhole操作文档

简介

  • Keyhole 是一个用 GO (Golang) 编写的性能分析工具,用于收集统计信息并分析 MongoDB 集群的性能。在使用Keyhole进行性能分析时,不需要安装额外的解释器或软件来获取分析结果,使用Keyhole得到的分析结果可以通过Mobi(毛笔)转换成HTML。
  • keyhole项目地址:simagix/keyhole: Survey Your Mongo Land - MongoDB Performance Analytics (github.com)

Keyhole说明文档

Part1

  • Peek at your MongoDB Clusters like a Pro with Keyhole: Part 1 | MongoDB
Download keyhole
  • 性能评估和调优是应用程序开发生命周期的重要组成部分。无响应的应用程序体验可能是资源供应不足和软件调整不当的组合。当遇到应用程序性能缓慢时,许多人通常会很快将责任归咎于数据库,但很少有人能够找出问题所在。

    Keyhole,作为一个开源项目提供,目的是拥有一个工具来快速从 MongoDB 集群收集统计数据并在几分钟内生成性能分析摘要。有一些开源工具可用于解决某些兴趣,但没有什么比 keyhole 为性能评估提供的工具更完整了。使用 keyhole 就像在 MongoDB 集群上进行 CAT 扫描。这些信息包括 MongoDB 配置、集群统计信息、数据库架构、索引和索引使用情况。您还可以确定您的性能问题是否与硬件资源(例如物理 RAM、CPU 和磁盘 IOPS)不足和/或没有正确索引的慢速查询有关。

    Keyhole 是用 Go 编写的,预编译的可执行文件可供 Linux、Windows 和 macOS 下载。此 GitHub 链接中详细介绍了下载说明。要验证Keyhole安装,请使用:

    keyhole --version 

    讯享网

    还可以使用以下命令查找所有keyhole用法:

    讯享网keyhole --help 
New Installation Validation
  • 安装和配置 MongoDB 集群后,通常会连接到集群并执行检查。 Keyhole 接受一个 mongo 连接字符串来连接到集群。下面的示例打印出许多集群配置和指标:
    keyhole --info "mongodb://user:/test?replicaSet=rs" 

    如果从连接字符串中省略密码字段,keyhole 将提示输入密码。例如:

    讯享网keyhole --info "mongodb:///test?replicaSet=rs" Enter Password: 
Load Tests with Random Data
  • 默认情况下,Keyhole 负载测试运行 5 分钟,分为三个不同阶段:initialization, thrashing, and teardown.
    • Initialization: 以一致的速率将文档插入 mongo 集群以测量集群吞吐量。这也会填充内存和wiredTiger缓存中的数据。
    • Thrashing: 结合CRUD操作(create\read\update\delete)和聚合查询来衡量数据库操作时间。
    • Teardown: 批量删除文档。
  • 要开始负载测试,请使用连接字符串执行 keyhole 命令。有许多参数定义你的负载测试配置:
    • –duration:以分钟为单位定义测试的长度
    • –conn:定义并发连接数
    • –tps:定义每秒事务数
    • –tx:在文件中定义自定义交易
  • 有关负载测试的其他详细信息可从 wiki 的负载测试部分获得(Home · simagix/keyhole Wiki (github.com))。我通常运行两个负载测试:一个在副本集的主节点上执行(或在托管 mongos 的服务器上),另一个在其中一个应用程序服务器上执行。从结果中,我们可以比较网络延迟的开销。以下是示例输出:
    keyhole "mongodb:///test?replicaSet=rs" 2019/11/25 09:10:39 Duration in minute(s): 5 2019/11/25 09:10:42 Total TPS: 300 (tps) * 10 (conns) = 3000, duration: 5 (mins) ... 2019/11/25 09:11:13 [replset] Storage: 665.3 -> 982.2, rate: 31.7 MB/sec 2019/11/25 09:11:14 [replset] replication lags: - localhost:27018: 7 - localhost:27019: 3 2019/11/25 09:11:14 [replset] Memory - resident: 776, virtual: 6240, page faults: 0, iops: 1815.1 2019/11/25 09:11:14 [replset] CRUD+ - insert: , find: 1, update: 58, delete: 0, getmore: 775, command: 818 2019/11/25 09:11:14 [replset] Latency- read: 0.5, write: 2.5, command: 0.5 (ms) ... 2019/11/25 09:12:43 Average Executions Time (including network latency): 2019/11/25 09:12:43 [ Ping] 1.049222ms 2019/11/25 09:12:43 [ InsertMany] 6.ms 2019/11/25 09:12:43 [ FindOne] 3.091258ms 2019/11/25 09:12:43 [ Find] 3.ms 2019/11/25 09:12:43 [ UpdateOne] 3.ms 2019/11/25 09:12:43 [ UpdateMany] 4.ms 2019/11/25 09:12:43 [ DeleteOne] 3.ms 2019/11/25 09:12:43 [ DeleteMany] 4.94698ms ... <server status summaries> ... 2019/11/25 09:15:44 stats written to ./keyhole_stats.2019-11-25T091039-replset.gz 

    从输出中,您可以了解集群写入吞吐量(从上述示例输出的第 5 行开始为 31.7 MB/秒)、读/写延迟以及在压力情况下复制滞后。在测试结束时,将打印摘要(来自上述输出)并保存到文件中。保留文件以备将来参考。 Keyhole 能够使用 --diag 标志读回文件并提供文本摘要。它还可以通过额外的 --web 标志向 Grafana 提供数据馈送。

Load Tests With Customer Data
  • 默认情况下,keyhole 会在将文档发送到 mongo 服务器之前生成随机文档。为了使用客户的文档结构进行更真实的测试,包含 --file 标志和 keyhole 将生成随机文档,其数据类型与提供的 JSON 文档中的所有字段的数据类型相同。您将首先使用以下命令创建一个包含 JSON 文档的文件,例如,命名.users 中的 users.json 文件:
    讯享网mongo "mongodb://user:/example?replicaSet=rs&authSource=admin" \ --eval 'db.users.findOne()' > users.json 

    然后,按以下方式执行负载测试:

    keyhole --file users.json "mongodb:///test?replicaSet=rs" 
Existing Cluster Health Check
  • 对于现有的 mongo 集群,Keyhole 会收集其他信息来评估集群性能。
  • Keyhole 使用 --info 和 -v 参数收集其他配置和统计信息。包含所有收集信息的 JSON 文档被写入一个 gzip 文件。
    讯享网keyhole -v --info "mongodb:///test?replicaSet=rs" JSON is written to host.local.json.gz 
  • 解压缩文件并在浏览器中查看文件。您将在下面找到信息:
    • cluster: standalone, replica or sharded # 集群:独立、副本或分片
    • config: cluster configurations details # config:集群配置详情
      • buildInfo # 构建信息
      • getCmdLineOpts # 获取命令行选项
      • hostInfo # 主机信息
      • replSetGetStatus # 复制设置获取状态


        讯享网

      • rolesInfo # 角色信息
      • serverStatus #服务器状态
      • usersInfo # 用户信息
    • databases: # 数据库
      • DB: database name # DB:数据库名称
      • collections: an array of collection information # collections:集合信息的数组
        • NS: namespace # NS:命名空间
        • collection: collection name # 集合:集合名称
        • document: a sample document # 文档:示例文档
        • indexes: all indexes of the collection and duplicate index removal recommendations # 索引:集合的所有索引和重复索引删除建议
      • stats: storage stats # stats:存储统计
    • host: hostname # 主机:主机名
    • process: connected process: mongod or mongos # 进程:连接进程:mongod 或 mongos
    • sharding: sharding info if applicable # 分片:分片信息(如果适用)
    • storage # 贮存
      • databases: an array of database storage stats # 数据库:一组数据库存储统计信息
      • totalDataSize (MB): total data size, # totalDataSize (MB):总数据大小,
      • totalIndexSize (MB): total index size # totalIndexSize (MB):索引总大小
    • version: MongoDB version # 版本:MongoDB 版本
Generate HTML Summary Report
  • 可以使用Maobi(毛笔) Docker 镜像生成 HTML 报告,这是为 Keyhole 创建的 HTML 报告生成工具。
  • 生成的报告显示了你的 MongoDB 集群的统计信息和配置,其中有两个我特别感兴趣的统计信息。第一个统计信息是确保您的索引完全适合 RAM,以便服务器可以避免从磁盘读取索引。这是通过将存储下的总索引大小与系统内存(服务器信息下的 system.memSizeMB)进行比较来完成的。以下是存储部分的示例:

    和服务器信息部分:

    另一种是检查每个集合下的索引重复和用法。删除冗余和未使用的索引可提高写入性能。

  • 出于明显的读取性能改进原因,开发人员喜欢创建索引。但是存在一些从未使用过或重复的索引,因为它们是其他索引的前缀。以下是生成的 HTML 摘要报告的示例:

    可以删除标有 ✘ 的索引,因为另一个现有的复合索引也可以覆盖它。应评估标有 ❓ 的索引,因为自 MongoDB 服务器上次启动以来它从未使用过。

    Keyhole 还可以通过执行命令来显示索引使用情况,并可信地标记要评估的索引(使用 ❓ 前缀)或删除(使用 ✘ 前缀)。例如:

    keyhole --index "mongodb:///test?replicaSet=rs" test.numbers: { 
          _id: 1 } host: host.local:27017, ops: 123,456, since: 2019-11-13 14:48:04.473 +0000 UTC x { 
          a: 1 } host: host.local:27017, ops: 0, since: 2019-11-13 14:48:04.473 +0000 UTC x { 
          a: 1, b: 1 } host: host.local:27017, ops: 0, since: 2019-11-13 14:48:04.473 +0000 UTC { 
          a: 1, b: 1, c: 1 } host: host.local:27017, ops: 54,168, since: 2019-11-13 14:48:04.473 +0000 UTC ? { 
          region: 1 } host: host.local:27017, ops: 0, since: 2019-11-13 14:48:04.473 +0000 UTC 

如果本文对您的工作学习有帮助,请您点一个免费的赞,您的鼓励是我继续创作的动力!

小讯
上一篇 2025-02-21 23:37
下一篇 2025-04-10 08:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27594.html