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:
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().connections
phả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.
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);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
sử dụng người dùng admin
db.currentOp(true)
gì?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
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).
sudo lsof -i | grep mongod
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
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 grep
vv, 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 ).
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) })
Ngoài ra một số chi tiết khác về các kết nối với:
db.currentOp(true)
db.runCommand ({"connPoolStats": 1})
{
"numClientConnections" : 0,
"numAScopedConnections" : 0,
"totalInUse" : 0,
"totalAvailable" : 0,
"totalCreated" : 0,
"hosts" : {
},
"replicaSets" : {
},
"ok" : 1
}
MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
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 }
Kết nối với phiên bản mongodb của bạn từ hệ thống cục bộ
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ọ
db.currentOp (true)
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.