- Reference
- Driver Core
- Eventing
- SDAM Events
SDAM Events
Server Discovery and Monitoring (SDAM) is the process by which the driver discovers and monitors the set of servers that it is connected to. In
the case of a standalone configuration the driver will only monitor a single server. In the case of a replica set configuration the driver
will monitor each member of the replica set (primary, secondaries, etc.). In the case of a sharded configuration the driver will
monitor the set of shard routers (mongos instances) that it is connected to.
As the driver monitors the health and state of each server in a configuration, it raises a number of events that report what it is finding and how it is reacting to that information. You can subscribe to any or all of these events if you want to observe what SDAM is doing.
See the general Eventing page for information on how to subscribe to individual events.
Logging SDAM Events the Easy Way
Often all you want to do with SDAM events is log them. You can configure logging of SDAM events by setting the SdamLogFilename property of MongoClientSettings.
var clientSettings = new MongoClientSettings();
clientSetting.SdamLogFilename = @"c:\sdam.log";
var client = new MongoClient(clientSettings);
The SdamLogFilename is only configurable in code, not in the connection string. The way to combine using a connection string with SDAM logging is:
var connectionString = "mongodb://localhost"; // presumably loaded via some config mechanism
var clientSettings = MongoClientSettings.FromConnectionString(connectionString);
clientSetting.SdamLogFilename = @"c:\sdam.log";
var client = new MongoClient(clientSettings);
Note
Logging SDAM events results in the file being opened in exclusive mode, so it is possible for multiple instances of MongoClient to conflict
over the use of the file. Whether the multiple MongoClient instances actually conflict over the use of the file or not depends on how similar
the MongoClientSettings are. If they are different enough to result in the creation of separate underlying Cluster instances then they will conflict.
The safest approach when logging SDAM events is to use a single instance of MongoClient throughout
your application. This differs from previous guidance which stated that it didn’t matter how many instances of MongoClient you created.
SDAM Events That Are Logged
SDAM logging logs the following events which are raised in the course of monitoring the servers the driver is connected to.
ClusterAddedServerEvent
The ClusterAddedServerEvent is raised after a server has been added to the cluster.
ClusterAddingServerEvent
The ClusterAddingServerEvent is raised before a server is added to the cluster.
ClusterClosedEvent
The ClusterClosedEvent is raised after a cluster has been closed.
ClusterClosingEvent
The ClusterClosingEvent is raised before a cluster is closed.
ClusterDescriptionChangedEvent
The ClusterDescriptionChangedEvent is raised when the cluster description changes.
ClusterOpenedEvent
The ClusterOpenedEvent is raised after a cluster has been opened.
ClusterOpeningEvent
The ClusterOpeningEvent is raised before a cluster is opened.
ClusterRemovedServerEvent
The ClusterRemovedServerEvent is raised after a server has been removed from the cluster.
ClusterRemovingServerEvent
The ClusterRemovingServerEvent is raised before a server is removed from the cluster.
SdamInformationEvent
The SdamInformationEvent is raised when something interesting happened that is not covered by a custom event type.
ServerClosedEvent
The ServerClosedEvent is raised after a server has been closed.
ServerClosingEvent
The ServerClosingEvent is raised before a server is closed.
ServerDescriptionChangedEvent
The ServerDescriptionChangedEvent is raised when the server description has changed.
ServerHeartbeatFailedEvent
The ServerHeartbeatFailedEvent is raised after a heartbeat has failed.
ServerHeartbeatStartedEvent
The ServerHeartbeatStartedEvent is raised after a heartbeat has started (but before the heartbeat is sent to the server).
ServerHeartbeatSucceededEvent
The ServerHeartbeatSucceededEvent is raised after a heartbeat has succeeded.
ServerOpenedEvent
The ServerOpenedEvent is raised after a server has been opened.
ServerOpeningEvent
The ServerOpeningEvent is raised before a server is opened.