programing

MongoDB에 대한 단순 HTTP/TCP 상태 점검

i4 2023. 6. 30. 22:06
반응형

MongoDB에 대한 단순 HTTP/TCP 상태 점검

Docker 컨테이너 안에 MongoDB 인스턴스에 대한 Health Check를 만들어야 합니다.

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

도움이 되길 바랍니다.

업데이트:

@luckydonald가 말했듯이,ping명령이 더 낫기 때문에 다음과 같이 수행할 수 있습니다.

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

@luckydonald에 대해 감사합니다.

간단한 "핑"만 필요한 경우에는 다음을 사용할 수도 있습니다.curl:

curl --connect-timeout 10 --silent --show-error hostname:27017

"오류"가 발생한 경우It looks like you are trying to access MongoDB over HTTP on the native driver port.그러면 MongoDB가 실행되고 응답합니다.

또는 이 중 하나를 사용합니다.

mongosh --norc --quiet --host=hostname:27017 <<< "db.getMongo()"
mongosh --norc --quiet --host=hostname:27017 --eval "db.getMongo()" 
echo "db.getMongo()" | mongosh --norc --quiet --host=hostname:27017

에 대한 하나의 이점db.stats()명령db.getMongo()인증 없이 작동합니다. 즉, 자격 증명이 필요하지 않습니다.

참고로 SSL/TLS가 활성화된 상태에서 MongoDB를 실행하고 설정한 경우nte.tls.mode: requireTLS그런 다음 해당 인증서도 제공해야 합니다. 그렇지 않으면 실행할 수 없습니다.db.getMongo(),db.runCommand("ping")또는db.stats().그curl명령은 가장 일반적이며 어떤 경우에도 작동합니다.

한 가지 해결책은 컨테이너에 인터프리터가 있는 스크립트 언어로 작성된 최소 MongoDB 클라이언트를 사용하는 것입니다.

예를 들어, Python에는 mongo_ping_client라는 제로 종속성이 있습니다.파이의

MongoDB > 6.0의 경우 상태 점검 테스트는 다음과 같습니다.

test: mongosh --eval 'db.runCommand("ping").ok' --quiet

telnet mongodb_server_name 28017

연결에 성공하면 명령에서 다음과 유사한 출력이 표시됩니다.

Trying 9.30.252.5... Connected to 9.30.252.5. Escape character is '^]'.

연결에 실패할 경우 여기에 코드를 입력하면 터미널에서 다음과 유사한 출력이 수신됩니다.

Trying 9.30.252.5... telnet: connect to address 9.30.252.5: Connection refused telnet: Unable to connect to remote host

글꼴: https://www.ibm.com/docs/en/db2/11.1?topic=sources-testing-network-connection-mongodb-rest-service-server

언급URL : https://stackoverflow.com/questions/37839365/simple-http-tcp-health-check-for-mongodb

반응형