Docs Menu
Docs Home
/ /

アプリケーション イベントの監視

このガイドでは、 MongoDB C++ドライバーで監視を設定および構成する方法を学習できます。

モニタリングには、実行中のプログラムのアクティビティに関する情報を収集することが含まれます。この情報はアプリケーションパフォーマンス マネジメント ライブラリで使用できます。

C++ドライバーを監視すると、ドライバーのリソース使用量とパフォーマンスを理解できます。この情報は、アプリケーションの設計とデバッグ時に情報に基づいた決定を行う際に役立ちます。

このガイドでは、次のタスクを実行する方法について説明しています。

  • コマンド イベントの監視

  • サーバー検出とモニタリング(SDAM)イベントの監視

Tip

このガイドでは、コード内でドライバーのアクティビティに関する情報を使用する方法について説明します。ドライバーでイベントをレコード方法について詳しくは、「 ドライバー イベントのログガイド 」を参照してください。

C++ドライバーは、クライアントがデータベースコマンド を実行するときにコマンド イベントを作成します。例、findinsertdeletecount コマンドでは、コマンド イベントが生成されます。これらのコマンドは、ドライバーの標準的な作成、読み取り、更新、または削除操作を実行中するか、データベースコマンドを直接使用して開始できます。

Tip

データベースコマンドの詳細については、 「コマンドの実行」ガイドを 参照してください 。

アプリケーションでコマンド イベントをサブスクライブすることで、コマンド イベントの詳細にアクセスできます。コマンドイベントをサブスクライブするには、アプリケーション パフォーマンス モニタリング(APM)構成を保存するための mongocxx::options::apmオブジェクトを作成します。次に、オプションを mongocxx::clientオブジェクトに渡します。コマンド監視動作を設定するには、 mongocxx::options::apmオブジェクトで次のメソッドを呼び出します。

方式
説明

on_command_started()

コマンド開始時にクライアントが応答する方法を指定します。これにより mongocxx::events::command_started_event

on_command_failed()

コマンドが成功し なかった 場合にクライアントが応答する方法を指定します。これにより mongocxx::events::command_failed_event

on_command_succeeded()

コマンドが成功したときにクライアントが応答する方法を指定します。これにより mongocxx::events::command_succeeded_event

次のコードは、次のアクションを実行して、 コマンドが開始された イベントを監視します。

  • mongocxx::options::apmオブジェクトで on_command_started() メソッドを呼び出す

  • 各コマンドの名前とリクエストIDを出力するコールバックを on_command_started() に渡します

  • 次のオプションを使用してクライアントを構成します

1#include <iostream>
2#include <mongocxx/client.hpp>
3#include <mongocxx/instance.hpp>
4#include <mongocxx/uri.hpp>
5#include <mongocxx/options/apm.hpp>
6
7int main() {
8 mongocxx::instance instance{};
9
10 int command_started_events = 0;
11
12 mongocxx::options::apm apm_opts;
13 apm_opts.on_command_started([&command_started_events](const mongocxx::events::command_started_event& event) {
14 command_started_events++;
15 std::cout << "Command started: " << event.command_name()
16 << " (request_id: " << event.request_id() << ")" << std::endl;
17 });
18
19 mongocxx::uri uri("<connection string URI>");
20 mongocxx::options::client client_opts;
21 client_opts.apm_opts(apm_opts);
22
23 mongocxx::client client{uri, client_opts};
24
25 // Perform database operations
26
27 std::cout << "Observed " << command_started_events << " command started events" << std::endl;
28
29 return 0;
30}

find コマンドを実行すると、コードによって次のサンプル出力のようなメッセージが表示されます。

Command started: find (request_id: 3)

C++ドライバーは、接続したインスタンスまたはクラスターの状態が変更されたときに、SDAM イベントとも呼ばれるトポロジーイベントを作成します。例、ドライバーは新しい接続を確立するか、クラスターが新しい プライマリノード を選択したときに、イベントを作成します。

トポロジーイベントの詳細については、サーバー マニュアルの レプリケーションガイドを参照してください。

SDAM イベントは、アプリケーションでサブスクライブすることで、その詳細にアクセスできます。 SDAMイベントをサブスクライブするには、APM 構成を保存するための mongocxx::options::apmオブジェクトを作成します。次に、オプションを mongocxx::clientオブジェクトに渡します。 SDAM モニタリング動作を設定するには、 mongocxx::options::apmオブジェクトで次のメソッドを呼び出します。

方式
説明

on_server_changed()

サーバーの説明が変更されたときにクライアントが応答する方法を指定します。これにより、 mongocxx::events::server_changed_event

on_server_opening()

新しいサーバーがトポロジーに追加され、次が生成されたときのクライアントの応答方法を指定します。 mongocxx::events::server_opening_event

on_server_closed()

サーバーがトポロジーから削除されたときにクライアントが応答する方法を指定します。 mongocxx::events::server_closed_event

on_topology_changed()

トポロジーの説明が変更されたときにクライアントが応答する方法を指定します。これにより、 mongocxx::events::topology_changed_event

on_topology_opening()

ドライバーが最初にクラスターに接続したときにクライアントが応答する方法を指定します。 mongocxx::events::topology_opening_event

on_topology_closed()

ドライバーがクラスターから切断されたときにクライアントが応答する方法を指定します。 mongocxx::events::topology_closed_event

on_heartbeat_started()

ハートビートがサーバーに送信されたときにクライアントが応答する方法を指定します。サーバーは mongocxx::events::heartbeat_started_event

on_heartbeat_succeeded()

ハートビートが成功したときにクライアントが応答する方法を指定します。これにより、 mongocxx::events::heartbeat_succeeded_event

on_heartbeat_failed()

ハートビートが失敗した場合にクライアントが応答する方法を指定します。これにより mongocxx::events::heartbeat_failed_event

次のコードは、次のアクションを実行してサーバーオープン イベントを監視します。

  • mongocxx::options::apmオブジェクトで on_server_opening() メソッドを呼び出す

  • 各サーバーのホストとポートを出力するコールバックを on_server_opening() に渡します

  • 次のオプションを使用してクライアントを構成します

1#include <iostream>
2#include <mongocxx/client.hpp>
3#include <mongocxx/instance.hpp>
4#include <mongocxx/uri.hpp>
5#include <mongocxx/options/apm.hpp>
6
7int main() {
8 mongocxx::instance instance{};
9
10 int server_opening_events = 0;
11
12 mongocxx::options::apm apm_opts;
13 apm_opts.on_server_opening([&server_opening_events](const mongocxx::events::server_opening_event& event) {
14 server_opening_events++;
15 std::cout << "Server opening: " << event.host() << ":" << event.port() << std::endl;
16 });
17
18 mongocxx::uri uri("<connection string URI>");
19 mongocxx::options::client client_opts;
20 client_opts.apm_opts(apm_opts);
21
22 mongocxx::client client{uri, client_opts};
23
24 // Perform database operations
25
26 std::cout << "Observed " << server_opening_events << " server opening events" << std::endl;
27
28 return 0;
29}

データベース操作 を実行すると、ドライバーはサーバーへの新しい接続を確立し、サブスクライブはサーバーを開くイベントを記録します。このコードでは、次のようなメッセージが出力されます。

Server opening: <host>:<port number>

イベントクラスオブジェクトをパラメーターとして受け入れるコールバック関数を作成することで、イベントのモニタリングをサブスクライブできます。次の表は、各イベントクラスの名前、タイプのAPIドキュメントへのリンク、イベントが公開されるタイミングを示しています。

イベント ハンドラー クラス
説明

コマンドが開始されたときに作成されます。

コマンドが成功したときに作成されます。

コマンドが失敗した場合に作成されます。

サーバーのタイプがセカンダリからプライマリに変更された場合など、サーバーの説明が変更されたときに作成されます。

新しいサーバーがトポロジーに追加されたときに作成されます。

既存のサーバーがトポロジーから削除されたときに作成されます。

新しいプライマリの選挙など、トポロジーの説明が変更されたときに作成されます。

ドライバーが最初にクラスターに接続したときに作成されます。

ドライバーがクラスターから切断されたときに作成されます。

サーバーモニターがサーバー にhelloコマンドを送信したときに作成されサーバー。 このアクションは、ハートビートと呼ばれます。

ハートビートが成功したときに作成されます。

ハートビートが失敗したときに作成されます。

各モニタリング サブスクライブのタイプとイベントメソッドに関する情報は、 APIドキュメントのアプリケーション パフォーマンス モニタリングセクションを参照してください。

このガイドで説明するクラスとメソッドについて詳しくは、次のAPIドキュメントを参照してください。

戻る

ログ記録

項目一覧