Search code examples
mongodbhttptcp

Simple HTTP/TCP health check for MongoDB


I need to create a Health Check for a MongoDB instance inside a Docker container.

Although I can make a workaround and use the Mongo Ping using the CLI, the best option is to create a simple HTTP or TCP testing. There is no response in the default 27017 port in standard ping testings.

Is there any trustworthy way to do it?


Solution

  • I've created a simple health check for mongodb, it uses the mongo client to send a simple query request (eg. db.stats()) to the server.

    $ mongo 192.168.5.51:30000/test
    
    MongoDB shell version: 3.2.3
    connecting to: 192.168.5.51:30000/test
    
    mongos> db.stats()
    {
        "raw" : {
            "set1/192.168.5.52:27000,192.168.5.53:27000" : {
                "db" : "test",
                "collections" : 8,
                "objects" : 50,
                "avgObjSize" : 73.12,
                "dataSize" : 3656,
                "storageSize" : 53248,
                "numExtents" : 8,
                "indexes" : 8,
                "indexSize" : 65408,
                "fileSize" : 469762048,
                "nsSizeMB" : 16,
                "dataFileVersion" : {
                    "major" : 4,
                    "minor" : 6
                },
                "extentFreeList" : {
                    "num" : 28,
                    "totalSize" : 184807424
                },
                "ok" : 1
            }
        },
        "objects" : 50,
        "avgObjSize" : 73,
        "dataSize" : 3656,
        "storageSize" : 53248,
        "numExtents" : 8,
        "indexes" : 8,
        "indexSize" : 65408,
        "fileSize" : 469762048,
        "extentFreeList" : {
            "num" : 28,
            "totalSize" : 184807424
        },
        "ok" : 1
    }
    

    You can also do this in one line:

    $ echo 'db.stats().ok' | mongo 192.168.5.51:30000/test --quiet
    1
    

    Hope it's help.

    UPDATE:

    As @luckydonald said, the ping command is better, so you can do it like:

    $ mongo --eval 'db.runCommand("ping").ok' localhost:27017/test --quiet
    1
    

    Thanks for @luckydonald.