jak mogę zobaczyć, na których portach mongo nasłuchuje z powłoki mongo?

100

Jeśli mam uruchomioną instancję mongo, jak mogę sprawdzić, na jakich numerach portów nasłuchuje z powłoki? Myślałem, że db.serverStatus()to wystarczy, ale tego nie widzę. widzę to

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

Który jest blisko ... ale nie. Propozycje? Przeczytałem dokumentację i nie mogę znaleźć żadnego polecenia, które to zrobi.

jcollum
źródło
Czy potrzebujesz muszli mongo? Czy wystarczy zwykła powłoka unixa? :)
Sergio Tulentsev
@SergioTulentsev Zastanawiam się konkretnie, czy jest to możliwe wewnątrz muszli mongo - skoro już znalazłem informację, która jest blisko.
jcollum

Odpowiedzi:

72

Z powłoki systemowej możesz użyć lsof(patrz odpowiedź Dericka poniżej) lub netstat -anzobaczyć, co faktycznie robi proces. Jednak zakładając, że masz dostęp tylko do mongopowłoki (co sugeruje tytuł twojego pytania), możesz uruchomić serverCmdLineOpts()polecenie. To wyjście da ci wszystkie argumenty przekazane w linii poleceń (argv) i te z pliku konfiguracyjnego (przeanalizowane) i możesz wywnioskować, że porty mongodnasłuchują na podstawie tych informacji. Oto przykład:

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
}

Jeśli nie przekazałeś określonych opcji portu, takich jak te powyżej, domyślnie mongodnasłuchuje na 27017 i 28017 ( konsola http ). Uwaga: istnieje kilka innych argumentów, które mogą zmieniać porty bez podawania ich wprost, zobacz tutaj:

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

Adam Comerford
źródło
4
Mój wynik jest taki: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }to niewiele mi mówi. Myślę, że mówi mi, że jestem na domyślnym porcie.
jcollum,
5
racja - jeśli w ogóle nie jest określone (iw twoim przypadku tak się wydaje), wszystko jest domyślne, co stawia cię na 27017
Adam Comerford,
219

Możesz to zrobić z powłoki systemu operacyjnego, uruchamiając:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Derick
źródło
4
@SmartyTwiti Jawnie poprosiłem o polecenie używające powłoki mongo; lsof nie działa
jcollum
36

Spróbuj tego:

db.runCommand({whatsmyuri : 1})

Wyświetli zarówno adres IP, jak i numer portu.

Ganu
źródło
czy to jest nowe? w jakiej wersji mongo się pojawił?
jcollum
1
@jcollum w wersji 3.0 ma tę nową funkcję.
Ganu
6
Wygląda na to, że pokazuje port powłoki lub coś ... Wyjście z lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (SŁUCHAJ) I z whatsmyurlpolecenia: {"you": "127.0.0.1:50294", "ok": 1 } I nie pasują.
dmi3y,
11

MongoDB domyślnie nasłuchuje tylko na jednym porcie (27017). Jeśli --restinterfejs jest aktywny, port 28017 (27017 + 1000) również będzie otwarty i będzie obsługiwał żądania z sieci WWW o szczegółowe informacje.

MongoDB obsługuje getParameterpolecenie, ale działa to tylko wtedy, gdy masz już połączenie z bazą danych (w tym momencie znasz już port).

Gates VP
źródło
2
Hmm, więc możemy powiedzieć, że jeśli jestem podłączony i nie znam portu, to musi to być 27017. Jeśli port nie jest 27017, muszę znać port, aby się połączyć. Brzmi dobrze?
jcollum
1

Wypróbuj następujące polecenie, to działa dla mnie:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
nixxo_raa
źródło