Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ /

クラスター モニタリング

項目一覧

  • Overview
  • イベント サブスクリプションの例
  • イベントの説明
  • イベント ドキュメントの例
  • server Description Changed
  • server heartbeatStarted
  • serverハートビートSucceeded
  • server heartbeatFailed
  • server全体の開始
  • serverClosed
  • topic
  • トポロジーが閉じた
  • topic

このガイドでは、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 イベントのタイプごとのサンプル出力を示しています。

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その他の仕様 を参照してください。 詳細については、
ServerHeartbeatStartedEvent {
connectionId: 'localhost:27017'
}
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'
}
ServerHeartbeatFailed {
duration: 20,
failure: MongoError('some error'),
connectionId: 'localhost:27017'
}
ServerOpeningEvent {
topologyId: 0,
address: 'localhost:27017'
}
ServerClosedEvent {
topologyId: 0,
address: 'localhost:27017'
}
TopologyOpeningEvent {
topologyId: 0
}
TopologyClosedEvent {
topologyId: 0
}
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
不明なトポロジー

戻る

モニタリング