sql >> データベース >  >> NoSQL >> MongoDB

プロアクティブなMongoDBモニタリング(Developer Studio / Advisorsの角度)

    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ダッシュボードに表示されるカスタムアドバイザを作成できます。もちろん、アラートも表示されます。

    今日はこれですべてです!


    1. Mongo更新配列要素(.NETドライバー2.0)

    2. C#MongoDB個別クエリ構文

    3. コマンドラインからHerokuがホストするRedisに安全に接続するにはどうすればよいですか?

    4. MongoDBを選ぶ理由–2022年にMongoDBを学ぶ10の理由