comment puis-je voir sur quels ports mongo écoute depuis mongo shell?

100

Si j'ai une instance mongo en cours d'exécution, comment puis-je vérifier les numéros de port sur lesquels elle écoute depuis le shell? Je pensais que ça le db.serverStatus()ferait mais je ne le vois pas. je vois ça

"connections" : {
    "current" : 3,
    "available" : 816

Ce qui est proche ... mais non. Suggestions? J'ai lu la documentation et je n'arrive pas à trouver une commande qui fera cela.

jcollum
la source
Avez-vous besoin de mongo shell? Ou un shell Unix normal fera-t-il l'affaire? :)
Sergio Tulentsev
@SergioTulentsev Je me demande spécifiquement si cela est possible à l'intérieur de mongo shell - puisque j'ai déjà trouvé des informations qui sont proches.
jcollum

Réponses:

72

À partir du shell système, vous pouvez utiliser lsof(voir la réponse de Derick ci-dessous) ou netstat -anpour voir ce qu'un processus est en train de faire. Cependant, en supposant que vous n'ayez accès qu'au mongoshell (ce que le titre de votre question implique), vous pouvez exécuter la serverCmdLineOpts()commande. Cette sortie vous donnera tous les arguments passés sur la ligne de commande (argv) et ceux du fichier de configuration (analysé) et vous pourrez en déduire que les ports mongodécoutent en fonction de ces informations. Voici un exemple:

db.serverCmdLineOpts()
{
    "argv" : [
        "./mongod",
        "-replSet",
        "test",
        "--rest",
        "--dbpath",
        "/data/test/r1",
        "--port",
        "30001"
    ],
    "parsed" : {
        "dbpath" : "/data/test/r1",
        "port" : 30001,
        "replSet" : "test",
        "rest" : true
    },
    "ok" : 1
}

Si vous n'avez pas passé d'options de port spécifiques comme celles ci-dessus, le mongodsera à l'écoute sur 27017 et 28017 ( console http ) par défaut. Remarque: il y a quelques autres arguments qui peuvent modifier les ports sans être explicites, voir ici:

https://docs.mongodb.org/manual/reference/configuration-options/#sharding.clusterRole

Adam Comerford
la source
4
Mon résultat est: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }cela ne me dit pas grand-chose. Je suppose que cela me dit que je suis sur le port par défaut.
jcollum
5
droite - si ce n'est pas du tout spécifié (et dans votre cas, cela semble être le cas) alors tout est par défaut, ce qui vous met sur 27017
Adam Comerford
219

Vous pouvez le faire à partir du shell du système d'exploitation en exécutant:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Derick
la source
4
@SmartyTwiti J'ai explicitement demandé une commande utilisant le shell mongo; lsof ne fonctionne pas
jcollum
36

Essaye ça:

db.runCommand({whatsmyuri : 1})

Il affichera à la fois l'adresse IP et le numéro de port.

Ganu
la source
est-ce nouveau? dans quelle version de mongo est-il apparu?
jcollum
1
@jcollum Version 3.0 a cette nouvelle fonctionnalité.
Ganu
6
Cela semble montrer le port du shell ou quelque chose ... Sortie de lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) Et de la whatsmyurlcommande: {"you": "127.0.0.1:50294", "ok": 1 } Et ils ne correspondent pas.
dmi3y
11

MongoDB n'écoute que sur un port par défaut (27017). Si l' --restinterface est active, le port 28017 (27017 + 1000) sera également ouvert pour traiter les requêtes Web pour plus de détails.

MongoDB prend en charge une getParametercommande, mais cela ne fonctionne que si vous êtes déjà connecté à la base de données (à quel point vous connaissez déjà le port).

Vice-président Gates
la source
2
Hmm, donc on peut dire que si je suis connecté et que je ne connais pas le port, ce doit être 27017. Si le port n'est pas 27017, je dois connaître le port pour me connecter. Ça sonne pas?
jcollum
1

Essayez la commande suivante, celle-ci fonctionne pour moi:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
nixxo_raa
la source