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

Luí*_*ito 9 tcp http mongodb

我需要为Docker容器中的MongoDB实例创建一个运行状况检查.

虽然我可以使用CLI进行解决方法并使用Mongo Ping,但最好的选择是创建简单的HTTP或TCP测试.标准ping测试中默认的27017端口没有响应.

有没有值得信赖的方法呢?

Sha*_*eok 17

我为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
}
Run Code Online (Sandbox Code Playgroud)

您也可以在一行中执行此操作:

$ echo 'db.stats().ok' | mongo 192.168.5.51:30000/test --quiet
1
Run Code Online (Sandbox Code Playgroud)

希望它有所帮助.

更新:

正如@luckydonald所说,ping命令更好,所以你可以这样做:

$ echo 'db.runCommand("ping").ok' | mongo localhost:27017/test --quiet
1
Run Code Online (Sandbox Code Playgroud)

谢谢@luckydonald.

  • 一个很好的选择可能是[ping](https://docs.mongodb.com/manual/reference/command/ping/)命令.正如您所料,它应该是轻量级的,甚至可以从负载较重的服务器返回,这使得它非常适合运行状况检查命令[](https://serverfault.com/a/625493).在pymongo中,它是`db.command('ping')`,返回`{'ok':1}`. (8认同)
  • _ [此评论](/sf/ask/610830671/#comment13659027_8727314)警告:_警告dbstats在运行时阻止您的数据库,所以它不适合生产.https://jira.mongodb.org/browse/SERVER-5714 (4认同)
  • 如果我们想检查远程数据库怎么办,所以没有`mongo`二进制,而不是本地的? (2认同)

Luc*_*mon 6

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

例如,这是 Python 中的零依赖项:mongo_ping_client.py


Wer*_*eit 5

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

curl --connect-timeout 10 --silent --show-error hostname:27017
Run Code Online (Sandbox Code Playgroud)

如果您收到“错误”,It looks like you are trying to access MongoDB over HTTP on the native driver port.那么您的 MongoDB 正在运行并回复答案。

或使用

mongo --norc --quiet --host=hostname:27017 <<< "db.getMongo()"
Run Code Online (Sandbox Code Playgroud)

反对的一个好处db.stats():命令db.getMongo()无需身份验证即可工作,即您不需要任何凭据。