개요
이 가이드 에서는 스칼라 운전자 사용하여 운전자 작동 중에 발생하는 이벤트를 모니터 하는 방법을 학습 수 있습니다. 모니터링에는 애플리케이션 또는 애플리케이션 성능 관리 라이브러리와 함께 사용할 수 있는 실행 프로그램의 활동에 대한 정보를 수집하는 작업이 포함됩니다.
애플리케이션 이벤트를 모니터 드라이버의 리소스 사용량 및 성능을 파악하면 애플리케이션 설계하고 디버깅할 때 정보에 입각한 결정을 내리는 데 도움이 됩니다.
스칼라 운전자 모니터 할 수 있는 이벤트를 다음 범주로 구성합니다.
명령 이벤트: MongoDB database 명령과 관련된 이벤트
서버 검색 및 모니터링(SDAM) 이벤트: 연결된 MongoDB 인스턴스 또는 클러스터 의 상태 변경과 관련된 이벤트입니다.
연결 풀 이벤트: 운전자 가 MongoDB 인스턴스 로 유지 관리하는 연결 풀 과 관련된 이벤트
다음 섹션에서는 각 이벤트 범주에 대해 설명하고 이벤트를 모니터 방법을 보여줍니다. 운전자 이벤트를 로그 에 기록 방법을 학습 로깅 가이드 참조하세요.
명령 이벤트 모니터링
명령 이벤트 는 MongoDB database 명령과 관련된 이벤트 입니다. 명령 이벤트를 생성하는 데이터베이스 명령의 예로는 find, insert, delete 및 count 등이 있습니다.
스칼라 운전자 내부적으로 호출하는 명령에 대한 이벤트를 게시하지 않습니다. 여기에는 운전자 클러스터 모니터 데 사용하는 명령과 초기 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 이벤트 모니터링
서버 검색 및 모니터링 (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 | 리스너 인터페이스 | 설명 |
|---|---|---|
새 프라이머리 투표 있는 경우와 같이 토폴로지 설명이 변경될 때 게시됩니다. | ||
운전자 클러스터 에 처음 연결할 때 게시됩니다. | ||
운전자 클러스터 에서 연결 해제될 때 게시됩니다. | ||
서버 설명이 변경되면 게시됩니다. | ||
새 서버 토폴로지 에 추가되면 게시됩니다. | ||
기존 서버 토폴로지 에서 제거될 때 게시됩니다. | ||
서버 모니터 서버 에 | ||
하트비트가 성공하면 게시됩니다. | ||
하트비트가 실패할 때 게시됩니다. |
연결 풀 이벤트 모니터링
연결 풀 이벤트 는 운전자 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 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.