Overview
このガイドでは、 MongoDB C++ドライバーでモニタリングを設定および構成する方法を学習できます。
モニタリングには、実行中のプログラムのアクティビティに関する情報を収集することが含まれます。この情報はアプリケーションパフォーマンス マネジメント ライブラリで使用できます。
C++ドライバーをモニタリングすると、ドライバーのリソース使用量とパフォーマンスを理解できます。この情報は、アプリケーションの設計とデバッグ時に情報に基づいた決定を行う際に役立ちます。
このガイドでは、次のタスクを実行する方法について説明しています。
Tip
このガイドでは、コード内でドライバーのアクティビティに関する情報を使用する方法について説明します。ドライバーでイベントをレコード方法については、 「ドライバー イベントのログ」ガイドを参照してください。
コマンド イベントの監視
C++ドライバーは、クライアントがデータベースコマンド を実行するときにコマンド イベントを作成します。例、 、find、insert、delete、count コマンドでは、コマンド イベントが生成されます。これらのコマンドは、ドライバーの標準的な作成、読み取り、更新、または削除操作を実行中するか、データベースコマンドを直接使用して開始できます。
Tip
データベースコマンドの詳細については、 「コマンドの実行」ガイドを参照してください 。
アプリケーションでコマンド イベントをサブスクライブすることで、コマンド イベントの詳細にアクセスできます。コマンドイベントをサブスクライブするには、アプリケーション パフォーマンス モニタリング(APM)構成を保存するための mongocxx::options::apmオブジェクトを作成します。次に、オプションを mongocxx::clientオブジェクトに渡します。コマンドモニタリング動作を設定するには、 mongocxx::options::apmオブジェクトで次のメソッドを呼び出します。
方式 | 説明 |
|---|---|
| コマンド開始時にクライアントが応答する方法を指定します。これにより |
| コマンドが成功し なかった 場合にクライアントが応答する方法を指定します。これにより |
| コマンドが成功したときにクライアントが応答する方法を指定します。これにより |
次のコードは、次のアクションを実行して、 コマンドが開始された イベントを監視します。
mongocxx::options::apmオブジェクトでon_command_started()メソッドを呼び出す各コマンドの名前とリクエストIDを出力するコールバックを
on_command_started()に渡します次のオプションを使用してクライアントを構成します
<iostream> <mongocxx/client.hpp> <mongocxx/instance.hpp> <mongocxx/uri.hpp> <mongocxx/options/apm.hpp>
int main() { mongocxx::instance instance{}; int command_started_events = 0; mongocxx::options::apm apm_opts; apm_opts.on_command_started([&command_started_events](const mongocxx::events::command_started_event& event) { command_started_events++; std::cout << "Command started: " << event.command_name() << " (request_id: " << event.request_id() << ")" << std::endl; }); mongocxx::uri uri("<connection string URI>"); mongocxx::options::client client_opts; client_opts.apm_opts(apm_opts); mongocxx::client client{uri, client_opts}; // Perform database operations std::cout << "Observed " << command_started_events << " command started events" << std::endl; return 0;}find コマンドを実行すると、コードによって次のサンプル出力のようなメッセージが表示されます。
Command started: find (request_id: 3)サーバー検出とモニタリング(SDAM)イベントの監視
C++ドライバーは、接続したインスタンスまたはクラスターの状態が変更されたときに、SDAM イベントとも呼ばれるトポロジーイベントを作成します。例、ドライバーは新しい接続を確立するか、クラスターが新しい プライマリノード を選択したときに、イベントを作成します。
トポロジーイベントの詳細については、サーバー マニュアルの レプリケーションガイドを参照してください。
SDAM イベントは、アプリケーションでサブスクライブすることで、その詳細にアクセスできます。SDAMイベントをサブスクライブするには、APM 構成を保存するための mongocxx::options::apmオブジェクトを作成します。次に、オプションを mongocxx::clientオブジェクトに渡します。SDAM モニタリング動作を設定するには、 mongocxx::options::apmオブジェクトで次のメソッドを呼び出します。
方式 | 説明 |
|---|---|
| サーバーの説明が変更されたときにクライアントが応答する方法を指定します。これにより、 |
| 新しいサーバーがトポロジーに追加され、次が生成されたときのクライアントの応答方法を指定します。 |
| サーバーがトポロジーから削除されたときにクライアントが応答する方法を指定します。 |
| トポロジーの説明が変更されたときにクライアントが応答する方法を指定します。これにより、 |
| ドライバーが最初にクラスターに接続したときにクライアントが応答する方法を指定します。 |
| ドライバーがクラスターから切断されたときにクライアントが応答する方法を指定します。 |
| ハートビートがサーバーに送信されたときにクライアントが応答する方法を指定します。サーバーは |
| ハートビートが成功したときにクライアントが応答する方法を指定します。これにより、 |
| ハートビートが失敗した場合にクライアントが応答する方法を指定します。これにより |
次のコードは、次のアクションを実行してサーバーオープン イベントをモニターします。
mongocxx::options::apmオブジェクトでon_server_opening()メソッドを呼び出す各サーバーのホストとポートを出力するコールバックを
on_server_opening()に渡します次のオプションを使用してクライアントを構成します
<iostream> <mongocxx/client.hpp> <mongocxx/instance.hpp> <mongocxx/uri.hpp> <mongocxx/options/apm.hpp>
int main() { mongocxx::instance instance{}; int server_opening_events = 0; mongocxx::options::apm apm_opts; apm_opts.on_server_opening([&server_opening_events](const mongocxx::events::server_opening_event& event) { server_opening_events++; std::cout << "Server opening: " << event.host() << ":" << event.port() << std::endl; }); mongocxx::uri uri("<connection string URI>"); mongocxx::options::client client_opts; client_opts.apm_opts(apm_opts); mongocxx::client client{uri, client_opts}; // Perform database operations std::cout << "Observed " << server_opening_events << " server opening events" << std::endl; return 0;}データベース操作 を実行すると、ドライバーはサーバーへの新しい接続を確立し、サブスクライブはサーバーを開くイベントを記録します。このコードでは、次のようなメッセージが出力されます。
Server opening: <host>:<port number>イベントの説明
イベントクラスオブジェクトをパラメーターとして受け入れるコールバック関数を作成することで、イベントのモニタリングをサブスクライブできます。次の表は、各イベントクラスの名前、タイプのAPIドキュメントへのリンク、イベントが公開されるタイミングを示しています。
イベント ハンドラー クラス | 説明 |
|---|---|
コマンドが開始されたときに作成されます。 | |
コマンドが成功したときに作成されます。 | |
コマンドが失敗した場合に作成されます。 | |
サーバーのタイプがセカンダリからプライマリに変更された場合など、サーバーの説明が変更されたときに作成されます。 | |
新しいサーバーがトポロジーに追加されたときに作成されます。 | |
既存のサーバーがトポロジーから削除されたときに作成されます。 | |
新しいプライマリの選挙など、トポロジーの説明が変更されたときに作成されます。 | |
ドライバーが最初にクラスターに接続したときに作成されます。 | |
ドライバーがクラスターから切断されたときに作成されます。 | |
サーバーモニターがサーバー に | |
ハートビートが成功したときに作成されます。 | |
ハートビートが失敗したときに作成されます。 |
各モニタリング サブスクライブのタイプとイベントメソッドに関する情報は、 APIドキュメントのアプリケーション パフォーマンス モニタリングセクションを参照してください。
API ドキュメント
このガイドで説明するクラスとメソッドについて詳しくは、次のAPIドキュメントを参照してください。