Wie kann ich sehen, welche Ports Mongo von der Mongo-Shell abhört?

98

Wie kann ich überprüfen, welche Portnummern von der Shell abgehört werden, wenn eine Mongo-Instanz ausgeführt wird? Ich dachte, das db.serverStatus()würde es tun, aber ich sehe es nicht. ich sehe es

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

Welches ist nah ... aber nein. Vorschläge? Ich habe die Dokumente gelesen und kann anscheinend keinen Befehl finden, der dies tut.

jcollum
quelle
Benötigen Sie eine Mongo-Muschel? Oder reicht eine normale Unix-Shell? :)
Sergio Tulentsev
@SergioTulentsev Ich frage mich speziell, ob dies innerhalb der Mongo-Shell möglich ist - da ich bereits Informationen gefunden habe, die in der Nähe sind.
JCollum

Antworten:

71

Über die System-Shell können Sie verwenden lsof(siehe Dericks Antwort unten) oder netstat -ananzeigen, was ein Prozess tatsächlich tut. Angenommen, Sie haben nur Zugriff auf die mongoShell (was Ihr Fragentitel impliziert), können Sie den serverCmdLineOpts()Befehl ausführen . Diese Ausgabe gibt Ihnen alle Argumente, die über die Befehlszeile (argv) und die aus der Konfigurationsdatei (analysiert) übergeben wurden, und Sie können daraus schließen, dass die Ports mongodbasierend auf diesen Informationen abhören. Hier ist ein Beispiel:

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
}

Wenn Sie bestimmte mongodPortoptionen wie die oben genannten nicht übergeben haben, werden standardmäßig 27017 und 28017 ( http-Konsole ) abgehört . Hinweis: Es gibt einige andere Argumente, die Ports ändern können, ohne explizit zu sein. Siehe hier:

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

Adam Comerford
quelle
4
Mein Ergebnis ist: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }Das sagt mir nicht viel. Ich denke, es sagt mir, dass ich am Standardport bin.
JCollum
5
richtig - wenn es überhaupt nicht angegeben ist (und in Ihrem Fall scheint es so), dann ist alles Standard, was Sie auf 27017
Adam Comerford
219

Sie können dies über die Betriebssystem-Shell tun, indem Sie Folgendes ausführen:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Derick
quelle
4
@SmartyTwiti Ich habe ausdrücklich nach einem Befehl mit der Mongo-Shell gefragt. lsof funktioniert nicht
jcollum
35

Versuche dies:

db.runCommand({whatsmyuri : 1})

Es werden sowohl die IP-Adresse als auch die Portnummer angezeigt.

Ganu
quelle
ist das neu In welcher Version von Mongo ist es aufgetaucht?
JCollum
1
@jcollum Version 3.0 hat diese neue Funktion.
Ganu
6
Dies scheint den Port der Shell oder so etwas zu zeigen ... Ausgabe von lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) Und vom whatsmyurlBefehl: {"you": "127.0.0.1:50294", "ok": 1 } Und sie stimmen nicht überein.
dmi3y
12

MongoDB überwacht standardmäßig nur einen Port (27017). Wenn die --restSchnittstelle aktiv ist, ist Port 28017 (27017 + 1000) auch offen und verarbeitet Webanfragen nach Details.

MongoDB unterstützt einen getParameterBefehl, der jedoch nur funktioniert, wenn Sie bereits mit der Datenbank verbunden sind (zu diesem Zeitpunkt kennen Sie den Port bereits).

Gates VP
quelle
2
Hmm, also können wir sagen, wenn ich verbunden bin und den Port nicht kenne, muss es 27017 sein. Wenn der Port nicht 27017 ist, muss ich den Port kennen, um eine Verbindung herzustellen. Hört sich richtig an?
JCollum
2

Versuchen Sie den folgenden Befehl, dieser funktioniert für mich:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
nixxo_raa
quelle