クラスター モニタリング
項目一覧
Overview
このガイドでは、MongoDB インスタンス、レプリカセット、またはシャーディングされたクラスターでトポロジー イベントを監視する方法を説明します。 ドライバーは、接続したインスタンスまたはクラスターの状態が変化した場合に、サーバー検出とモニタリング(SDAM)イベントとも呼ばれるトポロジー イベントを作成します。 たとえば、新しい接続を確立したとき、またはクラスターが新しいプライマリを選択した場合、ドライバーはイベントを作成します。
次のセクションでは、アプリケーション内のトポロジーの変更を記録し、これらのイベントで提供される情報を調べる方法を示します。
イベント サブスクリプションの例
アプリケーションでサブスクライブすることで、ドライバーを使用して 1 つ以上の SDAM イベントにアクセスできます。 次の例では、レプリカセットへの接続と、MongoDB 配置によって作成された SDAM イベントの 1 つへのサブスクライブを示します。
/* Subscribe to SDAM event */ const { MongoClient } = require("mongodb"); // Replace the following with your MongoDB deployment's connection string const uri = "mongodb+srv://<clusterUrl>/?replicaSet=rs&writeConcern=majority"; const client = new MongoClient(uri); // Replace <event name> with the name of the event you are subscribing to const eventName = "<event name>"; // Subscribe to a specified event and print a message when the event is received client.on(eventName, event => { console.log(`received ${eventName}: ${JSON.stringify(event, null, 2)}`); }); async function run() { try { // Establish and verify connection to the database await client.db("admin").command({ ping: 1 }); console.log("Connected successfully"); } finally { // Close the database connection on completion or error await client.close(); } } run().catch(console.dir);
イベントの説明
次の SDAM イベントのいずれかにサブスクライブできます。
イベント名 | 説明 |
---|---|
serverOpening | インスタンスへの接続が開いたときに作成されます。 |
serverClosed | インスタンスへの接続が閉じられたときに作成されます。 |
serverDescriptionChanged | インスタンスの状態が変更されたときに作成されます(セカンダリからプライマリへなど)。 |
topologyOpening | インスタンスへの接続を試みる前に作成されます。 |
topologyClosed | トポロジー内のすべてのインスタンス接続が閉じた後に作成されます。 |
topologyDescriptionChanged | 新しいプライマリの選挙やmongosプロキシの切断など、トポロジーが変更されたときに作成されます。 |
serverHeartbeatStarted | MongoDB インスタンスに hello コマンドを発行する前に作成されます。 |
serverHeartbeatSucceeded | hello コマンドが MongoDB インスタンスから正常に返されたときに作成されます。 |
serverHeartbeatFailed | 特定の MongoDB インスタンスに対して発行された hello コマンドが成功した応答を返すのに失敗した場合に作成されます。 |
イベント ドキュメントの例
次のセクションは、各 SDAM イベントのタイプごとのサンプル出力を示しています。
server Description Changed
ServerDescriptionChangedEvent { topologyId: 0, address: 'localhost:27017', previousDescription: ServerDescription { address: 'localhost:27017', error: null, roundTripTime: 0, lastUpdateTime: 1571251089030, lastWriteDate: null, opTime: null, type: 'Unknown', minWireVersion: 0, maxWireVersion: 0, hosts: [], passives: [], arbiters: [], tags: [] }, newDescription: ServerDescription { address: 'localhost:27017', error: null, roundTripTime: 0, lastUpdateTime: 1571251089051, lastWriteDate: 2019-10-16T18:38:07.000Z, opTime: { ts: Timestamp, t: 18 }, type: 'RSPrimary', minWireVersion: 0, maxWireVersion: 7, maxBsonObjectSize: 16777216, maxMessageSizeBytes: 48000000, maxWriteBatchSize: 100000, me: 'localhost:27017', hosts: [ 'localhost:27017' ], passives: [], arbiters: [], tags: [], setName: 'rs', setVersion: 1, electionId: ObjectID, primary: 'localhost:27017', logicalSessionTimeoutMinutes: 30, '$clusterTime': ClusterTime } }
このイベントのServerDescription
オブジェクトのtype
フィールドには、次のいずれかの可能な値が含まれています。
タイプ | 説明 |
---|---|
Unknown | 不明なインスタンス |
Standalone | スタンドアロン インスタンス |
Mongos | Mongos プロキシ インスタンス |
PossiblePrimary | 少なくとも 1 つのサーバーがこれをプライマリとして認識しますが、すべての インスタンスによってまだ検証されていません。 |
RSPrimary | プライマリ インスタンス |
RSSecondary | セカンダリ インスタンス |
RSArbiter | アービタ インスタンス |
RSOther | 詳細については、 RSGhost および RS Other 仕様 を参照してください。 |
RSGhost | RSGhost および RSその他の仕様 を参照してください。 詳細については、 |
server heartbeatStarted
ServerHeartbeatStartedEvent { connectionId: 'localhost:27017' }
serverハートビートSucceeded
ServerHeartbeatSucceededEvent { duration: 1.939997, reply:{ hosts: [ 'localhost:27017' ], setName: 'rs', setVersion: 1, isWritablePrimary: true, secondary: false, primary: 'localhost:27017', me: 'localhost:27017', electionId: ObjectID, lastWrite: { opTime: { ts: [Timestamp], t: 18 }, lastWriteDate: 2019-10-16T18:38:17.000Z, majorityOpTime: { ts: [Timestamp], t: 18 }, majorityWriteDate: 2019-10-16T18:38:17.000Z }, maxBsonObjectSize: 16777216, maxMessageSizeBytes: 48000000, maxWriteBatchSize: 100000, localTime: 2019-10-16T18:38:19.589Z, logicalSessionTimeoutMinutes: 30, minWireVersion: 0, maxWireVersion: 7, readOnly: false, ok: 1, operationTime: Timestamp, '$clusterTime': ClusterTime }, connectionId: 'localhost:27017' }
server heartbeatFailed
ServerHeartbeatFailed { duration: 20, failure: MongoError('some error'), connectionId: 'localhost:27017' }
server全体の開始
ServerOpeningEvent { topologyId: 0, address: 'localhost:27017' }
serverClosed
ServerClosedEvent { topologyId: 0, address: 'localhost:27017' }
topic
TopologyOpeningEvent { topologyId: 0 }
トポロジーが閉じた
TopologyClosedEvent { topologyId: 0 }
topic
TopologyDescriptionChangedEvent { topologyId: 0, previousDescription: TopologyDescription { type: 'ReplicaSetNoPrimary', setName: null, maxSetVersion: null, maxElectionId: null, servers: Map { 'localhost:27017' => ServerDescription }, stale: false, compatible: true, compatibilityError: null, logicalSessionTimeoutMinutes: null, heartbeatFrequencyMS: 10000, localThresholdMS: 15, options: Object, error: undefined, commonWireVersion: null }, newDescription: TopologyDescription { type: 'ReplicaSetWithPrimary', setName: 'rs', maxSetVersion: 1, maxElectionId: null, servers: Map { 'localhost:27017' => ServerDescription }, stale: false, compatible: true, compatibilityError: null, logicalSessionTimeoutMinutes: 30, heartbeatFrequencyMS: 10000, localThresholdMS: 15, options: Object, error: undefined, commonWireVersion: 7 } }
このイベントのTopologyDescription
オブジェクトのtype
フィールドには、次のいずれかの可能な値が含まれています。
タイプ | 説明 |
---|---|
Single | スタンドアロン インスタンス |
ReplicaSetWithPrimary | プライマリがあるレプリカセット |
ReplicaSetNoPrimary | プライマリのないレプリカセット |
Sharded | シャーディングされたクラスター |
Unknown | 不明なトポロジー |