Docs Menu
Docs Home
/ / /
Go Driver
/ /

クラスター モニタリング

項目一覧

  • Overview
  • イベントにサブスクライブ
  • イベントの説明
  • イベント ドキュメントの例
  • Server Description ChangedEvent
  • ServerOpenEvent
  • ServerClosedEvent
  • トポロジーの説明を変更したイベント
  • トポロジーを開くイベント
  • トポロジーが閉じたイベント
  • ServerHeartbeatStartedEvent
  • ServerハートビートSucceededEvent
  • ServerハートビートFailedEvent
  • API ドキュメント

このガイドでは、Go ドライバーを使用して MongoDB インスタンス、レプリカセット、またはシャーディングされたクラスター内のトポロジー イベントを監視する方法を説明します。 ドライバーは、接続しているインスタンスまたはクラスターの状態が変更されたときに、サーバー検出とモニタリング(SDAM)イベントとも呼ばれるトポロジー イベントを作成します。

アプリケーション内のトポロジー イベントに関する情報を使用して、クラスターの変更の理解、クラスターの健全性の評価、またはキャパシティー プランニングを実行することができます。

Tip

ログ記録

また、アプリケーションでのログ記録を設定して、ドライバー イベントの詳細を学習することもできます。 詳しくは、「 ログ記録 」を参照してください。

アプリケーションで 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 イベントのタイプごとのサンプル出力を示しています。

*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フィールドはトポロジー内の単一サーバーのタイプを表し、次の値を持つことができます。

説明
0
不明なインスタンス
1
スタンドアロン インスタンス
2
レプリカセット ノード
6
プライマリ インスタンス
10
セカンダリ インスタンス
18
アービタ インスタンス
34
レプリカセットのスコープ(クエリできないノード)
256
mongos プロキシ インスタンス
512
ロード バランサー インスタンス
*event.ServerOpeningEvent
{
"Address": "...",
"TopologyID": "..."
}
*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": "..."
}
*event.ServerHeartbeatStartedEvent
{
"ConnectionID": "...",
"Awaited": true
}
*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フィールドの値を解釈するには、「種類のフィールド値 」セクションを参照してください。

*event.ServerHeartbeatFailedEvent
{
"DurationNanos": ...,
"Failure": "<error message>"
"ConnectionID": "...",
"Awaited": true
}

戻る

モニタリング