Try   HackMD

MongoDB Diagnostics and Debugging (Version 3.4)
ch2 Tooling Overview

tags: MongoDB University M312

Introduction to Diagnostic and Debugging Tools

MongoDB tools

  • mongostat - shows incoming operation in real time.
  • mongotop - to know which collection we're spending time reading from and writing to.
  • mongoreplay - to monitor record and replay network traffic
  • mongo
  • profiler - logs queries
  • compass
  • mtools

Introducing Server Logs

Server Log Components

  • ACCESS
  • COMMAND
  • CONTROL
  • GEO
  • INDEX
  • NETWORK
  • QUERY
  • REPL
  • SHARDING
  • STORAGE
  • JOURNAL
  • WRITE

Level Description

F fatal
E error
W warning
I information, for Verbosity Levels of 0
D Debug, for All Verbosity Levels >

You can always run your system with maximum verbosity, if you wanted to capture more infomation.

mongod -vvvvv

currentOp and killOp

  • currentOp - Shows what the server doing, the current operation
db.currentOp()
  • killOp - To kill a operation
db.killOp(<opID>)

Introducing Server Status

db.serverStatus()

Although db.serverStatus() gives us a huge information, the output can be grouped into a few different sections.

List of Topics

  • Instance Information
  • Asserts
  • Connections and Network
  • Locking
  • Operation stats
  • Security
  • Replication stats
  • Storage Engine stats
  • Metrics

We can do the projection of output like this

db.runCommand( { serverStatus: 1, repl: 0, metrix: 0, lock: 1, wireTiger: 0} )

To check key of the command by js function

Object.keys(serverStatus())

The output example of serverStatus

// operation counter db.serverStatus().opcounters.insert db.serverStatus().opcounterRepl // host name db.serverStatus().host // version number db.serverStatus().version // process mongod or mongos db.serverStatus().process // process id db.serverStatus().pid // how long server is running db.serverStatus().uptime db.serverStatus().uptimeMillis // local time db.serverStatus().localtime // current establish connection db.serverStatus().connections // assertion errors raised since the server process started db.serverStatus().asserts // operation latency db.serverStatus().opLatencies

Introducing the Profiler

Turnning profiler on, every operation comming in will be stored in system.profile collection.

The collection size is 1 megabyte by default and is a capped collection.

It's better to turn off if there was no special needs.

// show the profiler level db.getProfilingLevel() // set profiler level db.setProfilingLevel()

level:
0: not capture any query
1: capture queries that take longer than 100ms
2: capture all queries

Server Diagnostic Tools

  • bsondump
  • mongo
  • mongod
  • mongodecrypt
  • mongodump
  • mongoexport
  • mongofiles
  • mongoimport
  • mongoldap
  • mongooplog
  • mongoperf
  • mongoreplay
  • mongorestore
  • mongos
  • mongostat
  • mongotop

$indexStats

We can get the usage frequency by using the aggreation.

DOC