web-dev-qa-db-ja.com

MongoDBの単純なHTTP / TCPヘルスチェック

Dockerコンテナー内にMongoDBインスタンスのヘルスチェックを作成する必要があります。

CLIを使用して回避策を作成し、Mongo Pingを使用できますが、最良のオプションは、単純なHTTPまたはTCPテストを作成することです。標準のpingテストでは、デフォルトの27017ポートに応答がありません。 。

それを行う信頼できる方法はありますか?

12
Luís Brito

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
}

これを1行で行うこともできます。

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

お役に立てば幸いです。

更新:

@luckydonaldが言ったように、pingコマンドの方が優れているため、次のように実行できます。

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

@luckydonaldをありがとう。

19
Shawyeok

1つの解決策は、コンテナー内にインタープリターが存在するスクリプト言語で記述された最小限のMongoDBクライアントを使用することです。

たとえば、Pythonの依存関係がゼロの場合は次のようになります。 mongo_ping_client.py

5
Lucas Cimon