クラスター モニタリング
項目一覧
Overview
このガイドでは、Go ドライバーを使用して MongoDB インスタンス、レプリカセット、またはシャーディングされたクラスター内のトポロジー イベントを監視する方法を説明します。 ドライバーは、接続しているインスタンスまたはクラスターの状態が変更されたときに、サーバー検出とモニタリング(SDAM)イベントとも呼ばれるトポロジー イベントを作成します。
アプリケーション内のトポロジー イベントに関する情報を使用して、クラスターの変更の理解、クラスターの健全性の評価、またはキャパシティー プランニングを実行することができます。
イベントにサブスクライブ
アプリケーションで SDAM イベントをサブスクライブすることで、その詳細にアクセスできます。 次の例では、 ServerMonitor
をインスタンス化し、配置に接続して、 ServerClosed
イベントをサブスクライブする方法を示しています。
var eventArray []*event.ServerClosedEvent srvMonitor := &event.ServerMonitor{ ServerClosed: func(e *event.ServerClosedEvent) { eventArray = append(eventArray, e) }, } clientOpts := options.Client().ApplyURI(uri).SetServerMonitor(srvMonitor) client, err := mongo.Connect(context.TODO(), clientOpts)
イベントの説明
ServerMonitor
インスタンスのプロパティを指定することで、次の SDAM イベントをサブスクライブできます。
イベント名 | 説明 |
---|---|
ServerDescriptionChangedEvent | インスタンスの状態が変更されたときに作成されます(セカンダリからプライマリへなど)。 |
ServerOpeningEvent | サーバーが初期化されたときに作成されます。 |
ServerClosedEvent | サーバーが閉じられたときに作成されます。 |
TopologyDescriptionChangedEvent | 新しいプライマリの選挙や mongos プロキシの切断など、トポロジーが変更されたときに作成されます。 |
TopologyOpeningEvent | トポロジーが初期化されたときに作成されます。 |
TopologyClosedEvent | トポロジーが閉じられたときに作成されます。 |
ServerHeartbeatStartedEvent | ハートビートが開始されたときに作成されます。 |
ServerHeartbeatSucceededEvent | ハートビートが成功したときに作成されます。 |
ServerHeartbeatFailedEvent | ハートビートが失敗したときに作成されます。 |
イベント ドキュメントの例
次のセクションは、各 SDAM イベントのタイプごとのサンプル出力を示しています。
Server Description ChangedEvent
*event.ServerDescriptionChangedEvent { "Address": "...", "TopologyID": "...", "PreviousDescription": { "Addr": "...", "Arbiters": null, "AverageRTT": 0, "AverageRTTSet": false, "Compression": null, "CanonicalAddr": "...", "ElectionID": "...", "HeartbeatInterval": 0, "HelloOK": false, "Hosts": null, "LastError": null, "LastUpdateTime": "...", "LastWriteTime": "...", "MaxBatchCount": 0, "MaxDocumentSize": 0, "MaxMessageSize": 0, "Members": null, "Passives": null, "Passive": false, "Primary": "...", "ReadOnly": false, "ServiceID": null, "SessionTimeoutMinutes": 0, "SetName": "...", "SetVersion": 0, "Tags": null, "TopologyVersion": null, "Kind": 0, "WireVersion": null }, "NewDescription": { "Addr": "...", "Arbiters": null, "AverageRTT": ..., "AverageRTTSet": true, "Compression": null, "CanonicalAddr": "...", "ElectionID": "...", "HeartbeatInterval": ..., "HelloOK": true, "Hosts": [...], "LastError": null, "LastUpdateTime": "...", "LastWriteTime": "...", "MaxBatchCount": ..., "MaxDocumentSize": ..., "MaxMessageSize": ..., "Members": [...], "Passives": null, "Passive": false, "Primary": "...", "ReadOnly": false, "ServiceID": null, "SessionTimeoutMinutes": 30, "SetName": "...", "SetVersion": 9, "Tags": [...], "TopologyVersion": {...}, "Kind": 10, "WireVersion": {...} } }
Kind
フィールド値
イベント ドキュメントのKind
フィールドはトポロジー内の単一サーバーのタイプを表し、次の値を持つことができます。
値 | 説明 |
---|---|
0 | 不明なインスタンス |
1 | スタンドアロン インスタンス |
2 | レプリカセット ノード |
6 | プライマリ インスタンス |
10 | セカンダリ インスタンス |
18 | アービタ インスタンス |
34 | レプリカセットのスコープ(クエリできないノード) |
256 | mongos プロキシ インスタンス |
512 | ロード バランサー インスタンス |
ServerOpenEvent
*event.ServerOpeningEvent { "Address": "...", "TopologyID": "..." }
ServerClosedEvent
*event.ServerClosedEvent { "Address": "...", "TopologyID": "..." }
トポロジーの説明を変更したイベント
重要
ドライバーは配置トポロジーがロックされているときにTopologyDescriptionChangedEvent
を呼び出すため、このイベントのコールバック(関数引数)は、同じクライアントでサーバー選択を必要とする操作を試行しないでください。
*event.TopologyDescriptionChangedEvent { "TopologyID": "...", "PreviousDescription": { "Servers": [ { "Addr": "...", "Arbiters": null, "AverageRTT": 0, "AverageRTTSet": false, "Compression": null, "CanonicalAddr": "...", "ElectionID": "...", "HeartbeatInterval": 0, "HelloOK": false, "Hosts": null, "LastError": null, "LastUpdateTime": "...", "LastWriteTime": "...", "MaxBatchCount": 0, "MaxDocumentSize": 0, "MaxMessageSize": 0, "Members": null, "Passives": null, "Passive": false, "Primary": "...", "ReadOnly": false, "ServiceID": null, "SessionTimeoutMinutes": 0, "SetName": "...", "SetVersion": 0, "Tags": null, "TopologyVersion": null, "Kind": 0, "WireVersion": null }, ... ], "SetName": "...", "Kind": 10, "SessionTimeoutMinutes": 30, "CompatibilityErr": null }, "NewDescription": { "Servers": [...], "SetName": "...", "Kind": 10, "SessionTimeoutMinutes": 30, "CompatibilityErr": null } }
Kind
フィールドの値を解釈するには、「 の種類のフィールド値 」セクションを参照してください。
トポロジーを開くイベント
*event.TopologyOpeningEvent { "TopologyID": "..." }
トポロジーが閉じたイベント
*event.TopologyClosedEvent { "TopologyID": "..." }
ServerHeartbeatStartedEvent
*event.ServerHeartbeatStartedEvent { "ConnectionID": "...", "Awaited": true }
ServerハートビートSucceededEvent
*event.ServerHeartbeatSucceededEvent { "DurationNanos": ..., "Reply": { "Addr": "...", "Arbiters": null, "AverageRTT": 0, "AverageRTTSet": false, "Compression": null, "CanonicalAddr": "...", "ElectionID": "...", "HeartbeatInterval": 0, "HelloOK": true, "Hosts": [...], "LastError": null, "LastUpdateTime": "...", "LastWriteTime": "...", "MaxBatchCount": ..., "MaxDocumentSize": ..., "MaxMessageSize": ..., "Members": [...], "Passives": null, "Passive": false, "Primary": "...", "ReadOnly": false, "ServiceID": null, "SessionTimeoutMinutes": 30, "SetName": "...", "SetVersion": 9, "Tags": [...], "TopologyVersion": {...}, "Kind": 6, "WireVersion": {...} }, "ConnectionID": "...", "Awaited": true }
Kind
フィールドの値を解釈するには、「種類のフィールド値 」セクションを参照してください。
ServerハートビートFailedEvent
*event.ServerHeartbeatFailedEvent { "DurationNanos": ..., "Failure": "<error message>" "ConnectionID": "...", "Awaited": true }
API ドキュメント
SetServerMonitor() メソッド
イベント パッケージ