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

不明なトポロジー

戻る

モニタリング