Kiểm tra số lượng kết nối hiện tại với MongoDb


90

Lệnh để lấy số lượng máy khách được kết nối với một máy chủ MongoDB cụ thể là gì?

Câu trả lời:


163

kết nối với cơ sở dữ liệu quản trị và chạy db.serverStatus():

> var status = db.serverStatus()
> status.connections
   {"current" : 21, "available" : 15979}
> 

Bạn có thể nhận trực tiếp bằng cách truy vấn

db.serverStatus().connections

Để hiểu db.serverStatus().connectionsphản hồi của MongoDb có nghĩa là gì, hãy đọc tài liệu tại đây .

kết nối

"connections" : {
   "current" : <num>,
   "available" : <num>,
   "totalCreated" : NumberLong(<num>)
},

kết nối Một tài liệu báo cáo về trạng thái của các kết nối. Sử dụng các giá trị này để đánh giá yêu cầu tải và dung lượng hiện tại của máy chủ.

kết nối.current Số lượng kết nối đến từ máy khách đến máy chủ cơ sở dữ liệu. Con số này bao gồm phiên shell hiện tại. Hãy xem xét giá trị của các kết nối.available để thêm ngữ cảnh vào dữ liệu này.

Giá trị sẽ bao gồm tất cả các kết nối đến bao gồm mọi kết nối shell hoặc kết nối từ các máy chủ khác, chẳng hạn như các thành viên tập hợp bản sao hoặc các cá thể mongos.

kết nối . có sẵn Số lượng kết nối đến không sử dụng khả dụng. Hãy xem xét giá trị này kết hợp với giá trị của connect.current để hiểu tải kết nối trên cơ sở dữ liệu và tài liệu Cài đặt ulimit UNIX để biết thêm thông tin về ngưỡng hệ thống trên các kết nối khả dụng.

Kết nối.total Được tạo ra Tổng số tất cả các kết nối đến được tạo tới máy chủ. Con số này bao gồm các kết nối đã đóng.


25

Tổng số kết nối theo ClientIP, với Tổng số

Chúng tôi sử dụng điều này để xem số lượng kết nối bằng IPAddress với tổng số kết nối. Điều này thực sự hữu ích trong việc gỡ lỗi sự cố ... chỉ cần đến đó trước khi đạt được kết nối tối đa!

Đối với Mongo Shell:

db.currentOp(true).inprog.reduce((accumulator, connection) => { ipaddress = connection.client ? connection.client.split(":")[0] : "Internal"; accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1; accumulator["TOTAL_CONNECTION_COUNT"]++; return accumulator; }, { TOTAL_CONNECTION_COUNT: 0 })

Đã định dạng:

db.currentOp(true).inprog.reduce(
  (accumulator, connection) => {
    ipaddress = connection.client ? connection.client.split(":")[0] : "Internal";
    accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1;
    accumulator["TOTAL_CONNECTION_COUNT"]++;
    return accumulator;
  },
  { TOTAL_CONNECTION_COUNT: 0 }
)

Ví dụ về trả lại:

{
    "TOTAL_CONNECTION_COUNT" : 331,
    "192.168.253.72" : 8,
    "192.168.254.42" : 17,
    "127.0.0.1" : 3,
    "192.168.248.66" : 2,
    "11.178.12.244" : 2,
    "Internal" : 41,
    "3.100.12.33" : 86,
    "11.148.23.34" : 168,
    "81.127.34.11" : 1,
    "84.147.25.17" : 3
}

(địa chỉ 192.xxx tại giám sát nội bộ Atlas)

"Nội bộ" là các quy trình nội bộ không có ứng dụng khách bên ngoài. Bạn có thể xem danh sách những thứ này với cái này:

db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);

Bạn có thể vui lòng giải thích ý nghĩa của IP "Nội bộ" trong danh sách trả lại?
thùng carton.

Tôi không thể chạy trên ví dụ về một trường hợp Mongo atlas: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :sử dụng người dùng admin
otong

@ carton.swing Tôi đã cập nhật câu trả lời kèm theo lời giải thích và lệnh để xem chúng.
SuperGoTeam

@otong bạn lấy lại chỉ để làm db.currentOp(true)gì?
SuperGoTeam

Có vẻ như nó bị từ chối bởi atlas MongoDB: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong

19

db.serverStatus()không cung cấp kết nối hoạt động và có sẵn nhưng không hiển thị các kết nối từ ứng dụng khách nào. Để biết thêm thông tin, bạn có thể sử dụng lệnh này sudo lsof | grep mongod | grep TCP. Tôi cần nó khi tôi đã nhân rộng và nút chính có nhiều kết nối máy khách hơn thứ cấp.

$ sudo lsof | grep mongod | grep TCP
mongod    5733             Al    6u     IPv4 0x08761278       0t0       TCP *:28017 (LISTEN)
mongod    5733             Al    7u     IPv4 0x07c7eb98       0t0       TCP *:27017 (LISTEN)
mongod    5733             Al    9u     IPv4 0x08761688       0t0       TCP 192.168.1.103:27017->192.168.1.103:64752 (ESTABLISHED)
mongod    5733             Al   12u     IPv4 0x08761a98       0t0       TCP 192.168.1.103:27017->192.168.1.103:64754 (ESTABLISHED)
mongod    5733             Al   13u     IPv4 0x095fa748       0t0       TCP 192.168.1.103:27017->192.168.1.103:64770 (ESTABLISHED)
mongod    5733             Al   14u     IPv4 0x095f86c8       0t0       TCP 192.168.1.103:27017->192.168.1.103:64775 (ESTABLISHED)
mongod    5733             Al   17u     IPv4 0x08764748       0t0       TCP 192.168.1.103:27017->192.168.1.103:64777 (ESTABLISHED)

Điều này cho thấy rằng tôi hiện có năm kết nối đang mở với cổng MongoDB (27017) trên máy tính của mình. Trong trường hợp của tôi, tôi đang kết nối với MongoDB từ máy chủ Scalatra và tôi đang sử dụng trình điều khiển MongoDB Casbah, nhưng bạn sẽ thấy các kết nối TCP tương tự bất kể máy khách được sử dụng (miễn là chúng đang kết nối bằng TCP / IP).


1
Lệnh này trả về nhiều mục nhập cho một kết nối duy nhất: stackoverflow.com/a/42930337/1843751
kích hoạt

3
Tôi đề nghị sử dụng cờ -i cho lsof. Sau đó, bạn chỉ nhận được 1 mục nhập cho mỗi kết nối và không cần chuyển sang TCP. tức làsudo lsof -i | grep mongod
datdo

7

Tôi đã cố gắng xem tất cả các kết nối cho cơ sở dữ liệu mongo bằng lệnh sau.

netstat -anp --tcp --udp | grep mongo

Lệnh này có thể hiển thị mọi kết nối tcp cho mongodb một cách chi tiết hơn.

tcp        0      0 10.26.2.185:27017           10.26.2.1:2715              ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.1:1702              ESTABLISHED 1442/./mongod  
tcp        0      0 10.26.2.185:27017           10.26.2.185:39506           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.185:40021           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.185:39509           ESTABLISHED 1442/./mongod 
tcp        0      0 10.26.2.185:27017           10.26.2.184:46062           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.184:46073           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.184:46074           ESTABLISHED 1442/./mongod   

7

Trong OS X, hãy xem các kết nối trực tiếp trên giao diện mạng, chỉ cần thực hiện :

$ lsof -n -i4TCP:27017

mongod     2191 inanc    7u  IPv4 0xab6d9f844e21142f  0t0  TCP 127.0.0.1:27017 (LISTEN)
mongod     2191 inanc   33u  IPv4 0xab6d9f84604cd757  0t0  TCP 127.0.0.1:27017->127.0.0.1:56078 (ESTABLISHED)
stores.te 18704 inanc    6u  IPv4 0xab6d9f84604d404f  0t0  TCP 127.0.0.1:56078->127.0.0.1:27017 (ESTABLISHED)
  • Không cần sử dụng grepvv, chỉ cần sử dụng các lsofđối số của.

  • Xem các kết nối trên CLI của MongoDb, xem câu trả lời của @ milan ( mà tôi vừa chỉnh sửa ).


7

Bạn chỉ có thể sử dụng

db.serverStatus().connections

Ngoài ra, chức năng này có thể giúp bạn phát hiện các địa chỉ IP được kết nối với Mongo DB của bạn

db.currentOp(true).inprog.forEach(function(x) { print(x.client) })

1
Hoàn toàn đẹp - cảm ơn bạn! Chính xác những gì tôi đang tìm kiếm.
Thịnh vượng:

4

Ngoài ra một số chi tiết khác về các kết nối với: db.currentOp(true)

Lấy từ: https://jira.mongodb.org/browse/SERVER-5085


Tôi đã nghĩ tất cả các câu trả lời và đột nhiên - đây là một trong những câu trả lời hữu ích nhất. Truy vấn cho phép tấn chi tiết nội bộ như nó nên, kể cả thời gian kết nối, bảng hiện nay, phiên bản driver và nền tảng, và AppName thậm chí nếu được chỉ định
Dmitry Gusarov

2

Kết nối với MongoDB bằng mongo-shell và chạy lệnh sau.

db.serverStatus().connections

ví dụ:

mongo> db.serverStatus().connections
{ "current" : 3, "available" : 816, "totalCreated" : NumberLong(1270) }

2

db.runCommand ({"connPoolStats": 1})

{
    "numClientConnections" : 0,
    "numAScopedConnections" : 0,
    "totalInUse" : 0,
    "totalAvailable" : 0,
    "totalCreated" : 0,
    "hosts" : {

    },
    "replicaSets" : {

    },
    "ok" : 1
}

Nó được thú vị quate, tôi cũng nhận ZERO giá trị cho yêu cầu đó, nó không phải là những gì tôi muốn :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov

2

Xin lỗi vì đây là một bài cũ và hiện tại có nhiều lựa chọn hơn trước.

db.getSiblingDB("admin").aggregate( [
   { $currentOp: { allUsers: true, idleConnections: true, idleSessions: true } }
  ,{$project:{
            "_id":0
           ,client:{$arrayElemAt:[ {$split:["$client",":"]}, 0 ] }
           ,curr_active:{$cond:[{$eq:["$active",true]},1,0]}
           ,curr_inactive:{$cond:[{$eq:["$active",false]},1,0]}
           }
   }
  ,{$match:{client:{$ne: null}}}
  ,{$group:{_id:"$client",curr_active:{$sum:"$curr_active"},curr_inactive:{$sum:"$curr_inactive"},total:{$sum:1}}}
  ,{$sort:{total:-1}}
] )

Ví dụ đầu ra:

{ "_id" : "xxx.xxx.xxx.78", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.76", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.73", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.77", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.74", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.75", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.58", "curr_active" : 0, "curr_inactive" : 510, "total" : 510 }
{ "_id" : "xxx.xxx.xxx.57", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.55", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.56", "curr_active" : 0, "curr_inactive" : 408, "total" : 408 }
{ "_id" : "xxx.xxx.xxx.47", "curr_active" : 1, "curr_inactive" : 11, "total" : 12 }
{ "_id" : "xxx.xxx.xxx.48", "curr_active" : 1, "curr_inactive" : 7, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.51", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.46", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.52", "curr_active" : 0, "curr_inactive" : 6, "total" : 6 }
{ "_id" : "127.0.0.1", "curr_active" : 1, "curr_inactive" : 0, "total" : 1 }
{ "_id" : "xxx.xxx.xxx.3", "curr_active" : 0, "curr_inactive" : 1, "total" : 1 }

1

Kết nối với phiên bản mongodb của bạn từ hệ thống cục bộ

  1. sudo mongo "mongodb: // MONGO_HOST_IP: 27017" --authenticationDatabase admin

Nó sẽ cho bạn biết tất cả các khách hàng được kết nối và thông tin chi tiết của họ

  1. db.currentOp (true)


0

Ngoài ra, bạn có thể kiểm tra trạng thái kết nối bằng cách đăng nhập vào Mongo Atlas và sau đó điều hướng đến cụm của bạn.

nhập mô tả hình ảnh ở đây

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.