Apa perintah untuk mendapatkan jumlah klien yang terhubung ke server MongoDB tertentu?
Jawaban:
sambungkan ke database admin dan jalankan db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Anda bisa langsung mendapatkannya dengan query
db.serverStatus().connections
Untuk memahami apa arti dari db.serverStatus().connections
respon MongoDb , baca dokumentasinya di sini .
koneksi
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
koneksi Sebuah dokumen yang melaporkan status koneksi. Gunakan nilai-nilai ini untuk menilai kebutuhan beban dan kapasitas server saat ini.
koneksi.current Jumlah koneksi masuk dari klien ke server database. Jumlah ini termasuk sesi shell saat ini. Pertimbangkan nilai koneksi.available untuk menambahkan lebih banyak konteks ke datum ini.
Nilainya akan mencakup semua koneksi masuk termasuk koneksi shell atau koneksi dari server lain, seperti anggota kumpulan replika atau instance mongos.
koneksi.available Jumlah koneksi masuk yang tidak terpakai tersedia. Pertimbangkan nilai ini dalam kombinasi dengan nilai koneksi.current untuk memahami beban koneksi pada database, dan dokumen pengaturan ulimit UNIX untuk informasi selengkapnya tentang ambang sistem pada koneksi yang tersedia.
koneksi.totalCreated Hitungan semua koneksi masuk yang dibuat ke server. Jumlah ini termasuk koneksi yang telah ditutup.
Hitungan Koneksi oleh ClientIP, dengan Total
Kami menggunakan ini untuk melihat jumlah koneksi dengan IPAddress dengan jumlah koneksi total. Ini sangat membantu dalam men-debug masalah ... sampai di sana sebelum mencapai koneksi maksimal!
Untuk 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 })
Diformat:
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 }
)
Contoh pengembalian:
{
"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
}
(alamat 192.xxx di pemantauan internal Atlas)
"Internal" adalah proses internal yang tidak memiliki klien eksternal. Anda dapat melihat daftarnya dengan ini:
db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
menggunakan pengguna admin
db.currentOp(true)
?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
db.serverStatus()
tidak memberikan koneksi opend dan avail tetapi tidak menunjukkan koneksi dari klien mana. Untuk info lebih lanjut Anda bisa menggunakan perintah ini sudo lsof | grep mongod | grep TCP
. Saya membutuhkannya ketika saya melakukan replikasi dan simpul utama memiliki banyak koneksi klien yang lebih besar daripada sekunder.
$ 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)
Ini menunjukkan bahwa saat ini saya memiliki lima koneksi yang terbuka ke port MongoDB (27017) di komputer saya. Dalam kasus saya, saya terhubung ke MongoDB dari server Scalatra, dan saya menggunakan driver MongoDB Casbah, tetapi Anda akan melihat koneksi TCP lsof yang sama terlepas dari klien yang digunakan (selama mereka terhubung menggunakan TCP / AKU P).
sudo lsof -i | grep mongod
Saya mencoba melihat semua koneksi untuk database mongo dengan mengikuti perintah.
netstat -anp --tcp --udp | grep mongo
Perintah ini dapat menampilkan setiap koneksi tcp untuk mongodb secara lebih detail.
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
Di OS X, lihat juga koneksinya langsung di antarmuka jaringan, lakukan saja :
$ 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)
Tidak perlu menggunakan grep
dll, cukup gunakan lsof
argumennya.
Juga lihat koneksi di CLI MongoDb, lihat jawaban @ milan ( yang baru saja saya edit ).
Anda bisa menggunakan
db.serverStatus().connections
Selain itu, fungsi ini dapat membantu Anda menemukan alamat IP yang terhubung ke Mongo DB Anda
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
Juga beberapa detail lebih lanjut tentang koneksi dengan:
db.currentOp(true)
Diambil dari: https://jira.mongodb.org/browse/SERVER-5085
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}
Maaf karena ini adalah posting lama dan saat ini ada lebih banyak pilihan daripada sebelumnya.
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}}
] )
Contoh keluaran:
{ "_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 }
Hubungkan dengan instance mongodb Anda dari sistem lokal
Ini akan memberi tahu Anda semua klien yang terhubung dan detailnya
db.currentOp (benar)
Atau Anda dapat memeriksa status koneksi dengan masuk ke Mongo Atlas dan kemudian menavigasi ke cluster Anda.