bagaimana cara melihat port mana yang didengarkan mongo dari mongo shell?

99

Jika saya menjalankan instance mongo, bagaimana cara memeriksa nomor port apa yang didengarkannya dari shell? Saya pikir itu db.serverStatus()akan berhasil tetapi saya tidak melihatnya. Saya melihat ini

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

Yang dekat ... tapi tidak. Saran? Saya telah membaca dokumen dan tidak dapat menemukan perintah apa pun yang dapat melakukan ini.

jcollum.dll
sumber
Apakah Anda membutuhkan cangkang mongo? Atau shell unix biasa akan dilakukan? :)
Sergio Tulentsev
@SergioTulentsev Saya secara khusus bertanya-tanya apakah ini mungkin di dalam mongo shell - karena saya sudah menemukan info yang dekat.
jcollum

Jawaban:

72

Dari shell sistem Anda dapat menggunakan lsof(lihat jawaban Derick di bawah) atau netstat -anuntuk melihat apa yang sebenarnya dilakukan suatu proses. Namun, dengan asumsi Anda hanya memiliki akses ke mongoshell (yang tersirat dalam judul pertanyaan Anda), maka Anda dapat menjalankan serverCmdLineOpts()perintah. Output itu akan memberi Anda semua argumen yang diteruskan pada baris perintah (argv) dan yang dari file konfigurasi (parsed) dan Anda dapat menyimpulkan bahwa port mongodmendengarkan berdasarkan informasi itu. Berikut contohnya:

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
}

Jika Anda belum memberikan opsi port tertentu seperti di atas, maka secara default mongodakan mendengarkan 27017 dan 28017 ( konsol http ). Catatan: ada beberapa argumen lain yang dapat mengubah port tanpa eksplisit, lihat di sini:

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

Adam Comerford
sumber
4
Hasil saya adalah: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }itu tidak memberi tahu saya banyak. Saya kira itu memberi tahu saya bahwa saya menggunakan port default.
jcollum
5
benar - jika tidak ditentukan sama sekali (dan dalam kasus Anda yang tampaknya seperti itu) maka semuanya default, yang menempatkan Anda pada 27017
Adam Comerford
220

Anda dapat melakukan ini dari shell Sistem Operasi dengan menjalankan:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Derick
sumber
4
@SmartyTwiti Saya secara eksplisit meminta perintah menggunakan mongo shell; lsof tidak bekerja
jcollum
35

Coba ini:

db.runCommand({whatsmyuri : 1})

Ini akan menampilkan alamat IP dan nomor port.

Ganu
sumber
apakah itu baru? dalam versi apa mongo itu muncul?
jcollum
1
@jcollum Versi 3.0 memiliki fitur baru ini.
Ganu
6
Ini sepertinya menunjukkan port shell atau sesuatu ... Output from lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (DENGARKAN) Dan dari whatsmyurlperintah: {"you": "127.0.0.1:50294", "ok": 1 } Dan mereka tidak cocok.
dmi3y
12

MongoDB hanya mendengarkan di satu port secara default (27017). Jika--rest antarmuka aktif, port 28017 (27017 + 1000) juga akan terbuka menangani permintaan web untuk detailnya.

MongoDB mendukung sebuah getParameterperintah, tetapi itu hanya berfungsi jika Anda sudah terhubung ke Database (pada titik mana Anda sudah mengetahui portnya).

Gates VP
sumber
2
Hmm, jadi bisa dibilang kalau saya terhubung dan tidak tahu portnya, pasti 27017. Jika portnya bukan 27017, saya harus tahu portnya agar bisa terhubung. Kedengarannya benar?
jcollum
2

Coba perintah yang diikuti, yang ini berhasil untuk saya:

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