ตรวจสอบจำนวนการเชื่อมต่อกับ MongoDb ในปัจจุบัน


92

คำสั่งเพื่อรับจำนวนไคลเอนต์ที่เชื่อมต่อกับเซิร์ฟเวอร์ MongoDB เฉพาะคืออะไร?

คำตอบ:


169

เชื่อมต่อกับฐานข้อมูลผู้ดูแลระบบและเรียกใช้db.serverStatus():

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

คุณสามารถรับได้โดยตรงโดยการสอบถาม

db.serverStatus().connections

เพื่อให้เข้าใจถึงสิ่งที่ไม่ MongoDB ของdb.serverStatus().connectionsค่าเฉลี่ยการตอบสนองการอ่านเอกสารที่นี่

การเชื่อมต่อ

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

การเชื่อมต่อ เอกสารที่รายงานเกี่ยวกับสถานะของการเชื่อมต่อ ใช้ค่าเหล่านี้เพื่อประเมินข้อกำหนดด้านโหลดและความจุปัจจุบันของเซิร์ฟเวอร์

connect.current จำนวนการเชื่อมต่อขาเข้าจากไคลเอนต์ไปยังเซิร์ฟเวอร์ฐานข้อมูล หมายเลขนี้รวมเซสชันเชลล์ปัจจุบัน พิจารณาคุณค่าของการเชื่อมต่อพร้อมใช้งานเพื่อเพิ่มบริบทเพิ่มเติมให้กับข้อมูลนี้

ค่านี้จะรวมการเชื่อมต่อขาเข้าทั้งหมดรวมถึงการเชื่อมต่อเชลล์หรือการเชื่อมต่อจากเซิร์ฟเวอร์อื่น ๆ เช่นสมาชิกชุดข้อมูลจำลองหรืออินสแตนซ์ mongos

connect.available จำนวนการเชื่อมต่อขาเข้าที่ไม่ได้ใช้ที่มีอยู่ พิจารณาค่านี้ร่วมกับค่าของการเชื่อมต่อปัจจุบันเพื่อทำความเข้าใจโหลดการเชื่อมต่อบนฐานข้อมูลและเอกสารการตั้งค่า UNIX ulimit สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขีด จำกัด ของระบบในการเชื่อมต่อที่พร้อมใช้งาน

connections.totalCreated จำนวนการเชื่อมต่อเข้าทั้งหมดที่สร้างขึ้นไปยังเซิร์ฟเวอร์ หมายเลขนี้รวมถึงการเชื่อมต่อที่ปิดไปแล้ว


28

จำนวนการเชื่อมต่อโดย ClientIP พร้อมด้วย Total

เราใช้สิ่งนี้เพื่อดูจำนวนการเชื่อมต่อโดย IPAddress พร้อมจำนวนการเชื่อมต่อทั้งหมด สิ่งนี้มีประโยชน์มากในการแก้ไขปัญหา ... ไปที่นั่นก่อนที่จะเชื่อมต่อสูงสุด!

สำหรับ 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 })

จัดรูปแบบ:

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 }
)

ตัวอย่างผลตอบแทน:

{
    "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
}

(ที่อยู่ 192.xxx ที่การตรวจสอบภายใน Atlas)

"ภายใน" คือกระบวนการภายในที่ไม่มีไคลเอ็นต์ภายนอก คุณสามารถดูรายการเหล่านี้ได้ด้วยสิ่งนี้:

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

คุณช่วยอธิบายความหมายของ IP "ภายใน" ในรายการส่งคืนได้ไหม
carton.swing

ฉันไม่สามารถเรียกใช้ตัวอย่างข้างต้นบนอินสแตนซ์ mongo atlas: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :โดยใช้ผู้ดูแลระบบ
otong

@ carton.swing ฉันได้อัปเดตคำตอบพร้อมคำอธิบายและคำสั่งเพื่อดู
SuperGoTeam

@otong คุณได้อะไรกลับไปเพียงdb.currentOp(true)?
SuperGoTeam

ดูเหมือนว่าจะถูกปฏิเสธโดย mongodb atlas: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong

19

db.serverStatus()ให้ไม่มีการเชื่อมต่อเปิดและประโยชน์ แต่ไม่แสดงการเชื่อมต่อจากไคลเอนต์ใด สำหรับข้อมูลเพิ่มเติมคุณสามารถใช้คำสั่งsudo lsof | grep mongod | grep TCPนี้ ฉันต้องการมันเมื่อฉันทำการจำลองแบบและโหนดหลักมีการเชื่อมต่อไคลเอนต์จำนวนมากที่มากกว่ารอง

$ 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)

นี่แสดงให้เห็นว่าฉันมีการเชื่อมต่อห้ารายการที่เปิดอยู่กับพอร์ต MongoDB (27017) บนคอมพิวเตอร์ของฉัน ในกรณีของฉันฉันกำลังเชื่อมต่อกับ MongoDB จากเซิร์ฟเวอร์ Scalatra และฉันใช้ไดรเวอร์ MongoDB Casbah แต่คุณจะเห็นการเชื่อมต่อ lsof TCP เดียวกันโดยไม่คำนึงถึงไคลเอนต์ที่ใช้ (ตราบใดที่พวกเขาเชื่อมต่อโดยใช้ TCP / IP)


1
คำสั่งนี้ส่งคืนหลายรายการสำหรับการเชื่อมต่อเดียว: stackoverflow.com/a/42930337/1843751
จุดไฟ

3
ฉันขอแนะนำให้ใช้แฟล็ก -i สำหรับ lsof จากนั้นคุณจะได้รับ 1 รายการต่อการเชื่อมต่อแต่ละครั้งและไม่จำเป็นต้อง grep สำหรับ TCP คือsudo lsof -i | grep mongod
datdo

8

คุณสามารถใช้

db.serverStatus().connections

นอกจากนี้ฟังก์ชั่นนี้สามารถช่วยคุณระบุที่อยู่ IP ที่เชื่อมต่อกับ Mongo DB ของคุณ

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

1
สวยมาก - ขอบคุณ! สิ่งที่ฉันกำลังมองหา
ProsperousHeart

7

ฉันพยายามดูการเชื่อมต่อทั้งหมดสำหรับฐานข้อมูล mongo โดยทำตามคำสั่ง

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

คำสั่งนี้สามารถแสดงทุกการเชื่อมต่อ tcp สำหรับ mongodb โดยละเอียด

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

ใน OS X ดูการเชื่อมต่อโดยตรงบนอินเทอร์เฟซเครือข่ายเช่นกันทำดังนี้

$ 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)
  • ไม่จำเป็นต้องใช้grepฯลฯ เพียงแค่ใช้lsofอาร์กิวเมนต์

  • ดูการเชื่อมต่อกับ CLI ของ MongoDb ด้วยดูคำตอบของ @ milan ( ซึ่งฉันเพิ่งแก้ไข )


5

นอกจากนี้รายละเอียดเพิ่มเติมเกี่ยวกับการเชื่อมต่อกับ: db.currentOp(true)

นำมาจาก: https://jira.mongodb.org/browse/SERVER-5085


1
ฉันได้อ่านคิดว่าคำตอบทั้งหมดแล้วทันใดนั้น - นี่เป็นหนึ่งในคำตอบที่มีประโยชน์มากที่สุด แบบสอบถามให้รายละเอียดภายในมากมายอย่างที่ควรจะเป็นรวมถึงเวลาในการเชื่อมต่อตารางปัจจุบันเวอร์ชันไดรเวอร์และแพลตฟอร์มและแม้แต่ appName หากระบุไว้
Dmitry Gusarov

3

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}
Alex Efimov

2

เชื่อมต่อกับ MongoDB โดยใช้ mongo-shell และรันคำสั่งต่อไปนี้

db.serverStatus().connections

เช่น:

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

2

ขออภัยเนื่องจากนี่เป็นโพสต์เก่าและปัจจุบันมีตัวเลือกมากกว่าเดิม

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}}
] )

ตัวอย่างผลลัพธ์:

{ "_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

เชื่อมต่อกับอินสแตนซ์ mongodb ของคุณจากระบบภายใน

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

จะแจ้งให้คุณทราบลูกค้าที่เชื่อมต่อทั้งหมดและรายละเอียดของพวกเขา

  1. db.currentOp (จริง)


0

หรือคุณสามารถตรวจสอบสถานะการเชื่อมต่อได้โดยเข้าสู่Mongo Atlasจากนั้นไปที่คลัสเตอร์ของคุณ

ป้อนคำอธิบายภาพที่นี่

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