Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB的简单HTTP/TCP运行状况检查_Mongodb_Http_Tcp - Fatal编程技术网

MongoDB的简单HTTP/TCP运行状况检查

MongoDB的简单HTTP/TCP运行状况检查,mongodb,http,tcp,Mongodb,Http,Tcp,我需要在Docker容器中为MongoDB实例创建运行状况检查 尽管我可以使用CLI解决问题并使用Mongo Ping,但最好的选择是创建一个简单的HTTP或TCP测试。在标准ping测试中,默认27017端口中没有响应 有可靠的方法吗?我为mongodb创建了一个简单的健康检查,它使用mongo客户端向服务器发送一个简单的查询请求(例如db.stats()) $ mongo 192.168.5.51:30000/test MongoDB shell version: 3.2.3 connec

我需要在Docker容器中为MongoDB实例创建运行状况检查

尽管我可以使用CLI解决问题并使用Mongo Ping,但最好的选择是创建一个简单的HTTP或TCP测试。在标准ping测试中,默认27017端口中没有响应


有可靠的方法吗?

我为mongodb创建了一个简单的健康检查,它使用
mongo
客户端向服务器发送一个简单的查询请求(例如
db.stats()

$ 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
}
您也可以在一行中完成此操作:

$ echo 'db.stats().ok' | mongo 192.168.5.51:30000/test --quiet
1
希望能有所帮助

更新:

正如@luckynald所说的,
ping
命令更好,因此您可以像这样做:

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

感谢@Luckynald。

一个解决方案是使用最小的MongoDB客户端,该客户端使用脚本语言编写,容器中有解释器

例如,Python中有一个零依赖项:

如果您只需要一个简单的“ping”,那么您也可以使用
curl

curl --connect-timeout 10 --silent --show-error hostname:27017
如果您收到“错误”
,看起来您正试图通过本机驱动程序端口上的HTTP访问MongoDB。
那么您的MongoDB正在运行并回复一个答案

或使用

mongo --norc --quiet --host=hostname:27017 <<< "db.getMongo()"

mongo--norc--quiet--host=hostname:27017太棒了!解决了我的问题。如果我们想检查远程数据库,那么没有
mongo
binary,而不是本地数据库呢?警告:请注意,dbstats会在数据库运行时阻塞数据库,因此不适合在生产环境中使用。一个好的替代方法可能是命令。正如您所期望的,它是轻量级的,甚至可以在负载较重的情况下从服务器返回,这使得它非常适合运行状况检查命令TKS。伙计们,我使用了db.stats(),但现在我将切换到ping命令。