mongo'nun mongo kabuğundan hangi bağlantı noktalarını dinlediğini nasıl görebilirim?


102

Çalışan bir mongo örneğim varsa, kabuktan hangi bağlantı noktası numaralarını dinlediğini nasıl kontrol edebilirim? Bunun işe db.serverStatus()yarayacağını düşündüm ama görmüyorum. bunu görüyorum

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

Hangisi yakın ... ama hayır. Öneriler? Belgeleri okudum ve bunu yapacak herhangi bir komut bulamıyorum.


Mongo kabuğuna ihtiyacınız var mı? Veya normal unix kabuğu işe yarar mı? :)
Sergio Tulentsev

@SergioTulentsev Özellikle bunun mongo kabuğunun içinde mümkün olup olmadığını merak ediyorum - çünkü zaten yakın olan bilgileri buldum.
jcollum

Yanıtlar:


72

Sistem kabuğundan kullanabilirsiniz lsof(aşağıdaki Derick'in cevabına bakın) veya netstat -anbir sürecin gerçekte ne yaptığını görmek için. Ancak, yalnızca mongokabuğa erişiminiz olduğunu varsayarsak (soru başlığınız bunu ifade eder), o zaman serverCmdLineOpts()komutu çalıştırabilirsiniz . Bu çıktı size komut satırından (argv) aktarılan tüm argümanları ve yapılandırma dosyasından (ayrıştırılmış) olanları verir ve bağlantı noktalarının mongodbu bilgilere dayanarak dinlediğini anlayabilirsiniz . İşte bir örnek:

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
}

Yukarıdakiler gibi belirli bağlantı noktası seçeneklerini mongodgeçmediyseniz , varsayılan olarak 27017 ve 28017'de ( http konsolu ) dinleyecektir . Not: Açıkça belirtilmeden bağlantı noktalarını değiştirebilen birkaç başka argüman vardır, buraya bakın:

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


4
Benim sonucum: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }bu bana pek bir şey anlatmıyor. Sanırım bana varsayılan bağlantı noktasında olduğumu söylüyor.
jcollum

5
doğru - hiç belirtilmemişse (ve sizin durumunuzda öyle gözüküyorsa) o zaman her şey varsayılandır, bu da sizi 27017'ye koyar
Adam Comerford

221

Bunu İşletim Sistemi kabuğundan çalıştırarak yapabilirsiniz:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

4
@SmartyTwiti Ben açıkça mongo kabuğunu kullanarak bir komut istedim; lsof çalışmıyor
jcollum

36

Bunu dene:

db.runCommand({whatsmyuri : 1})

Hem IP adresini hem de port numarasını gösterecektir.


bu yeni mi mongo'nun hangi versiyonu ortaya çıktı?
jcollum

1
@jcollum Sürüm 3.0 bu yeni özelliğe sahiptir.
Ganu

6
Bu, kabuğun bağlantı noktasını veya başka bir şeyi gösteriyor ... Çıkış lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) Ve whatsmyurlkomuttan: {"you": "127.0.0.1:50294", "ok": 1 } Ve eşleşmiyorlar.
dmi3y

11

MongoDB, varsayılan olarak yalnızca bir bağlantı noktasında dinler (27017). Eğer--rest arayüz aktiftir, liman 28017 (+ 1000 27017) ayrıca detaylar için açık elleçleme web istekleri olacaktır.

MongoDB bir getParameterkomutu destekler , ancak bu yalnızca Veritabanına zaten bağlıysanız çalışır (bu noktada bağlantı noktasını zaten biliyorsunuzdur).


2
Hmm, yani bağlıysam ve portu bilmiyorsam 27017 olması gerektiğini söyleyebiliriz. Port 27017 değilse, bağlanmak için portu bilmeliyim. Doğru ses?
jcollum

1

Aşağıdaki komutu deneyin, bu benim için çalışıyor:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.