클러스터 모니터링
개요
이 가이드 스칼라 운전자 사용하여 MongoDB 인스턴스, 복제본 세트 또는 샤딩된 클러스터 에서 서버 검색 및 모니터링 (SDAM) 이벤트를 모니터 방법을 보여줍니다. 이러한 이벤트는 연결된 MongoDB 인스턴스 또는 클러스터 의 상태 가 변경될 때 발생합니다.
스칼라 운전자 9개의 SDAM 이벤트를 정의하고 각각 3개의 SDAM 이벤트를 수신하는 다음과 같은 리스너 인터페이스를 제공합니다.
ClusterListener
: 토폴로지 변경 또는 클러스터 의 상태 및 구조 변경과 관련된 이벤트를 수신 대기합니다.ServerListener
: 개별 서버 변경과 관련된 이벤트를 수신 대기합니다.ServerMonitorListener
: 하트비트 관련 이벤트를 수신하거나 복제본 세트 멤버 간의 통신 상태를 보고합니다.
애플리케이션 의 SDAM 이벤트에 대한 정보를 사용하여 클러스터 변경 사항을 이해하거나, 클러스터 상태를 평가하거나, 용량 계획을 수행할 수 있습니다.
이벤트 구독
애플리케이션 에서 SDAM 이벤트를 구독 하면 해당 이벤트에 대한 세부 정보 액세스 할 수 있습니다. 이벤트 를 구독 하려면 ClusterListener
, ServerListener
또는 ServerMonitorListener
인터페이스를 구현하는 클래스를 만듭니다. 그런 다음 MongoClientSettings
의 인스턴스 를 구성하고 이를 MongoClient
생성자에 전달하여 클라이언트 에 리스너를 추가합니다.
다음 코드는 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") } } } }
그런 다음 다음 코드에 표시된 대로 MongoClient
인스턴스 에 대한 설정을 구성하여 TestClusterListener
클래스를 구독 .
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)
애플리케이션 을 실행 하면 구독자는 SDAM 이벤트 를 기록하고 다음과 같은 메시지를 출력합니다.
Cluster with ID ClusterId{value='...', description='...'} opening Writable server available Readable server available Cluster with ID ClusterId{value='...', description='...'} closed
이벤트 설명
이벤트의 해당 리스너 인터페이스를 구현하고 이벤트 프로세스 메서드를 포함하는 클래스를 정의하여 SDAM 이벤트를 구독 할 수 있습니다. 다음 표에는 각 SDAM 이벤트 의 이름, 이벤트 처리하는 리스너 인터페이스, 이벤트 게시된 시점에 대한 설명이 나와 있습니다.
eventType | 리스너 인터페이스 | 설명 |
---|---|---|
새 프라이머리 투표 가 있는 경우와 같이 토폴로지 설명이 변경될 때 생성됩니다. | ||
운전자 가 클러스터 에 처음 연결할 때 생성됩니다. | ||
운전자 가 클러스터 에서 연결 해제될 때 생성됩니다. | ||
서버 설명이 변경될 때 생성됩니다. | ||
새 서버 가 토폴로지 에 추가될 때 생성됩니다. | ||
토폴로지 에서 기존 서버 가 제거될 때 생성됩니다. | ||
서버 모니터 가 서버 에 | ||
하트비트가 성공할 때 생성됩니다. | ||
하트비트가 실패할 때 생성됩니다. |
이벤트 모니터링 클래스의 전체 목록을 보려면 Java API 문서에서 이벤트 패키지 참조하세요.
API 문서
이 가이드에서 설명하는 메서드에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.