MongoDB에서 현재 데이터베이스 서버에 연결된 클라이언트 목록을 확인하려면 currentOp() 메서드를 활용할 수 있습니다. 이 메서드에 true 값을 전달하면 유휴 상태의 연결까지 포함한 모든 작업 정보가 반환되며, 결과 배열에서 client 필드를 반복(iterate)하여 각 클라이언트의 정보를 추출할 수 있습니다.
currentOp() 명령어 실행하기
먼저 MongoDB 셸에서 다음과 같이 currentOp()를 실행해 보겠습니다.
> db.currentOp(true)
출력 결과 분석
위 명령을 실행하면 아래와 같은 출력 결과를 확인할 수 있습니다. 여기서 클라이언트 주소가 127.0.0.1로 표시되는 것은 로컬호스트(localhost) 환경에서 접속했기 때문입니다. 출력에는 현재 서버에 연결된 모든 클라이언트와 내부 스레드 정보가 함께 표시됩니다.
{
"inprog" : [
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "conn1",
"connectionId" : 1,
"client" : "127.0.0.1:61787",
"appName" : "MongoDB Shell",
"clientMetadata" : {
"application" : {
"name" : "MongoDB Shell"
},
"driver" : {
"name" : "MongoDB Internal Client",
"version" : "4.0.5"
},
"os" : {
"type" : "Windows",
"name" : "Microsoft Windows 10",
"architecture" : "x86_64",
"version" : "10.0 (build 17134)"
}
},
"active" : true,
"currentOpTime" : "2019-03-30T05:13:34.296+0530",
"opid" : 12538,
"lsid" : {
"id" : UUID("da370b0f-093a-45f3-b1fe-697daca8ccd2"),
"uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
},
"secs_running" : NumberLong(0),
"microsecs_running" : NumberLong(160815),
"op" : "command",
"ns" : "admin.$cmd.aggregate",
"command" : {
"currentOp" : 1,
"$all" : true,
"lsid" : {
"id" : UUID("da370b0f-093a-45f3-b1fe-697daca8ccd2")
},
"$db" : "admin"
},
"numYields" : 0,
"locks" : {},
"waitingForLock" : false,
"lockStats" : {}
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "LogicalSessionCacheRefresh",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "SessionKiller",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "TTLMonitor",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "free_mon",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "freemon-0",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "startPeriodicThreadToAbortExpiredTransactions",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "WTCheckpointThread",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "ftdc",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "WTJournalFlusher",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "clientcursormon",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
},
{
"host" : "DESKTOP-QN2RB3H:27017",
"desc" : "initandlisten",
"active" : false,
"currentOpTime" : "2019-03-30T05:13:34.296+0530"
}
],
"ok" : 1
}주요 필드 살펴보기
반환된 결과에서 자주 확인하게 되는 핵심 필드는 다음과 같습니다.
- client: 클라이언트의 IP 주소와 포트 번호를 나타냅니다. 예제에서는
127.0.0.1:61787로 표시되어 있습니다. - connectionId: 해당 연결에 부여된 고유 식별자입니다.
- appName: 클라이언트 애플리케이션의 이름으로, 예제에서는 MongoDB 셸이 사용되었습니다.
- active: 해당 연결이 현재 활성 상태인지 여부를 나타냅니다.
- opid: 진행 중인 작업(operation)의 고유 ID로, 필요 시 작업을 종료(kill)할 때 사용됩니다.
참고 사항
출력 결과에는 실제 클라이언트 연결(conn1) 외에도 TTLMonitor, ftdc, initandlisten 등 MongoDB가 내부적으로 운영하는 백그라운드 스레드들이 함께 표시됩니다. 이들은 실제 클라이언트가 아니므로, 순수한 클라이언트 연결만 확인하고 싶다면 client 필드가 존재하는 항목을 기준으로 필터링하는 것이 좋습니다.