Docs Menu
Docs Home
/ / /
Node.js 드라이버
/ /

연결 풀 모니터링

이 페이지의 내용

  • 개요
  • 이벤트 구독 예시
  • 이벤트 설명
  • 이벤트 문서 예시
  • connectionPoolCreated
  • connectionPoolReady
  • connectionPoolClosed
  • connectionCreated 이벤트
  • connectionReady
  • 연결종료
  • connectionCheckOutStarted 이벤트
  • connectionCheckOutFailed
  • connectionCheckedOut
  • connectionCheckedIn
  • connectionPoolCleared

이 가이드에서는 드라이버의 연결 풀을 모니터링하는 방법을 보여 줍니다. 연결 풀은 드라이버가 MongoDB 인스턴스를 사용해 유지 관리하는 개방형 TCP 연결 집합입니다. 연결 풀은 애플리케이션이 수행해야 하는 네트워크 핸드셰이크 수를 줄이고 애플리케이션을 더 빠르게 실행하는 데 도움이 될 수 있습니다.

다음 섹션에서는 애플리케이션에서 연결 풀 이벤트를 기록하고 이러한 이벤트에서 제공된 정보를 탐색하는 방법을 보여 줍니다.

애플리케이션에서 드라이버를 구독하여 하나 이상의 연결 풀 이벤트에 액세스할 수 있습니다. 다음 예시에서는 복제본 세트에 연결하고 MongoDB deployment에 의해 생성된 연결 풀 모니터링 이벤트 중 하나를 구독하는 방법을 보여 줍니다.

const { MongoClient } = require("mongodb");
// Replace the following with your MongoDB deployment's connection string
const uri =
"mongodb+srv://<clusterUrl>/?replicaSet=rs&writeConcern=majority";
const client = new MongoClient(uri);
// Replace <event name> with the name of the event you are subscribing to
const eventName = "<event name>";
// Subscribe to the event
client.on(eventName, (event) =>
console.log("\nreceived event:\n", event)
);
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("\nConnected successfully!\n");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

연결 풀 모니터링 이벤트는 애플리케이션의 연결 풀 동작을 디버깅하고 이해하는 데 도움이 될 수 있습니다. 다음 예제에서는 연결 풀 모니터링 이벤트를 사용하여 풀에서 체크아웃된 연결 수를 반환합니다.

function connectionPoolStatus(client) {
let checkedOut = 0;
function onCheckout() {
checkedOut++;
}
function onCheckin() {
checkedOut--;
}
function onClose() {
client.removeListener('connectionCheckedOut', onCheckout);
client.removeListener('connectionCheckedIn', onCheckin);
checkedOut = NaN;
}
// Decreases count of connections checked out of the pool when connectionCheckedIn event is triggered
client.on('connectionCheckedIn', onCheckin);
// Increases count of connections checked out of the pool when connectionCheckedOut event is triggered
client.on('connectionCheckedOut', onCheckout);
// Cleans up event listeners when client is closed
client.on('close', onClose);
return {
count: () => checkedOut,
cleanUp: onClose
};
}

다음 연결 풀 모니터링 이벤트 중 하나를 구독할 수 있습니다:

이벤트 이름
설명
connectionPoolCreated
연결 풀이 생성될 때 생성됩니다.
connectionPoolReady
연결 풀이 준비되면 생성됩니다.
connectionPoolClosed
서버 인스턴스가 파괴되기 전 연결 풀이 닫힐 때 생성됩니다.
connectionCreated
연결이 생성될 때 생성되지만 작업에 사용될 때 반드시 생성되지는 않습니다.
connectionReady
연결이 성공적으로 핸드셰이크를 완료하고 작업에 사용할 준비가 된 후에 생성됩니다.
connectionClosed
연결이 닫힐 때 생성됩니다.
connectionCheckOutStarted
작업이 실행을 위해 연결을 획득하려고 시도할 때 생성됩니다.
connectionCheckOutFailed
작업이 실행을 위한 연결을 획득하지 못할 때 생성됩니다.
connectionCheckedOut
작업이 실행을 위한 연결을 성공적으로 획득할 때 생성됩니다.
connectionCheckedIn
작업이 실행된 후 연결이 풀에 다시 체크인될 때 생성됩니다.
connectionPoolCleared
연결 풀이 비워질 때 생성됩니다.

다음 섹션에서는 각 유형의 연결 풀 모니터링 이벤트에 대한 샘플 출력을 보여줍니다.

ConnectionPoolCreatedEvent {
time: 2023-02-13T15:54:06.944Z,
address: '...',
options: {...}
}
ConnectionPoolReadyEvent {
time: 2023-02-13T15:56:38.440Z,
address: '...'
}
ConnectionPoolClosedEvent {
time: 2023-02-13T15:56:38.440Z,
address: '...'
}
ConnectionCreatedEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
connectionId: 1
}
ConnectionReadyEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
connectionId: 1,
durationMS: 60
}
ConnectionClosedEvent {
time: 2023-02-13T15:56:38.439Z,
address: '...',
connectionId: 1,
reason: 'poolClosed',
serviceId: undefined
}
ConnectionCheckOutStartedEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
}
ConnectionCheckOutFailedEvent {
time: 2023-02-13T15:56:38.291Z,
address: '...',
reason: ...,
durationMS: 60
}
ConnectionCheckedOutEvent {
time: 2023-02-13T15:54:07.188Z,
address: '...',
connectionId: 1,
durationMS: 60
}
ConnectionCheckedInEvent {
time: 2023-02-13T15:54:07.189Z,
address: '...',
connectionId: 1
}
ConnectionPoolClearedEvent {
time: 2023-02-13T15:56:38.439Z,
address: '...',
serviceId: undefined,
interruptInUseConnections: true,
}

돌아가기

명령 모니터링