AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

애플리케이션 이벤트 모니터링

이 가이드 에서는 스칼라 운전자 사용하여 운전자 작동 중에 발생하는 이벤트를 모니터 하는 방법을 학습 수 있습니다. 모니터링에는 애플리케이션 또는 애플리케이션 성능 관리 라이브러리와 함께 사용할 수 있는 실행 프로그램의 활동에 대한 정보를 수집하는 작업이 포함됩니다.

애플리케이션 이벤트를 모니터 드라이버의 리소스 사용량 및 성능을 파악하면 애플리케이션 설계하고 디버깅할 때 정보에 입각한 결정을 내리는 데 도움이 됩니다.

스칼라 운전자 모니터 할 수 있는 이벤트를 다음 범주로 구성합니다.

  • 명령 이벤트: MongoDB database 명령과 관련된 이벤트

  • 서버 검색 및 모니터링(SDAM) 이벤트: 연결된 MongoDB 인스턴스 또는 클러스터 의 상태 변경과 관련된 이벤트입니다.

  • 연결 풀 이벤트: 운전자 가 MongoDB 인스턴스 로 유지 관리하는 연결 풀 과 관련된 이벤트

다음 섹션에서는 각 이벤트 범주에 대해 설명하고 이벤트를 모니터 방법을 보여줍니다. 운전자 이벤트를 로그 에 기록 방법을 학습 로깅 가이드 참조하세요.

명령 이벤트 는 MongoDB database 명령과 관련된 이벤트 입니다. 명령 이벤트를 생성하는 데이터베이스 명령의 예로는 find, insert, deletecount 등이 있습니다.

스칼라 운전자 내부적으로 호출하는 명령에 대한 이벤트를 게시하지 않습니다. 여기에는 운전자 클러스터 모니터 데 사용하는 명령과 초기 hello 명령과 같은 연결 설정과 관련된 명령이 포함됩니다.

명령 이벤트를 모니터 하려면 CommandListener 인터페이스를 구현하는 클래스를 만들고 해당 클래스의 인스턴스 를 MongoClient 인스턴스 에 등록합니다.

중요

수정된 출력

보안 조치로 운전자 민감한 정보를 보호하기 위해 일부 명령 이벤트의 내용을 수정합니다. 수정된 명령 이벤트의 전체 목록은 MongoDB 명령 로깅 및 모니터링 사양의 보안 섹션을 참조하세요.

MongoDB database 명령에 대해 자세히 학습 데이터베이스 명령을 참조하세요.

다음 예시 CommandListener 인터페이스를 구현하는 CommandCounter 클래스를 정의합니다. 이 클래스는 운전자 각 데이터베이스 명령 성공적으로 실행한 횟수를 추적하고 명령이 완료될 때마다 이 정보를 인쇄합니다.

case class CommandCounter() extends CommandListener {
private val commands =
scala.collection.mutable.Map[String, Int]()
override def commandStarted(event: CommandStartedEvent): Unit = {}
override def commandSucceeded(
event: CommandSucceededEvent
): Unit = {
val commandName = event.getCommandName
commands(commandName) =
commands.getOrElse(commandName, 0) + 1
println(commands.toMap)
}
override def commandFailed(event: CommandFailedEvent): Unit = {}
}

다음 코드는 CommandCounter 클래스의 인스턴스 MongoClientSettings 객체 에 추가하고 설정을 사용하여 MongoClient 인스턴스 구성합니다.

val settings: MongoClientSettings = MongoClientSettings
.builder()
.addCommandListener(CommandCounter())
.applyConnectionString(ConnectionString("<connection string>"))
.build()
val mongoClient: MongoClient = MongoClient(settings)

애플리케이션 실행 하면 출력은 다음과 유사합니다.

Map(find -> 1)
Map(find -> 2)
Map(find -> 2, endSessions -> 1)

다음 표에서는 스칼라 운전자 게시하는 명령 이벤트와 이를 처리하는 리스너 인터페이스에 대해 설명합니다.

eventType
리스너 인터페이스
설명

데이터베이스 명령 시작될 때 게시됩니다.

데이터베이스 명령 성공하면 게시됩니다.

데이터베이스 명령 실패할 때 게시됩니다.

서버 검색 및 모니터링 (SDAM) 이벤트 연결된 MongoDB 인스턴스 또는 클러스터 의 상태 변경과 관련된 이벤트 입니다.

스칼라 운전자 9개의 SDAM 이벤트를 정의하고 각각 3개의 SDAM 이벤트를 수신하는 다음과 같은 리스너 인터페이스를 제공합니다.

  • ClusterListener: 토폴로지 변경 또는 클러스터 의 상태 및 구조 변경과 관련된 이벤트를 수신 대기합니다.

  • ServerListener: 개별 서버 변경과 관련된 이벤트를 수신 대기합니다.

  • ServerMonitorListener: 복제본 세트 멤버 간의 통신 상태를 보고하는 하트비트 이벤트를 수신 대기합니다.

SDAM 이벤트의 정보를 사용하여 클러스터 변경 사항을 이해하거나, 클러스터 상태를 평가하거나, 용량 계획할 수 있습니다.

다음 예시 ClusterListener 인터페이스를 구현하는 TestClusterListener 클래스를 정의합니다. 이 클래스에는 다음과 같은 토폴로지 관련 이벤트에 대한 응답으로 메시지를 인쇄하는 메서드가 포함되어 있습니다.

  • clusterOpening(): 운전자 클러스터 에 처음 연결할 때 메시지를 인쇄합니다.

  • clusterClosed(): 운전자 클러스터 에서 연결이 끊길 때 메시지를 인쇄합니다.

  • clusterDescriptionChanged(): 클러스터 의 읽기 및 쓰기 (write) 가용성 변경에 대한 메시지를 출력합니다.

case class TestClusterListener(readPreference: ReadPreference) extends ClusterListener {
var isWritable: Boolean = false
var isReadable: Boolean = false
override def clusterOpening(event: ClusterOpeningEvent): Unit =
println(s"Cluster with ID ${event.getClusterId} opening")
override def clusterClosed(event: ClusterClosedEvent): Unit =
println(s"Cluster with ID ${event.getClusterId} closed")
override def clusterDescriptionChanged(event: ClusterDescriptionChangedEvent): Unit = {
if (!isWritable) {
if (event.getNewDescription.hasWritableServer) {
isWritable = true
println("Writable server available")
}
} else {
if (!event.getNewDescription.hasWritableServer) {
isWritable = false
println("No writable server available")
}
}
if (!isReadable) {
if (event.getNewDescription.hasReadableServer(readPreference)) {
isReadable = true
println("Readable server available")
}
} else {
if (!event.getNewDescription.hasReadableServer(readPreference)) {
isReadable = false
println("No readable server available")
}
}
}
}

다음 코드는 TestClusterListener 클래스의 인스턴스 MongoClientSettings 객체 에 추가하고 설정을 사용하여 MongoClient 인스턴스 구성합니다.

val uri: ConnectionString = ConnectionString("<connection string>")
val settings: MongoClientSettings = MongoClientSettings
.builder()
.applyToClusterSettings((builder: ClusterSettings.Builder) =>
builder.addClusterListener(TestClusterListener(ReadPreference.secondary())))
.applyConnectionString(uri)
.build()
val client: MongoClient = MongoClient(settings)

애플리케이션 실행 하면 출력은 다음과 유사합니다.

Cluster with ID ClusterId{value='...', description='...'} opening
Writable server available
Readable server available
Cluster with ID ClusterId{value='...', description='...'} closed

다음 표에서는 각 SDAM 이벤트, 이를 처리하는 리스너 인터페이스 및 운전자 이벤트를 게시하는 시기를 설명합니다.

eventType
리스너 인터페이스
설명

새 프라이머리 투표 있는 경우와 같이 토폴로지 설명이 변경될 때 게시됩니다.

운전자 클러스터 에 처음 연결할 때 게시됩니다.

운전자 클러스터 에서 연결 해제될 때 게시됩니다.

서버 설명이 변경되면 게시됩니다.

새 서버 토폴로지 에 추가되면 게시됩니다.

기존 서버 토폴로지 에서 제거될 때 게시됩니다.

서버 모니터 서버 에 hello 명령을 보낼 때 게시됩니다. 이 조치 하트비트라고 합니다.

하트비트가 성공하면 게시됩니다.

하트비트가 실패할 때 게시됩니다.

연결 풀 이벤트 는 운전자 MongoDB 인스턴스 사용하여 유지 관리하는 연결 풀 과 관련된 이벤트 입니다. 연결 풀 운전자 MongoDB 인스턴스 사용하여 유지 관리하는 개방형 TCP 연결의 설정하다 입니다. 연결 풀은 애플리케이션 수행해야 하는 네트워크 핸드셰이크 횟수를 줄이고 애플리케이션 더 빠르게 실행 데 도움이 될 수 있습니다.

연결 풀 이벤트를 모니터 하려면 ConnectionPoolListener 인터페이스를 구현하는 클래스를 만들고 해당 클래스의 인스턴스 MongoClient 인스턴스 에 등록합니다.

연결 풀

연결 풀에 대해 자세히 학습 연결 가이드 참조하세요.

다음 예시 ConnectionPoolListener 인터페이스를 구현하는 ConnectionPoolLibrarian 클래스를 정의합니다. 클래스는 운전자 연결 풀 에서 연결을 확인할 때마다 메시지를 인쇄합니다.

case class ConnectionPoolLibrarian()
extends ConnectionPoolListener {
override def connectionCheckedOut(
event: ConnectionCheckedOutEvent
): Unit =
println(
s"Let me get you the connection with id " +
s"${event.getConnectionId.getLocalValue}..."
)
override def connectionCheckOutFailed(
event: ConnectionCheckOutFailedEvent
): Unit = {}
}

다음 코드는 ConnectionPoolLibrarian 클래스의 인스턴스 MongoClientSettings 객체 에 추가하고 설정을 사용하여 MongoClient 인스턴스 구성합니다.

val settings: MongoClientSettings = MongoClientSettings
.builder()
.applyToConnectionPoolSettings(
(builder: ConnectionPoolSettings.Builder) =>
builder.addConnectionPoolListener(
ConnectionPoolLibrarian()
)
)
.applyConnectionString(ConnectionString("<connection string>"))
.build()
val mongoClient: MongoClient = MongoClient(settings)

애플리케이션 실행 하면 출력은 다음과 유사합니다.

Let me get you the connection with id 1...

다음 표에서는 스칼라 운전자 게시하는 연결 풀 이벤트와 이를 처리하는 리스너 인터페이스에 대해 설명합니다.

eventType
리스너 인터페이스
설명

연결 풀 생성될 때 게시됩니다.

연결 풀 사용할 준비가 되면 게시됩니다.

연결 풀 닫힐 때 게시됩니다.

풀에 연결이 생성될 때 게시됩니다.

연결이 핸드셰이크를 완료하고 사용할 준비가 되면 게시됩니다.

연결이 닫힐 때 게시됩니다.

운전자 연결을 체크아웃하기 시작할 때 게시됩니다.

운전자 연결을 성공적으로 체크아웃하면 게시됩니다.

운전자 연결을 체크아웃하지 못할 때 게시됩니다.

운전자 풀에 대한 연결을 다시 확인할 때 게시됩니다.

연결 풀 지워지면 게시됩니다.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.