如何监控Mongoose连接池

ef1yzkbh  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(169)

对于这个问题,可能有一个显而易见的答案,但我似乎找不到它。我在我的节点应用程序中使用Mongoose连接到MongoDB集群。有没有办法监视Mongoose使用的客户端连接池的状态?比如池中的连接数、当前从池中检出的连接数、检出连接的速率,如果已经有一个完善的解决方案可以将这些指标导出为Prometheus格式,则可以获得加分。

zour9fqk

zour9fqk1#

您可以使用联机集区事件。这些事件是由指定的集区相关事件所触发,例如联机、关闭等等。
下面是一个工作示例,其中MongoDB模块取自MongoDB official docs

const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:31000,localhost:31001/?replicaSet=rs';
const client = new MongoClient(url);

client.on('connectionPoolCreated', event => console.dir(event));
client.on('connectionPoolClosed', event => console.dir(event));
client.on('connectionCreated', event => console.dir(event));
client.on('connectionReady', event => console.dir(event));
client.on('connectionClosed', event => console.dir(event));
client.on('connectionCheckOutStarted', event => console.dir(event));
client.on('connectionCheckOutFailed', event => console.dir(event));
client.on('connectionCheckedOut', event => console.dir(event));
client.on('connectionCheckedIn', event => console.dir(event));
client.on('connectionPoolCleared', event => console.dir(event));

client.connect((err, client) => {
  if (err) throw err;
});

但是,如果您想在Mongoose中执行此操作,则可以使用connection.getClient(),它将绕过mongoose驱动程序返回底层的mongodb客户端。
此GitHub问题中描述的方法

相关问题