1. ホーム
  2. データベース
  3. モンゴルディーブ

MongoDBのloggingモジュールについて説明します。

2022-01-23 04:26:21

    今日は、MongoDBのloggingモジュールについて簡単に勉強して、そのドキュメント記事を書きました。

01 MongoDBのロギングコンポーネントの種類とロギングレベル

    どのデータベースにもロギングモジュールがあり、MongoDBも例外ではありません。通常、データベースのログに記録されるのは、そのデータベースの接続情報、ストレージ情報、ネットワーク情報、インデックス情報、クエリ情報などですが、MongoDBのログは、そのデータベースの接続情報、ストレージ情報、ネットワーク情報、インデックス情報、クエリ情報を記録します。MongoDBのバージョン3.0から、MongoDBはログレベルとログのコンポーネントの概念を導入して、DBAとして、一番気になるのは遅いクエリログと接続ログであるべきです。

    MongoDBでは、以下のコマンドですべてのログコンポーネントの種類と対応するログレベルを取得することができます。

db.getLogComponents()

PRIMARY> db.getLogComponents()
{
        "verbosity" : 0,
        "accessControl" : {
                "verbosity" : -1
        },
        "command" : {
                "verbosity" : -1
        },
        "control" : {
                "verbosity" : -1
        },
        "executor" : {
                "verbosity" : -1
        },
        "geo" : {
                "verbosity" : -1
        },
        "index" : {
                "verbosity" : -1
        },
        "network" : {
                "verbosity" : -1,
                "asio" : {
                        "verbosity" : -1
                },
                "bridge" : {
                        "verbosity" : -1
                }
        },
        "query" : {
                "verbosity" : -1
        },
        "replication" : {
                "verbosity" : -1
        },
        "sharding" : {
                "verbosity" : -1
        },
        "storage" : {
                "verbosity" : -1,
                "journal" : {
                        "verbosity" : -1
                }
        },
        "write" : {
                "verbosity" : -1
        },
        "ftdc" : {
                "verbosity" : -1
        }
}

     ここで、実行結果についてメモしておく必要がある。

     まず、返される結果の冗長度の合計は0です。対応する値は1~5で、数字が大きくなるほどログの詳細度が高くなり、5だとMongoDBはデバッグログをすべて出力するので、非常に大きなサイズになります。

     実行結果には、コマンド、コントロール、エクゼキュータ、クエリ、レプリケーション、シャーディングなど、多くのサブプロジェクトが含まれていることがわかります。これらのサブプロジェクトはロギングコンポーネントとも呼ばれ、このタイプのロギングを表し、例えば、シャーディングはシャーディング関連のログを表します。各サブプロジェクトはまた、現在のコンポーネントのログレベルを表す冗長性を持っています。これは、上記のverbosityと同じ値を取り、0,1,2,3,4,5を取ることができます。

     上記の例では

1.storageはstorage.jouralの親ディレクトリです。

2. storage.journalのジャーナルレベルは-1、つまりstorageのジャーナルレベルを継承しています。

3. storage.journal もジャーナルレベルが -1 で、グローバルジャーナルレベルを継承しています。

4. グローバルロギングレベルは0です。つまり、storageとstorage.journalのロギングレベルも0です。

02 ジャーナルコンポーネントのジャーナルレベルを設定する

      読みやすくするために、個々のログコンポーネントのログレベルをより明確に出力することがありますが、その場合、次のコマンドでログコンポーネントのログレベルを設定することができます。

方法1:db.setLogLevel()

db.setLogLevel()

以下の共通メソッドを持つ。

db.setLogLevel( <レベル , <コンポーネント )

level はレベルで 0 から 5 までの値を取り、component はコンポーネント名です。accessControl, command, control, ftdc, geo, index, network, query, replication, recovery, sharding, storage, storage.journal, transaction, write などの値を取ることができます。

方法2:MongoDBコマンドを実行する

このコマンドは、単一のコンポーネントのログレベルを設定することしかできません。複数のコンポーネントのログレベルを一度に設定したい場合は、以下の方法を使用します。

db.adminCommand( {
   setParameter: 1,
   logComponentVerbosity: {
      verbosity: { verbosity: 1,
      query: { verbosity: 2 },
      storage: {
         verbosity: 2,
         journal: {
            verbosity: 1
         }
      }
   }
} )

上の例のメソッドである

は、グローバルログレベルを 1 に設定します。

クエリのロギングレベルを2に設定します。

ストレージのログレベルを2に設定します。

storage.journalのジャーナルレベルを1に設定します。

方法3:設定ファイルへの書き込み

このコマンドを実行すると、設定ファイルに次のように書き込むことと同じになります。

systemLog:
    verbosity: 1
    component:
        query:
            verbosity: 2
        storage:
            verbosity: 2
            journal:
                verbosity: 1

方法4:起動時に、パラメータを設定する

また、以下のようなコマンドで、mongod起動時に特定のロギングコンポーネントのロギングレベルを設定することも可能です。

mongod --setParameter "logComponentVerbosity={command: 3}"

03 大容量のログデータの取り扱い

    ログのクリーニングを長期間行わなかった場合、ログのデータ量が非常に大きくなることがありますが、この場合、2つの方法でログをロールアップすることができます。

方法1

MongoDB サービスを直接終了させてから、古いログファイルを mv して MongoDB サービスを開始すると、新しい mongodb.log が生成されます。

明らかに、この方法は十分にエレガントではありません。

方法2

ログロールの方法を使って、MongoDBのコマンドライン内で直接、次のように入力します。

use admin // switch to admin database
db.runCommand({logRotate:1})

この方法は、mongodbサービスをシャットダウンせずにログファイルを切り替えるコマンドを使用するもので、推奨される方法です。

もちろん、このコマンドを定期的に人が手動で実行しなければならないほどエレガントとは思えないので、crontabを使って、ログファイルのローテーションを目的に1日1回、一定時間ごとに実行するようにすればよいでしょう。

上記は、MongoDBログモジュールの詳細な説明であり、MongoDBログモジュールの詳細な情報は、スクリプトホームの他の関連記事に注意してください!.