làm thế nào để tôi có thể biết những cổng mongo đang nghe từ trình bao mongo?


99

Nếu tôi có một phiên bản mongo đang chạy, làm cách nào tôi có thể kiểm tra số cổng mà nó đang nghe từ shell? Tôi nghĩ rằngdb.serverStatus() sẽ làm được nhưng tôi không thấy. tôi thấy điều này

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

Đó là gần ... nhưng không. Gợi ý? Tôi đã đọc các tài liệu và dường như không thể tìm thấy bất kỳ lệnh nào sẽ thực hiện việc này.


Bạn có cần vỏ mongo? Hoặc trình bao unix thông thường sẽ làm gì? :)
Sergio Tishedsev

@SergioTishedsev Tôi đặc biệt tự hỏi liệu điều này có thể xảy ra bên trong mongo shell hay không - vì tôi đã tìm thấy thông tin gần đúng.
jcollum

Câu trả lời:


72

Từ vỏ hệ thống, bạn có thể sử dụng lsof(xem câu trả lời của Derick bên dưới) hoặc netstat -anđể xem quá trình thực sự đang làm gì. Tuy nhiên, giả sử bạn chỉ có quyền truy cập vào mongoshell (mà tiêu đề câu hỏi của bạn ngụ ý), thì bạn có thể chạy serverCmdLineOpts()lệnh. Đầu ra đó sẽ cung cấp cho bạn tất cả các đối số được truyền trên dòng lệnh (argv) và các đối số từ tệp cấu hình (được phân tích cú pháp) và bạn có thể suy ra các cổng mongodđang lắng nghe dựa trên thông tin đó. Đây là một ví dụ:

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
}

Nếu bạn chưa vượt qua các tùy chọn cổng cụ thể như những tùy chọn ở trên, thì mặc định mongodsẽ nghe trên 27017 và 28017 ( bảng điều khiển http ). Lưu ý: có một số đối số khác có thể thay đổi các cổng mà không rõ ràng, hãy xem tại đây:

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


4
Kết quả của tôi là: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }điều đó không cho tôi biết nhiều điều. Tôi đoán nó cho tôi biết tôi đang ở cổng mặc định.
jcollum

5
đúng - nếu nó không được quy định tại tất cả (và trong trường hợp của bạn mà có vẻ như nó) sau đó tất cả mọi thứ là giá trị mặc định, trong đó đặt bạn vào 27.017
Adam Comerford

220

Bạn có thể thực hiện việc này từ vỏ Hệ điều hành bằng cách chạy:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

4
@SmartyTwiti Tôi đã yêu cầu một cách rõ ràng một lệnh bằng cách sử dụng mongo shell; lsof không làm việc
jcollum

35

Thử cái này:

db.runCommand({whatsmyuri : 1})

Nó sẽ hiển thị cả địa chỉ IP và số cổng.


đó là mới? phiên bản mongo đã hiển thị trong?
jcollum

1
@jcollum Phiên bản 3.0 có tính năng mới này.
Ganu

6
Điều này dường như hiển thị cổng của shell hoặc thứ gì đó ... Đầu ra từ lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) Và từ whatsmyurllệnh: {"you": "127.0.0.1:50294", "ok": 1 } Và chúng không khớp.
dmi3y

12

MongoDB chỉ nghe trên một cổng theo mặc định (27017). Nếu --restgiao diện đang hoạt động, cổng 28017 (27017 + 1000) cũng sẽ mở để xử lý các yêu cầu web để biết chi tiết.

MongoDB hỗ trợ một getParameterlệnh, nhưng lệnh đó chỉ hoạt động nếu bạn đã kết nối với Cơ sở dữ liệu (tại thời điểm đó bạn đã biết cổng).


2
Hmm, vì vậy chúng ta có thể nói rằng nếu tôi được kết nối và không biết cổng, nó phải là 27017. Nếu cổng không phải là 27017, tôi phải biết cổng để kết nối. Âm thanh phải không?
jcollum

2

Hãy thử lệnh sau, lệnh này phù hợp với tôi:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.