JMX 모니터링
운전자 는 JMX 를 사용합니다.MXBean 생성 운전자 의 다양한 측면을 모니터 할 수 있습니다.
드라이버는 단일 유형인 ConnectionPoolStatisticsMBean
의 MXBean
인스턴스를 생성합니다. 드라이버는 연결하는 각 서버에 대해 하나의 ConnectionPoolStatisticsMBean
인스턴스를 등록합니다. 예를 들어, 복제본 세트에 연결되면 드라이버는 복제본 세트의 숨겨지지 않은 각 멤버에 대한 인스턴스를 생성합니다.
각 MXBean
인스턴스 는 도메인과 명명된 속성 설정하다 으로 구성된 고유한 객체 이름을 사용하여 등록해야 합니다. 운전자 에 의해 생성된 모든 MXBean
인스턴스는 도메인 org.mongodb.driver
에 있습니다. ConnectionPoolStatisticsMBean
인스턴스에는 다음과 같은 속성이 있습니다.
clusterId
: 클라이언트가 생성한 고유 식별자로, 애플리케이션 에 동일한 MongoDB 서버 배포서버 에 연결된 여러MongoClient
인스턴스가 있는 상황에서 객체 이름의 고유성을 보장하는 데 필요합니다.host
: 서버의 호스트 이름port
: 서버 가 수신 대기 중인 포트minSize
: 유휴 멤버 및 사용 중인 멤버를 포함하여 풀의 최소 허용 크기입니다.maxSize
: 유휴 멤버와 사용 중인 멤버를 포함하여 풀의 최대 허용 크기입니다.size
: 유휴 멤버와 사용 중인 멤버를 포함한 풀의 현재 크기checkedOutCount
: 현재 사용 중인 연결의 현재 수
JMX 연결 풀 모니터링은 기본적으로 비활성화되어 있습니다. 활성화하려면 MongoClientSettings
인스턴스를 생성할 때 com.mongodb.management.JMXConnectionPoolListener
인스턴스를 추가합니다.
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.addConnectionPoolListener(new JMXConnectionPoolListener())) .build();
명령 모니터링
운전자 는 명령 모니터링 사양을 구현하여 명령이 시작될 때와 성공 또는 실패할 때 애플리케이션 에 알림을 보낼 수 있습니다.
애플리케이션 은 CommandListener
인터페이스를 구현 하는 클래스의 인스턴스로 MongoClientSettings
인스턴스 를 구성하여 명령 리스너를 MongoClient
에 등록합니다. 다음 예시 는 CommandListener
인터페이스의 간단한 구현 입니다.
public class TestCommandListener implements CommandListener { public void commandStarted(final CommandStartedEvent event) { System.out.println(String.format("Sent command '%s:%s' with id %s to database '%s' " + "on connection '%s' to server '%s'", event.getCommandName(), event.getCommand().get(event.getCommandName()), event.getRequestId(), event.getDatabaseName(), event.getConnectionDescription() .getConnectionId(), event.getConnectionDescription().getServerAddress())); } public void commandSucceeded(final CommandSucceededEvent event) { System.out.println(String.format("Successfully executed command '%s' with id %s " + "on connection '%s' to server '%s'", event.getCommandName(), event.getRequestId(), event.getConnectionDescription() .getConnectionId(), event.getConnectionDescription().getServerAddress())); } public void commandFailed(final CommandFailedEvent event) { System.out.println(String.format("Failed execution of command '%s' with id %s " + "on connection '%s' to server '%s' with exception '%s'", event.getCommandName(), event.getRequestId(), event.getConnectionDescription() .getConnectionId(), event.getConnectionDescription().getServerAddress(), event.getThrowable())); } }
다음 예시 에서는 TestCommandListener
인스턴스 로 구성된 MongoClientSettings
인스턴스 를 만듭니다.
MongoClientSettings settings = MongoClientSettings.builder() .addCommandListener(new TestCommandListener()) .build(); MongoClient client = MongoClients.create(settings);
이러한 옵션으로 구성된 MongoClient
는 각 명령을 MongoDB 서버 로 보내기 전에 System.out
에 메시지를 인쇄하고, 각 명령이 성공적인 완료되거나 실패하면 다른 메시지를 인쇄합니다.
클러스터 모니터링
운전자 는 SDAM 모니터링 사양을 구현하여 운전자 가 연결된 MongoDB cluster 의 토폴로지 변경을 감지하면 애플리케이션 에 알림을 보낼 수 있습니다.
애플리케이션은 ClusterListener
, ServerListener
또는 ServerMonitorListener
인터페이스를 구현하는 클래스의 인스턴스로 MongoClientSettings
를 구성하여 MongoClient
에 리스너를 등록합니다.
다음 코드는 클러스터 리스너를 생성하는 방법을 보여줍니다.
public class TestClusterListener implements ClusterListener { private final ReadPreference readPreference; private boolean isWritable; private boolean isReadable; public TestClusterListener(final ReadPreference readPreference) { this.readPreference = readPreference; } public void clusterOpening(final ClusterOpeningEvent clusterOpeningEvent) { System.out.println(String.format("Cluster with unique client identifier %s opening", clusterOpeningEvent.getClusterId())); } public void clusterClosed(final ClusterClosedEvent clusterClosedEvent) { System.out.println(String.format("Cluster with unique client identifier %s closed", clusterClosedEvent.getClusterId())); } public void clusterDescriptionChanged(final ClusterDescriptionChangedEvent event) { if (!isWritable) { if (event.getNewDescription().hasWritableServer()) { isWritable = true; System.out.println("Writable server available!"); } } else { if (!event.getNewDescription().hasWritableServer()) { isWritable = false; System.out.println("No writable server available!"); } } if (!isReadable) { if (event.getNewDescription().hasReadableServer(readPreference)) { isReadable = true; System.out.println("Readable server available!"); } } else { if (!event.getNewDescription().hasReadableServer(readPreference)) { isReadable = false; System.out.println("No readable server available!"); } } } }
다음 예시 에서는 TestClusterListener
인스턴스 로 구성된 MongoClientSettings
인스턴스 를 만듭니다.
List<ServerAddress> seedList = ... MongoClientSettings settings = MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.addClusterListener(new TestClusterListener(ReadPreference.secondary()))) .build(); MongoClient client = MongoClients.create(settings);
이러한 옵션으로 구성된 MongoClient
는 이러한 옵션으로 MongoClient
가 생성되고 해당 MongoClient
가 닫힐 때 System.out
에 메시지를 인쇄합니다. 또한 클라이언트 가 다음 상태 중 하나에 들어가면 메시지를 인쇄합니다.
쓰기를 허용하는 사용 가능한 서버가 있습니다.
쓰기를 허용할 가용 서버 가 없는 경우
구성된
ReadPreference
서버
ReadPreference
연결 풀 모니터링
이 드라이버는 연결 풀 관련 이벤트의 모니터링을 지원합니다.
애플리케이션은 ConnectionPoolListener
인터페이스를 구현하는 클래스의 인스턴스로 MongoClientSettings
를 구성하여 MongoClient
에 리스너를 등록합니다.
다음 코드는 연결 풀 리스너를 생성하는 방법을 보여줍니다.
public class TestConnectionPoolListener implements ConnectionPoolListener { public void connectionPoolOpened(final ConnectionPoolOpenedEvent event) { System.out.println(event); } public void connectionPoolClosed(final ConnectionPoolClosedEvent event) { System.out.println(event); } public void connectionCheckedOut(final ConnectionCheckedOutEvent event) { System.out.println(event); } public void connectionCheckedIn(final ConnectionCheckedInEvent event) { System.out.println(event); } public void connectionAdded(final ConnectionAddedEvent event) { System.out.println(event); } public void connectionRemoved(final ConnectionRemovedEvent event) { System.out.println(event); } }
다음 예시 에서는 TestConnectionPoolListener
인스턴스 로 구성된 MongoClientSettings
인스턴스 를 만듭니다.
List<ServerAddress> seedList = ... MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.addConnectionPoolListener(new TestConnectionPoolListener())) .build(); MongoClient client = MongoClients.create(settings);
이러한 옵션으로 구성된 MongoClient
는 MongoClient가 연결된 각 MongoDB 서버 의 각 연결 풀 관련 이벤트 에 대해 System.out
에 메시지를 인쇄합니다.