ClusterControlには、データベース、レプリケーション、およびオペレーティングシステムに関連する多くのメトリックがあります。概要のopscounterを使用して、データベース内で実行されるプロセスを監視することもできます。
ClusterControlでエージェントベースの監視を有効にすると、時系列データベースのプロメテウスデータベースと、監視対象ノードのエクスポーター(mongoとノードエクスポーターの両方)が自動的にインストールされます。すべてのセットアップが完了すると、クラスターの概要、システムの概要、およびMongoDBデータベースの監視に使用できるMongoDB(MongoDBサーバーとレプリケーション)のメトリックを備えたダッシュボードが利用できるようになります。
ClusterControlには、データベース内のセッションを監視するために使用できるOpsMonitorもあります。
上記とは別に、ClusterControlには、DeveloperStudioを介してカスタムアドバイザを作成する機能があります。このブログでは、MongoDBに関連するDeveloperStudioとAdvisorsを確認します。
DeveloperStudioを利用する
ClusterControlはDeveloperStudioを提供するため、データベースパフォーマンスのベストプラクティスに基づいてアドバイザリを作成するMongoDBのトピックに関連するカスタムアドバイザを作成できます。 MongoDBでカスタムアドバイザのスクリプトを作成するには、すべてのアドバイザがjavascriptで記述されているため、javascriptプログラミング言語の知識が必要です。[管理]-> [Developer Studio]からDeveloperStudioにアクセスすると、ページが表示されます。以下に示すように:
[新規]ボタンをクリックして、新しいアドバイザスクリプトを作成できます。以下に示すように、ファイル名を入力するためのダイアログが表示されます。
に保存される、単純なlock.jsスクリプトを作成します。パスs9s/mongodb/connections。スクリプトは、MongoDBのグローバルロックに関連する情報を収集します。ロックはまだ保留中/まだ解放されていないため、MongoDBでは高いグローバルロックの数が問題になります。以下は、javascriptのグローバルロックのサンプルです:
#include "common/helpers.js"
#include "cmon/io.h"
#include "cmon/alarms.h"
var DESCRIPTION="This advisor collects the number of global locks every minute and"
" notifies you if the number of locks exceeds 90%."
" This number can indicate a possible concurrency issue if it’s consistently high."
" This can happen if a lot of requests are waiting for a lock to be released..";
var WARNING_THRESHOLD=10;
var TITLE="Global lock used";
var ADVICE_WARNINGS="In the past 5 minutes more than 90% of "
" there could be concurrently issue in the database.";
var ADVICE_OK="The percentage of global lock is satisfactory." ;
function main(hostAndPort) {
if (hostAndPort == #N/A)
hostAndPort = "*";
var hosts = cluster::mongoNodes();
var advisorMap = {};
var result= [];
var msg = "";
var endTime = CmonDateTime::currentDateTime();
var startTime = endTime - 10 * 60;
for (i = 0; i < hosts.size(); i++)
{
host = hosts[i];
if(hostAndPort != "*" && !hostMatchesFilter(host,hostAndPort))
continue;
if(host.hostStatus() != "CmonHostOnline")
continue;
var advice = new CmonAdvice();
stats = host.mongoStats(startTime, endTime);
total_global_lock = stats.toArray("globalLock.currentQueue.total");
if (total_global_lock * 100 < WARNING_THRESHOLD)
{
advice.setSeverity(Warning);
msg = ADVICE_WARNING;
}
if (advice.severity() <= 0) {
advice.setSeverity(Ok);
}
advice.setHost(host);
advice.setTitle(TITLE);
advice.setAdvice(msg);
advisorMap[i]= advice;
}
return advisorMap;
}
スクリプトを保存し、コンパイルして実行できます。スクリプトが実行される毎分、時間に基づいて、DeveloperStudioでスクリプトをスケジュールできます。
アドバイザは、Developer Studioで作成したスクリプトの状態を可視化します。スクリプトが実行され、グローバルロックの現在の状態が定期的にチェックされます。状態が定義したしきい値を下回っている場合、出力はOKになりますが、現在のグローバルロックがしきい値を上回っている場合は警告が表示されます。下のスクリーンショットで、使用されているグローバルロックがアドバイザに表示され、現在状態はOKであることがわかります。
Developer StudioとAdvisorsを使用すると、要件に基づいてClusterControlダッシュボードに表示されるカスタムアドバイザを作成できます。もちろん、アラートも表示されます。
今日はこれですべてです!