1. ホーム
  2. データベース
  3. モンゴルディーブ

MongoDB監視ツール mongostat と mongotop の使用方法

2022-01-23 01:25:33

    MongoDBにはmongostatとmongotopという2つの監視ツールが付属しており、今日はその使い方を見ていきましょう。

モンゴスタット

mongostatツールは、mongodとmongosの動作状況やデータを提供するツールです。mongostatツールの実行結果からは以下の情報を得ることができます。

[root@VM-0-14-centos ~]# mongostat --port=27018 -u "yeyz" --authenticationDatabase "admin" -p "123456" 
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn set repl time
 *0 *0 *0 *0 *0 0 14|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.66k 83.8k 22 sharding_yeyz PRI Nov 19 11:42:08.431
 *0 *0 *0 *0 *0 0 13|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.93k 71.7k 22 sharding_yeyz PRI Nov 19 11:42:09.434
 *0 *0 *0 *0 *0 0 12|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.39k 70.5k 22 sharding_yeyz PRI Nov 19 11:42:10.433
 *0 *0 *0 *0 *0 0 13|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.93k 71.8k 22 sharding_yeyz PRI Nov 19 11:42:11.433
 *0 *0 *0 *0 *0 2 15|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 3.72k 74.0k 22 sharding_yeyz PRI Nov 19 11:42:12.432
 *0 *0 *0 *0 *0 0 13|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.93k 71.8k 22 sharding_yeyz PRI Nov 19 11:42:13.432
 *0 *0 *0 *0 *0 0 11|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.39k 70.4k 22 sharding_yeyz PRI Nov 19 11:42:14.433
 *0 *0 *0 *0 *0 0 14|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.98k 72.6k 22 sharding_yeyz PRI Nov 19 11:42:15.434
 *0 *0 *0 *0 *0 0 15|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 2.06k 137k 22 sharding_yeyz PRI Nov 19 11:42:16.431
 *0 *0 *0 *0 *0 3 17|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 6.47k 77.0k 22 sharding_yeyz PRI Nov 19 11:42:17.432
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn set repl time
 *0 *0 *0 *0 *0 0 14|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 2.23k 73.1k 22 sharding_yeyz PRI Nov 19 11:42:18.432
 *0 *0 *0 *0 *0 0 16|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 2.49k 73.7k 22 sharding_yeyz PRI Nov 19 11:42:19.431
 *0 *0 *0 *0 *0 0 11|0 0.5% 0.6% 0 1.41G 59.0M 0|0 1|0 1.39k 70.2k 22 sharding_yeyz PRI Nov 19 11:42:20.435

ここでは、いくつかの重要なコラムを明確にする必要があります。

insert, query, update, delete はそれぞれ1秒あたりの操作回数を表します。

getmoreは、文書の数を取得するために、現在のバッチクエリを表し、もしクエリのドキュメントより、mongodbは自動的にバッチクエリされます。

commandはプライマリとセカンダリのノードコマンドの数を表し、スレーブで実行した場合はスレーブが実行したコマンドデータとスレーブを複製した他のインスタンスのコマンド実行を|で分割して表示します。

dirtyは、wiretigerストレージエンジンのキャッシュにあるダーティバイトの割合を表します。

used は、wiretiger storage engine のキャッシュのうち、使用された割合を表します。

flushed は wireTiger ストレージエンジンで発生したチェックポイントの回数を表し、MMAPv1 ストレージエンジンでは、現在ディスクに書き込まれているデータの回数を表します。

vsize: プログラムが適用する仮想メモリのサイズ

res: 現在使用されている物理メモリの量(単位:Mb

qrw: 読み込み待ちのドキュメント数、書き込み待ちのドキュメント数

{arw arw: 読み込み中の文書数と書き込み中の文書数

net_in|net_out ネットワークトラフィックの受信と送信

conn: 現在の接続数

mongostat は連続出力コマンドなので、手動で終了させない限りは実行され続け、画面に出力されることに注意してください。

モンゴトープ

mongotopはmongostatと比べると出力が制限されます、以下の例を参照してください。

[root@VM-0-14-centos ~]# mongotop --port=27018 -u "yeyz" --authenticationDatabase "admin" -p "123456" 
2020-11-19T11:53:22.898+0800 connected to: 127.0.0.1:27018


     ns total read write 2020-11-19T11:53:23+08:00
    admin.system.keys 0ms 0ms 0ms 0ms    
   admin.system.roles 0ms 0ms 0ms 0ms    
   admin.system.users 0ms 0ms 0ms 0ms    
   admin.system.version 0ms 0ms 0ms 0ms    
config.cache.chunks.config.system.sessions 0ms 0ms 0ms 0ms    
  config.cache.chunks.test.test0 0ms 0ms 0ms 0ms    
  config.cache.chunks.test.test1 0ms 0ms 0ms 0ms    
   config.cache.collections 0ms 0ms 0ms 0ms    
   config.cache.databases 0ms 0ms 0ms 0ms    
   config.system.sessions 0ms 0ms 0ms 0ms 

ns, コレクション名

total: 読み書きした時間(単位:ms)

read: 読書に費やした時間

write: 執筆に費やした時間

mongotopの出力は、各コレクションの各テーブルの読み込みと書き込みを表しています。各ライブラリ内で読み込みと書き込みに費やされた時間が ms 単位で表示されるので、読み込みと書き込みのボトルネックを素早く見つけるのに役立ちます。

コマンドmongotopは1回だけ実行されますが、間隔をあけて実行したい場合は、次のようにします。

mongotop 30

これは、mongotopコマンドが30秒ごとに実行され、mongodbの実行状況を継続的にチェックできるように記述されています。

これら2つのツールのほかにも、クラスタの状態を確認するためのコマンドは数多く存在します。

  • db.serverStatus()
  • db.stats()
  • db.collStats()
  • rs.status()

これらのコマンドは、以下で個別に説明します。

db.serverStatus()

このコマンドは、ホスト名、バージョン、プロセス、連続実行時間、接続状況、稼働状況など、MongoDB全体の一覧を表示します。かなり長い結果が表示されるので、ここでは一般的な情報をいくつか挙げるにとどめます。

host: ホスト名

バージョン MongoDB のバージョン

プロセス PID プロセス番号

アップタイム:ホストの実行時間

asserts: MongoDBが起動した後のアラームの統計数

コネクションを表示します。MongoDB の接続統計

network:MongoDBのネットワーク状況

storageEngine: ストレージエンジンの情報

mem:現在使用しているメモリに関する情報

db.stats()

このコマンドは、dbに関する情報を表示します。サーバーレベルの情報はありませんが、次のdbの意味を説明しましょう。

> db.stats()
{
 "db" : "admin",
 "collections" : 3,
 "views" : 0,
 "objects" : 6,
 "avgObjSize" : 306.5,
 "dataSize" : 1839,
 "storageSize" : 106496,
 "numExtents" : 0,
 "indexes" : 5,
 "indexSize" : 139264,
 "fsUsedSize" : 38917517312,
 "fsTotalSize" : 52709240832,
 "ok" : 1
} 

db: 現在のデータベースの名前を表します。

collections: 現在のデータベース内のコレクション数

view: 現在のデータベースにおけるビューの数です。

objects: 現在のデータベースにあるすべてのドキュメントの数

avgObjSize: データベース内のドキュメントの平均サイズ

dataSize: データベースの現在のデータサイズ(バイト)

storageSize: 現在のデータベースが使用しているハードディスク領域のサイズ(バイト単位

numExtents: 現在のデータベース内のすべてのExtentセットの拡張子の数の統計値

indexes: 現在のデータベースにおけるインデックスの数

indexSize: 現在のデータベースにおけるインデックスの数(バイト単位

fsUsedSize: MongoDb がある現在のハードディスクがすでに使っている容量です。

fsTotalSize: 現在の MongoDb のハードドライブの総容量

OK 1は成功、0は失敗を意味する

db.coll.stats()

この関数は、コレクションの状態に関する情報を返します。多くの出力があるので、ここでは重要な部分のみを述べます。

> db.yeyz.stats()
{
 "ns" : "test.yeyz",
 "size" : 115,
 "count" : 3,
 "avgObjSize" : 38,
 "storageSize" : 36864,
 "capped" : false,
 "wiredTiger" : {
  "metadata" : {
   "formatVersion" : 1
  },

ns: 現在のコレクションの名前

size: 現在のコレクションのサイズ(バイト)

count: 現在のコレクションに含まれるドキュメントの数

nindexes: 現在のコレクションに含まれるインデックスの数

totalIndexSize: 現在のコレクションに含まれるすべてのインデックスのサイズ (単位: バイト)

rs.status()

この関数は、レプリカセット内のメンバーのステータス情報を以下のように表示するために使用します。

yeyz_repl0:PRIMARY> rs.status()
{
 "set" : "yeyz_repl0",
 "date" : ISODate("2020-11-20T15:35:12.386Z"),
 "myState" : 1,
 "term" : NumberLong(46),
 "syncingTo" : "",
 "syncSourceHost" : "",
 "syncSourceId" : -1,
 "heartbeatIntervalMillis" : NumberLong(2000),
 "optimes" : {
  "lastCommittedOpTime" : {
   "ts" : Timestamp(1605886492, 1),
   "t" : NumberLong(46)
  },
  "readConcernMajorityOpTime" : {
   "ts" : Timestamp(1605886492, 1),
   "t" : NumberLong(46)
  },
  "appliedOpTime" : {
   "ts" : Timestamp(1605886502, 1),
   "t" : NumberLong(46)
  },
  "durableOpTime" : {
   "ts" : Timestamp(1605886502, 1),
   "t" : NumberLong(46)
  }
 },
 "lastStableCheckpointTimestamp" : Timestamp(1605886462, 1),
 "members" : [],
 "ok" : 1,
 "operationTime" : Timestamp(1605886502, 1),
 "$clusterTime" : {
  "clusterTime" : Timestamp(1605886502, 1),
  "signature" : {
   "hash" : BinData(0,"C8IXyxh/1zCqWtwxI1mfMgq9DAE="),
   "keyId" : NumberLong("6891183663887679489")
  }
 }

よく使われるフィールドについて、以下のように説明します。

set: レプリカセットの名前

日付: 現在の時刻

myState: 現在のレプリカセットノードの状態

term: レプリカセットに含まれる選挙権の数

syncingTo: データを同期するレプリカセットを指定します。

syncSourceHost, syncSourceId はそれぞれ同期対象ノードのホストと ID を表します。

heartbeatIntervalMills: レプリカが設定するハートビート頻度、単位はミリ秒

optimes: レプリカセットの同期の進捗情報

lastStableCheckPointTimestamp: 直近のチェックポイントの時刻をリストアップします。

members: レプリカセットに含まれる各メンバーの情報データをリストアップします。

以上、MongoDB監視ツールのmongostatとmongotopの詳細です。MongoDB監視ツールの詳細については、BinaryDevelopの他の関連記事に注目してください