Skip to content

Commit 8d8a159

Browse files
authored
DOCSP-45201 Cluster monitoring (#133)
* DOCSP-45201 Cluster monitoring * first draft * remove eevrything not about cluster monitoring: * table changes * review * final few changes * NR review comments * NR comments * look through * tech review comments
1 parent 7436970 commit 8d8a159

File tree

4 files changed

+435
-0
lines changed

4 files changed

+435
-0
lines changed
+173
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
# start-available-subscriber
2+
subscriber = Mongo::Monitoring::ServerOpeningLogSubscriber.new
3+
4+
# Globally subscribes to ServerOpening events by using the SERVER_OPENING monitoring topic
5+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_OPENING, subscriber)
6+
client = Mongo::Client.new(['127.0.0.1:27017'])
7+
8+
# Subscribes to ServerOpening events at the client level by using the SERVER_OPENING monitoring topic
9+
client.subscribe( Mongo::Monitoring::SERVER_OPENING, subscriber )
10+
# end-available-subscriber
11+
12+
# start-sdam
13+
class SDAMLogSubscriber
14+
include Mongo::Loggable
15+
16+
def succeeded(event)
17+
log_debug(format_event(event))
18+
end
19+
20+
private
21+
22+
def logger
23+
Mongo::Logger.logger
24+
end
25+
26+
def format_message(message)
27+
format("SDAM | %s", message)
28+
end
29+
end
30+
31+
class TopologyOpeningLogSubscriber < SDAMLogSubscriber
32+
private
33+
34+
def format_event(event)
35+
"Topology type '#{event.topology.display_name}' initializing."
36+
end
37+
end
38+
39+
class ServerOpeningLogSubscriber < SDAMLogSubscriber
40+
private
41+
42+
def format_event(event)
43+
"Server #{event.address} initializing."
44+
end
45+
end
46+
47+
class ServerDescriptionChangedLogSubscriber < SDAMLogSubscriber
48+
private
49+
50+
def format_event(event)
51+
"Server description for #{event.address} changed from " +
52+
"'#{event.previous_description.server_type}' to '#{event.new_description.server_type}'."
53+
end
54+
end
55+
56+
class TopologyChangedLogSubscriber < SDAMLogSubscriber
57+
private
58+
59+
def format_event(event)
60+
if event.previous_topology != event.new_topology
61+
"Topology type '#{event.previous_topology.display_name}' changed to " +
62+
"type '#{event.new_topology.display_name}'."
63+
else
64+
"There was a change in the members of the '#{event.new_topology.display_name}' " +
65+
"topology."
66+
end
67+
end
68+
end
69+
70+
class ServerClosedLogSubscriber < SDAMLogSubscriber
71+
private
72+
73+
def format_event(event)
74+
"Server #{event.address} connection closed."
75+
end
76+
end
77+
78+
class TopologyClosedLogSubscriber < SDAMLogSubscriber
79+
private
80+
81+
def format_event(event)
82+
"Topology type '#{event.topology.display_name}' closed."
83+
end
84+
end
85+
#end-sdam
86+
87+
# start-sdam-subscriber-global
88+
topology_opening_subscriber = TopologyOpeningLogSubscriber.new
89+
server_opening_subscriber = ServerOpeningLogSubscriber.new
90+
server_description_changed_subscriber = ServerDescriptionChangedLogSubscriber.new
91+
topology_changed_subscriber = TopologyChangedLogSubscriber.new
92+
server_closed_subscriber = ServerClosedLogSubscriber.new
93+
topology_closed_subscriber = TopologyClosedLogSubscriber.new
94+
95+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::TOPOLOGY_OPENING,
96+
topology_opening_subscriber)
97+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_OPENING,
98+
server_opening_subscriber)
99+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_DESCRIPTION_CHANGED,
100+
server_description_changed_subscriber)
101+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::TOPOLOGY_CHANGED,
102+
topology_changed_subscriber)
103+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_CLOSED,
104+
server_closed_subscriber)
105+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::TOPOLOGY_CLOSED,
106+
topology_closed_subscriber)
107+
# end-sdam-subscriber-global
108+
109+
# start-sdam-subscriber-client
110+
topology_opening_subscriber = TopologyOpeningLogSubscriber.new
111+
server_opening_subscriber = ServerOpeningLogSubscriber.new
112+
server_description_changed_subscriber = ServerDescriptionChangedLogSubscriber.new
113+
topology_changed_subscriber = TopologyChangedLogSubscriber.new
114+
server_closed_subscriber = ServerClosedLogSubscriber.new
115+
topology_closed_subscriber = TopologyClosedLogSubscriber.new
116+
117+
sdam_proc = Proc.new do |client|
118+
client.subscribe(Mongo::Monitoring::TOPOLOGY_OPENING,
119+
topology_opening_subscriber)
120+
client.subscribe(Mongo::Monitoring::SERVER_OPENING,
121+
server_opening_subscriber)
122+
client.subscribe(Mongo::Monitoring::SERVER_DESCRIPTION_CHANGED,
123+
server_description_changed_subscriber)
124+
client.subscribe(Mongo::Monitoring::TOPOLOGY_CHANGED,
125+
topology_changed_subscriber)
126+
client.subscribe(Mongo::Monitoring::SERVER_CLOSED,
127+
server_closed_subscriber)
128+
client.subscribe(Mongo::Monitoring::TOPOLOGY_CLOSED,
129+
topology_closed_subscriber)
130+
end
131+
132+
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test',
133+
sdam_proc: sdam_proc)
134+
# end-sdam-subscriber-client
135+
136+
# start-heartbeat
137+
class HeartbeatLogSubscriber
138+
include Mongo::Loggable
139+
140+
def started(event)
141+
log_debug("#{event.address} | STARTED")
142+
end
143+
144+
def succeeded(event)
145+
log_debug("#{event.address} | SUCCEEDED | #{event.duration}s")
146+
end
147+
148+
def failed(event)
149+
log_debug("#{event.address} | FAILED | #{event.error.class}: #{event.error.message} | #{event.duration}s")
150+
end
151+
152+
private
153+
154+
def logger
155+
Mongo::Logger.logger
156+
end
157+
158+
def format_message(message)
159+
format("HEARTBEAT | %s", message)
160+
end
161+
end
162+
# end-heartbeat
163+
164+
# start-heartbeat-subscribe
165+
subscriber = HeartbeatLogSubscriber.new
166+
167+
# Globally subscribes to Server Opening events
168+
Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
169+
170+
# Subscribes to Server Opening events at the client level
171+
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'test' )
172+
client.subscribe( Mongo::Monitoring::SERVER_HEARTBEAT, subscriber )
173+
# end-heartbeat-subscribe

source/index.txt

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
Read Data </read>
1919
Operations on Replica Sets </read-write-pref>
2020
Indexes </indexes>
21+
Monitor Your Application </monitoring>
2122
Data Aggregation </aggregation>
2223
Security </security>
2324
Data Formats </data-formats>

source/monitoring.txt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.. _ruby-monitoring:
2+
3+
========================
4+
Monitor Your Application
5+
========================
6+
7+
.. toctree::
8+
:caption: Monitoring categories
9+
10+
Cluster Monitoring </monitoring/cluster-monitoring>
11+

0 commit comments

Comments
 (0)