ฉันจะดูพอร์ตใดที่ Mongo กำลังฟังจาก mongo shell ได้อย่างไร


102

หากฉันมีอินสแตนซ์ mongo ทำงานอยู่ฉันจะตรวจสอบหมายเลขพอร์ตที่ฟังจากเชลล์ได้อย่างไร คิดว่าdb.serverStatus()จะทำ แต่ไม่เห็น ฉันเห็นสิ่งนี้

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

ซึ่งใกล้ ... แต่เปล่า. ข้อเสนอแนะ? ฉันอ่านเอกสารแล้วและดูเหมือนจะไม่พบคำสั่งใด ๆ ที่จะทำสิ่งนี้ได้


คุณต้องการเปลือก Mongo หรือไม่? หรือ unix shell ปกติจะทำอย่างไร :)
Sergio Tulentsev

@SergioTulentsev ฉันสงสัยเป็นพิเศษว่าสิ่งนี้เป็นไปได้หรือไม่ภายใน mongo shell - เนื่องจากฉันพบข้อมูลที่ใกล้เคียงแล้ว
jcollum

คำตอบ:


72

จากเชลล์ระบบคุณสามารถใช้ได้lsof(ดูคำตอบของ Derick ด้านล่าง) หรือnetstat -anเพื่อดูว่ากระบวนการกำลังทำอะไรอยู่ อย่างไรก็ตามสมมติว่าคุณมีสิทธิ์เข้าถึงmongoเชลล์เท่านั้น (ซึ่งหมายถึงหัวข้อคำถามของคุณ) จากนั้นคุณสามารถรันserverCmdLineOpts()คำสั่งได้ ผลลัพธ์นั้นจะให้อาร์กิวเมนต์ทั้งหมดที่ส่งผ่านบนบรรทัดคำสั่ง (argv) และอาร์กิวเมนต์จากไฟล์ config (แยกวิเคราะห์) และคุณสามารถอนุมานได้ว่าพอร์ตmongodกำลังรับฟังตามข้อมูลนั้น นี่คือตัวอย่าง:

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
}

หากคุณไม่ได้ผ่านตัวเลือกพอร์ตที่เฉพาะเจาะจงเช่นเดียวกับด้านบนตัวเลือกmongodนี้จะฟังบน 27017 และ 28017 ( คอนโซล http ) ตามค่าเริ่มต้น หมายเหตุ: มีอาร์กิวเมนต์อื่น ๆ อีกสองสามข้อที่สามารถเปลี่ยนพอร์ตได้โดยไม่ต้องโจ่งแจ้งโปรดดูที่นี่:

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


4
ผลลัพธ์ของฉันคือ: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }นั่นไม่ได้บอกอะไรฉันมากนัก ฉันเดาว่ามันกำลังบอกว่าฉันอยู่ในพอร์ตเริ่มต้น
jcollum

5
ถูกต้อง - ถ้าไม่ได้ระบุไว้เลย (และในกรณีของคุณดูเหมือนว่ามันจะเป็นเช่นนั้น) ทุกอย่างจะเป็นค่าเริ่มต้นซึ่งทำให้คุณอยู่ที่ 27017
Adam Comerford

221

คุณสามารถทำได้จากเชลล์ระบบปฏิบัติการโดยเรียกใช้:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

4
@SmartyTwiti ฉันขอคำสั่งโดยใช้ mongo shell อย่างชัดเจน lsof ไม่ทำงาน
jcollum

36

ลองสิ่งนี้:

db.runCommand({whatsmyuri : 1})

จะแสดงทั้งที่อยู่ IP และหมายเลขพอร์ต


ใหม่หรือเปล่า มันปรากฏใน mongo รุ่นใด
jcollum

1
@jcollum เวอร์ชัน 3.0 มีคุณสมบัติใหม่นี้
Ganu

6
ดูเหมือนว่าจะแสดงพอร์ตของเชลล์หรือบางอย่าง ... เอาต์พุตจากlsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) และจากwhatsmyurlคำสั่ง: {"you": "127.0.0.1:50294", "ok": 1 } และไม่ตรงกัน
dmi3y

11

MongoDB ฟังบนพอร์ตเดียวโดยค่าเริ่มต้น (27017) ถ้า--restอินเทอร์เฟซทำงานอยู่พอร์ต 28017 (27017 + 1000) จะเปิดการจัดการคำขอทางเว็บสำหรับรายละเอียดด้วย

MongoDB รองรับgetParameterคำสั่ง แต่จะใช้งานได้ก็ต่อเมื่อคุณเชื่อมต่อกับฐานข้อมูลแล้ว (ณ จุดนั้นคุณรู้จักพอร์ตแล้ว)


2
อืมเราก็บอกได้ว่าถ้าฉันเชื่อมต่อและไม่รู้พอร์ตต้องเป็น 27017 ถ้าพอร์ตไม่ใช่ 27017 ฉันต้องรู้พอร์ตเพื่อที่จะเชื่อมต่อ เสียงใช่ไหม
jcollum

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.