Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
루비 드라이버
/

클러스터 모니터링

이 가이드 Ruby 운전자 로 사용자 지정 구독자 또는 사용 가능한 구독자 메서드를 통해 MongoDB 인스턴스, 복제본 세트 또는 샤딩된 클러스터 에서 서버 검색 및 모니터링 (SDAM) 이벤트를 모니터 방법을 설명합니다. 이러한 이벤트는 연결된 MongoDB 인스턴스 또는 클러스터 의 상태 변경될 때 발생합니다.

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

Ruby 드라이버의 subscribe 메서드를 사용하여 이벤트를 구독 할 수 있습니다. 모니터링 이벤트 유형을 정의하는 모니터링 주제 와 인수로 구독자 객체 subscribe 메서드에 전달합니다.

다음 코드는 ServerOpeningLogSubscriber 구독자를 사용하여 서버 인스턴스 에 대한 연결을 모니터 . 클러스터 의 모든 클라이언트를 모니터링하는 글로벌 수준 또는 클라이언트 수준에서 이벤트를 구독 할 수 있습니다.

subscriber = Mongo::Monitoring::ServerOpeningLogSubscriber.new
# Globally subscribes to ServerOpening events by using the SERVER_OPENING monitoring topic
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_OPENING, subscriber)
client = Mongo::Client.new(['127.0.0.1:27017'])
# Subscribes to ServerOpening events at the client level by using the SERVER_OPENING monitoring topic
client.subscribe( Mongo::Monitoring::SERVER_OPENING, subscriber )

다음 표에는 사용 가능한 구독자와 해당 구독자의 모니터링 주제 나와 있습니다.

구독자 이름
모니터링 주제
설명

ServerClosedLogSubscriber

SERVER_CLOSED

ServerClosed 이벤트를 구독하고 기록합니다.

SERVER_DESCRIPTION_CHANGED

ServerDescriptionChanged 이벤트를 구독하고 기록합니다.

SERVER_OPENING

ServerOpening 이벤트를 구독하고 기록합니다.

TOPOLOGY_CHANGED

TopologyChanged 이벤트를 구독하고 기록합니다.

TOPOLOGY_CLOSED

TopologyClosed 이벤트를 구독하고 기록합니다.

TOPOLOGY_OPENING

TopologyOpening 이벤트를 구독하고 기록합니다.

이 페이지의 이벤트 설명 섹션에서 SDAM 이벤트 설명 표를 찾을 수 있습니다.

사용자 지정 SDAM 구독자를 생성하여 서버 및 토폴로지 이벤트에 대한 세부 정보에 액세스 할 수 있습니다. 각 이벤트 이벤트 에 대해 별도의 클래스를 만듭니다.

모든 이벤트에 대해 구독자는 succeeded 메서드를 호출하고 이벤트 인수로 전달합니다. 간단한 SDAM 로깅 구독자는 다음 코드와 유사할 수 있습니다.

class SDAMLogSubscriber
include Mongo::Loggable
def succeeded(event)
log_debug(format_event(event))
end
private
def logger
Mongo::Logger.logger
end
def format_message(message)
format("SDAM | %s", message)
end
end
class TopologyOpeningLogSubscriber < SDAMLogSubscriber
private
def format_event(event)
"Topology type '#{event.topology.display_name}' initializing."
end
end
class ServerOpeningLogSubscriber < SDAMLogSubscriber
private
def format_event(event)
"Server #{event.address} initializing."
end
end
class ServerDescriptionChangedLogSubscriber < SDAMLogSubscriber
private
def format_event(event)
"Server description for #{event.address} changed from " +
"'#{event.previous_description.server_type}' to '#{event.new_description.server_type}'."
end
end
class TopologyChangedLogSubscriber < SDAMLogSubscriber
private
def format_event(event)
if event.previous_topology != event.new_topology
"Topology type '#{event.previous_topology.display_name}' changed to " +
"type '#{event.new_topology.display_name}'."
else
"There was a change in the members of the '#{event.new_topology.display_name}' " +
"topology."
end
end
end
class ServerClosedLogSubscriber < SDAMLogSubscriber
private
def format_event(event)
"Server #{event.address} connection closed."
end
end
class TopologyClosedLogSubscriber < SDAMLogSubscriber
private
def format_event(event)
"Topology type '#{event.topology.display_name}' closed."
end
end

이벤트를 구독 하려면 적절한 구독자를 생성하고 올바른 모니터링 주제 를 구독 . 다음 코드는 SDAM 이벤트를 전역적으로 구독 방법을 보여줍니다.

topology_opening_subscriber = TopologyOpeningLogSubscriber.new
server_opening_subscriber = ServerOpeningLogSubscriber.new
server_description_changed_subscriber = ServerDescriptionChangedLogSubscriber.new
topology_changed_subscriber = TopologyChangedLogSubscriber.new
server_closed_subscriber = ServerClosedLogSubscriber.new
topology_closed_subscriber = TopologyClosedLogSubscriber.new
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::TOPOLOGY_OPENING,
topology_opening_subscriber)
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_OPENING,
server_opening_subscriber)
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_DESCRIPTION_CHANGED,
server_description_changed_subscriber)
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::TOPOLOGY_CHANGED,
topology_changed_subscriber)
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_CLOSED,
server_closed_subscriber)
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::TOPOLOGY_CLOSED,
topology_closed_subscriber)

다음 코드는 sdam-proc 클라이언트 옵션을 사용하여 단일 클라이언트 의 SDAM 이벤트를 구독 방법을 보여줍니다.

topology_opening_subscriber = TopologyOpeningLogSubscriber.new
server_opening_subscriber = ServerOpeningLogSubscriber.new
server_description_changed_subscriber = ServerDescriptionChangedLogSubscriber.new
topology_changed_subscriber = TopologyChangedLogSubscriber.new
server_closed_subscriber = ServerClosedLogSubscriber.new
topology_closed_subscriber = TopologyClosedLogSubscriber.new
sdam_proc = Proc.new do |client|
client.subscribe(Mongo::Monitoring::TOPOLOGY_OPENING,
topology_opening_subscriber)
client.subscribe(Mongo::Monitoring::SERVER_OPENING,
server_opening_subscriber)
client.subscribe(Mongo::Monitoring::SERVER_DESCRIPTION_CHANGED,
server_description_changed_subscriber)
client.subscribe(Mongo::Monitoring::TOPOLOGY_CHANGED,
topology_changed_subscriber)
client.subscribe(Mongo::Monitoring::SERVER_CLOSED,
server_closed_subscriber)
client.subscribe(Mongo::Monitoring::TOPOLOGY_CLOSED,
topology_closed_subscriber)
end
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test',
sdam_proc: sdam_proc)

참고

:sdam_proc 클라이언트 옵션은 지정된 클라이언트 에만 적용됩니다. Client#with 호출을 사용하여 특정 클라이언트 옵션을 변경하면 운전자 기본값 이벤트 구독자 설정하다 사용하여 새 클러스터 만들 수 있습니다. 이 경우 제공된 :sdam_proc 가 호출되지 않으며 애플리케이션 이벤트를 놓칠 수 있습니다.

애플리케이션 을 실행 하면 구독자는 SDAM 이벤트 를 기록하고 다음과 같은 메시지를 출력합니다.

D, [2018-10-09T13:58:03.489461 #22079] DEBUG -- : SDAM | Topology type 'Unknown' initializing.
D, [2018-10-09T13:58:03.489699 #22079] DEBUG -- : SDAM | Server 127.0.0.1:27100 initializing.
D, [2018-10-09T13:58:03.491384 #22079] DEBUG -- : SDAM | Server description for 127.0.0.1:27100 changed from 'unknown' to 'unknown'.
D, [2018-10-09T13:58:03.491642 #22079] DEBUG -- : SDAM | Server localhost:27100 initializing.
D, [2018-10-09T13:58:03.493199 #22079] DEBUG -- : SDAM | Server description for localhost:27100 changed from 'unknown' to 'primary'.
D, [2018-10-09T13:58:03.493473 #22079] DEBUG -- : SDAM | Server localhost:27101 initializing.
D, [2018-10-09T13:58:03.494874 #22079] DEBUG -- : SDAM | Server description for localhost:27101 changed from 'unknown' to 'secondary'.
D, [2018-10-09T13:58:03.495139 #22079] DEBUG -- : SDAM | Server localhost:27102 initializing.
D, [2018-10-09T13:58:03.496504 #22079] DEBUG -- : SDAM | Server description for localhost:27102 changed from 'unknown' to 'secondary'.
D, [2018-10-09T13:58:03.496777 #22079] DEBUG -- : SDAM | Topology type 'Unknown' changed to type 'ReplicaSetNoPrimary'.
D, [2018-10-09T13:58:03.497306 #22079] DEBUG -- : SDAM | Server 127.0.0.1:27100 connection closed.
D, [2018-10-09T13:58:03.497606 #22079] DEBUG -- : SDAM | Topology type 'ReplicaSetNoPrimary' changed to type 'ReplicaSetWithPrimary'.
# client.close
D, [2018-10-09T13:58:05.342057 #22079] DEBUG -- : SDAM | Server localhost:27100 connection closed.
D, [2018-10-09T13:58:05.342299 #22079] DEBUG -- : SDAM | Server localhost:27101 connection closed.
D, [2018-10-09T13:58:05.342565 #22079] DEBUG -- : SDAM | Server localhost:27102 connection closed.
D, [2018-10-09T13:58:05.342693 #22079] DEBUG -- : SDAM | Topology type 'ReplicaSetWithPrimary' closed.

사용자 지정 구독자를 만들어 서버 모니터 서버 에 hello 명령을 보낼 때 발생하는 서버 하트비트를 모니터 할 수도 있습니다.

사용자 지정 서버 하트비트 구독자는 다음 세 가지 방법을 구현 해야 한다는 점에서 다른 SDAM 구독자와 다릅니다.

  • started: 리스너가 하트비트를 수신할 때 호출됩니다.

  • succeeded: 성공적인 하트비트 결과에 대한 응답

  • failed: 실패한 하트비트 결과에 대한 응답

다음 예시 하트비트 이벤트 구독자를 보여줍니다.

class HeartbeatLogSubscriber
include Mongo::Loggable
def started(event)
log_debug("#{event.address} | STARTED")
end
def succeeded(event)
log_debug("#{event.address} | SUCCEEDED | #{event.duration}s")
end
def failed(event)
log_debug("#{event.address} | FAILED | #{event.error.class}: #{event.error.message} | #{event.duration}s")
end
private
def logger
Mongo::Logger.logger
end
def format_message(message)
format("HEARTBEAT | %s", message)
end
end

다음 예시 와 같이 전역적으로 또는 특정 클라이언트 에 대해 하트비트 이벤트를 구독 할 수 있습니다.

subscriber = HeartbeatLogSubscriber.new
# Globally subscribes to Server Opening events
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
# Subscribes to Server Opening events at the client level
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'test' )
client.subscribe( Mongo::Monitoring::SERVER_HEARTBEAT, subscriber )

애플리케이션 실행 하면 구독자는 하트비트 이벤트 기록하고 다음과 같은 메시지를 출력합니다.

D, [2018-09-23T13:44:10.707018 #1739] DEBUG -- : HEARTBEAT | 127.0.0.1:27027 | STARTED
D, [2018-09-23T13:44:10.707778 #1739] DEBUG -- : HEARTBEAT | 127.0.0.1:27027 | SUCCEEDED | 0.000772381s

다음 표에는 각 SDAM 이벤트 의 이름과 설명이 나와 있습니다.

eventType
설명

서버 인스턴스 가 닫힐 때 생성되는 이벤트입니다.

서버의 설명이 변경될 때 생성되는 이벤트입니다.

서버 하트비트가 실패할 때 생성되는 이벤트입니다.

리스너가 서버 하트비트를 수신할 때 생성되는 이벤트입니다.

서버 하트비트가 성공하면 생성되는 이벤트입니다.

운전자 서버 에 연결할 때 생성되는 이벤트입니다.

토폴로지 변경될 때 생성되는 이벤트입니다.

토폴로지 의 모든 인스턴스 연결이 닫힐 때 생성되는 이벤트입니다.

운전자 인스턴스 에 연결을 시도하기 전에 생성된 이벤트입니다.

이 가이드 에 설명된 클래스 또는 메서드에 학습 보려면 다음 API 설명서를 참조하세요.

돌아가기

애플리케이션 모니터링

이 페이지의 내용