MongoDBのloggingモジュールについて説明します。
今日は、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ログモジュールの詳細な情報は、スクリプトホームの他の関連記事に注意してください!.
関連
-
一括バックアップ・リストア インポート・エクスポート MongoDBデータ方式
-
macシステムでのmongoDBデータベースのインストールと設定
-
mongodbでコネクションとログをクリアする正しい方法
-
Aliクラウドサーバーにmongodbを導入する詳細な流れ
-
プロファイルを使用してMongoDBで遅いクエリを分析する手順
-
2021年最新版Windows 10システムMongoDBデータベースインストールと構成環境
-
MongoDBを循環型キュー方式で詳しく解説
-
MongoDB監視ツール mongostat と mongotop の使用方法
-
MongoDBの条件付きクエリとソートについて説明します。
-
MongoDBデータベースのインストールとデプロイメント、および警告の最適化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン