Docker mongoDB 4.2.1 をインストールし、Springboot ログを収集する詳細な手順

Docker mongoDB 4.2.1 をインストールし、Springboot ログを収集する詳細な手順

1: dockerにmongodbをインストールする

ステップ1: dockerにmongodbをインストールする

[root@iZbp1gp1t778obaz5m8vk8Z /]# docker 検索 mongo
 
[root@iZbp1gp1t778obaz5m8vk8Z /]# docker pull mongo:latest
 
リポジトリ docker.io/library/mongo をプルしようとしています... 
最新: docker.io/library/mongo からプル
f22ccc0b8772: プル完了 
3cf8fb62ba5f: プル完了 
e80c964ece6a: プル完了 
329e632c35b3: プル完了 
3e1bd1325a3d: プル完了 
4aa6e3d64a4a: プル完了 
035bca87b778: プル完了 
874e4e43cb00: プル完了 
08cb97662b8b: プル完了 
f623ce2ba1e1: プル完了 
f100ac278196: プル完了 
6f5539f9b3ee: プル完了 
ダイジェスト: sha256:02e9941ddcb949424fa4eb01f9d235da91a5b7b64feb5887eab77e1ef84a3bad
ステータス: docker.io/mongo:latest の新しいイメージをダウンロードしました
 
[root@iZbp1gp1t778obaz5m8vk8Z /]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
docker.io/mongo 最新 3068f6bb852e 5 日前 493 MB
 
 インストールするバージョンを指定します。最新バージョンをインストールしないことをお勧めします。これは非常に悪いです。私はこのバージョンが好きです [root@iZbp1gp1t778obaz5m8vk8Z ~]$ docker pull mongo:4.2.1

ステップ2: dockerでmongodbを起動する

[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker run -itd --name mongo --restart=on-failure:10 -d -m 1G --memory-swap 4G -p 27017:27017 -v /data/mongodb:/data/db mongo 
1bcf117db0a8e86840a1acac769338053e8dff25a41bd1488d7a274ea171371a
[ルート@iZbp1gp1t778obaz5m8vk8Z mongodb]# 
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
1bcf117db0a8 mongo "docker-entrypoint..." 7 秒前 7 秒前にアップ 0.0.0.0:27017->27017/tcp mongo
 
ここでは、ログインせずに新しい docker ユーザーに表示されるように設定します。起動が完了した後のパラメータについては、前の記事を参照してください。アカウントの調整を始めましょう
これはバージョン 4.2.1 の起動です [root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker run -itd --name mongo --restart=on-failure:10 -d -m 1G --memory-swap 4G -p 27017:27017 \
-v /data/mongodb:/data/db \
mongo:4.2.1 --auth
[ルート@iZbp1gp1t778obaz5m8vk8Z mongodb]# 
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
1bcf117db0a8 mongo "docker-entrypoint..." 7 秒前 7 秒前にアップ 0.0.0.0:27017->27017/tcp mongo
 
ここでは、ログインせずに新しい docker ユーザーに表示されるように設定します。起動が完了した後のパラメータについては、前の記事を参照してください。アカウントの調整を始めましょう

《共通dockerパラメータの操作方法》

ステップ3: mongodbでユーザー情報を構成する

MongoDbのアカウント情報を作成します [root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker exec -it mongo mongo admin
MongoDB シェル バージョン v4.4.2
接続先: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
暗黙的なセッション: session { "id" : UUID("a2d4a27c-a9dc-4af4-90cb-233e41394d51") }
MongoDB サーバー バージョン: 4.4.2
MongoDB シェルへようこそ。
対話型ヘルプを表示するには、「help」と入力してください。
より包括的なドキュメントについては、
	参考:
ご質問はMongoDB開発者コミュニティフォーラムをご覧ください
	https://community.mongodb.com
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
ユーザーが正常に追加されました:
	「ユーザー」:「管理者」、
	「役割」: [
		{
			「ロール」:「userAdminAnyDatabase」、
			「db」:「管理者」
		}
	]
}
> db.auth('admin', '123456')
1
> db.grantRolesToUser("admin", [ { role: "readWrite", db: "admin" } ])
MongoDbのアカウント情報を作成します。認証が必要ない場合はこの手順をスキップできますが、本番環境では実行しないでください。# dockerのコマンド操作インターフェースに接続します [root@izwz99z5o9dc90keftqhlrz ~] # docker exec -it mongo mongo admin
 
# パスワードが 123456 の admin という名前のユーザーを作成します。
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
 
# 上記で作成したユーザー情報を使用して接続を試みます。
> db.auth('admin', '123456')
 
# 管理者権限、読み取りおよび書き込み権限を付与する> db.grantRolesToUser("admin", [ { role: "readWrite", db: "admin" } ])
 
上記は私が初めて入った時のものです
2 回目に入力するときは、ルールに従う必要があります。最初にガイド データベースを入力し、次にユーザーを追加する必要があります。そうしないと、どこにユーザーを追加したかわかりません。> ガイドの使用
#または、直接作成するときに所有者権限を付与します> db.createUser({user:"guides",pwd:"123456",roles:[{role:"dbOwner",db:"guides"}]})
#このアカウントに接続> db.auth('guides','123456')
#このアカウントを使用して、ガイド データベースにデータを書き込みます - このドキュメント> db.guides.insert({"name":"liuxing", "age":31})

2: Springbootはmongodbにログを収集します

収集ログは特に粗い

ステップ1: pom.xmlに構成を追加する

<!-- mongodb データベース操作 -->
<依存関係>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</依存関係>

ステップ2: application.ymlで接続を構成する

#Spring Bootにmongodbの場所を知らせます。認証は不要です。--authはユーザー名とパスワードを必要としません。Springを覚えておいてください。 
 データ:
 モンゴDB:
  ホスト: 47.110.57.1​​15
  ポート: 27017
  認証データベース: ガイド
  データベース: ガイド
  ユーザー名: ガイド
  パスワード: '123456'
  最大接続アイドル時間: 1000
  ホストあたりの最大接続数: 200
  最大待機時間: 60000
  最大接続寿命: 0
  接続タイムアウト: 1000
  ソケットタイムアウト: 2000
 
認証データベース 4.0 以上: admin と書かないでください。または 4.2.1
認証データベース: ガイド

ステップ3: AOPスライスログを取得する

パッケージ com.zhx.guides.assistant.dto;
 
com.zhx.guides.assistant.util.object.TimeHelper をインポートします。
 
java.io.Serializable をインポートします。
java.util.Date をインポートします。
 
/**
 * @日付作成時間: 2020-12-17 14:33
 * @Author 著者名: Liux
 * @バージョン 1.0
 * @Copyright 著作権者
 * @Directionクラスの説明 */
パブリッククラスHttpRequestLogはSerializableを実装します{
 
 パブリック最終静的文字列 collectName = "guides" ;
 
 プライベート文字列 url ;
 プライベート文字列 httpMethod ;
 プライベート文字列クラス名;
 プライベート文字列メソッド名;
 プライベート文字列 ip ;
 プライベート文字列 requestParam ;
 プライベート日付 nowTime = TimeHelper.getCurrentDate();
 
 .... 取得セット省略}
パッケージ com.zhx.guides.assistant.web.aspect;
 
com.alibaba.fastjson.JSONObject をインポートします。
com.zhx.guides.assistant.dto.HttpRequestLog をインポートします。
org.aspectj.lang.JoinPoint をインポートします。
org.aspectj.lang.ProceedingJoinPoint をインポートします。
org.aspectj.lang.annotation.* をインポートします。
org.slf4j.Logger をインポートします。
org.slf4j.LoggerFactory をインポートします。
org.springframework.beans.factory.annotation.Autowired をインポートします。
org.springframework.data.mongodb.core.MongoTemplate をインポートします。
org.springframework.stereotype.Component をインポートします。
org.springframework.web.context.request.RequestContextHolder をインポートします。
org.springframework.web.context.request.ServletRequestAttributes をインポートします。
 
javax.servlet.http.HttpServletRequest をインポートします。
 
/**
 * @クラス WebLogAspect
 * @バージョン 1.0
 * @日付作成時間: 2020-03-03 10:05
 * @Copyright 著作権は会社が所有します
 * @Directionクラスの説明 */
@側面
@成分
パブリッククラス WebLogAspect {
 
 オートワイヤード
 プライベート MongoTemplate mongoTemplate;
 
 プライベート最終静的 Logger ロガー = LoggerFactory.getLogger(WebLogAspect.class);
 
 /** コントローラー パッケージで定義されているすべてのリクエストをエントリ ポイントとして取得します */
 @Pointcut("実行(public * com.zhx.guides.assistant.interfaces.controller..*.*(..))")
 パブリック void webLog() {}
 
 /**
  * ポイントカット前のウィービング * @param joinPoint
  * @throws スロー可能
  */
 @Before("webLog()")
 パブリック void doBefore(JoinPoint joinPoint) throws Throwable {
  // リクエストログの印刷を開始します。ServletRequestAttributes attribute = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  HttpServletRequest リクエスト = attribute.getRequest();
 
  HttpRequestLog を新しい HttpRequestLog() に追加します。
  リクエストの URL を GET します。
  リクエストのログにメソッドを設定します。
  httpRequestLog.setClassName( joinPoint.getSignature().getDeclaringTypeName() );
  httpRequestLog.setMethodName( joinPoint.getSignature().getName());
  リクエストのIPアドレスを取得します。
 
  // リクエスト関連のパラメータを印刷します logger.info("======================== Start ==========================");
  // リクエスト URL を印刷
  logger.info("URL: {}", httpRequestLog.getUrl() );
  // HTTP メソッドを印刷
  logger.info("HTTP メソッド: {}", httpRequestLog.getHttpMethod());
  // コントローラー呼び出しと実行メソッドの完全なパスを出力します。logger.info("Class Method : {}.{}", httpRequestLog.getClassName() , httpRequestLog.getMethodName());
  // 要求されたIPを印刷する
  logger.info("IP: {}", httpRequestLog.getIp() );
  //印刷要求の入力パラメータを試してください{
   オブジェクト requestParam = joinPoint.getArgs();
   リクエストログにリクエストパラメータを設定します。
   logger.info("パラメータ: {}", httpRequestLog.getRequestParam());
  }catch (例外 e){
   logger.info("パラメータの印刷に失敗しました。例外: {}", e.getMessage());
  }ついに {
   httpRequestLog.setClassName( null );
   try{mongoTemplate.save( httpRequestLog 、 HttpRequestLog.collectName );}catch (例外 e){}
  }
 }
 
 /**
  * ポイントカットの後に織り込む * @throws Throwable
  */
 @After("webLog()")
 パブリック void doAfter() は Throwable をスローします {
  logger.info("======================== 終了 ==========================");
 }
 
 /**
  * ラップアラウンド * @param proceedingJoinPoint
  * @戻る
  * @throws スロー可能
  */
 @Around("webLog()")
 パブリックオブジェクトdoAround(ProceedingJoinPoint proceedingJoinPoint)はThrowableをスローします{
  長い開始時間 = System.currentTimeMillis();
  オブジェクト結果 = proceedingJoinPoint.proceed();
  // パラメータを出力します logger.info("戻り値: {}", JSONObject.toJSONString(result));
  // 実行時間 logger.info("Time: {} ms", System.currentTimeMillis() - startTime);
  結果を返します。
 }
 
}
パッケージ com.zhx.guides.assistant.util.object;
 
org.apache.commons.lang.StringUtils をインポートします。
 
java.util.Date をインポートします。
 
/**
 * @クラス TimeHelper
 * @バージョン 1.0
 * @日付作成時間: 2018/12/21 09:26
 * @Copyright 著作権者
 * @Directionクラスの説明 */
パブリッククラス TimeHelper { 
 
 /**
  *現在の時刻* @return
  */
 パブリック静的日付 getCurrentDate(){
  カレンダーcalendar = Calendar.getInstance();
  カレンダー.getTime() を返します。
 }
 
}

3: ログの保存の効果を確認する

: 使用されている mongodb のバージョン: 4.2.1 に注意してください。順番に設定して使用してください。

最新バージョンをご利用の場合、各種権限が通らないなどの問題が発生する場合がありますので、4.2.1 安定版に切り替えてください。最新バージョンの使用は、モルモットになるようなものです。

Docker mongoDB 4.2.1 のインストールと springboot ログの収集に関するこの記事はこれで終わりです。Docker mongoDB のインストールと springboot ログの収集の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux 上で docker を使用して mongodb をインストールする方法の詳細な説明
  • Dockerを使用して最新バージョンのMongoDBをインストールする方法
  • DockerでMongoに接続するためのMongo4.2とクライアントツールをインストールします。

<<:  VUE 入門 イベント処理の学習

>>:  MySQL の分離レベルの包括的な分析

推薦する

Vue の計算プロパティとプロパティリスニングについての簡単な説明

目次1. 計算プロパティ構文: 1. 省略形:文法: 2. 文章を完成させる: 2. モニタリング(...

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリと my-default.ini がなく、サービスが起動できない問題の簡単な解決方法 (問題概要)

私は SQL の初心者で、オープンソースのインストールは非常に簡単だと思っていましたが、その過程でい...

DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する

Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...

Linux での fuser コマンドの使用法の詳細な説明

説明する: fuser は、現在ディスク上のファイル、マウント ポイント、さらにはネットワーク ポー...

フロントエンドAIカットのコツ(体験談)

AI 画像の切り取りは PS と連携する必要があります。まず、スライスするレイヤーを選択し、それを...

CSS を使用して固定左列と適応右列の 2 列レイアウトを実現する 4 つの方法

1. フロート+オーバーフロー:非表示このメソッドは主にオーバーフローを通じて BFC をトリガーし...

この記事では、6つの負荷分散技術の実装方法をまとめます(要約)

ロード バランシングは、サーバー クラスタの展開でよく使用されるデバイスです。マシンのパフォーマンス...

ウェブサイト製品設計の参考となるいくつかの原則

以下の分析は製品設計原則に関するものですが、そのほとんどはウェブサイト製品に基づいているため、ユーザ...

Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートしま...

MySQL が innobackupex を使用して接続サーバーをバックアップできない場合の解決策

innobackupex を使用してバックアップする際に MySQL がサーバーに接続できない場合は...

MySQL 5.7 mysql コマンドラインクライアントの使用コマンドの詳細

MySQL 5.7コマンドを使用するMySQLコマンドラインクライアント1. パスワードを入力してく...

Windows 10 での MySQL 5.7.21 インストーラのインストール グラフィック チュートリアル

MySQLをインストールしてメモしておきます。うまくインストールできるか分かりませんが、試してみます...

MySQLとRedisキャッシュ間の同期ソリューションについての簡単な説明

目次1. ソリューション 1 (UDF)デモケース2. ソリューション2(binlogの解析)キャナ...

テーブル関連の配置とJavascript操作テーブル、tr、td

適切に機能するテーブル プロパティ設定:コードをコピーコードは次のとおりです。 <テーブル セ...

純粋な CSS で「テキストオーバーフローの切り捨てと省略」を実装するいくつかの方法

私たちの日常的な開発作業では、テキストのオーバーフロー、切り捨て、省略は、考慮する必要がある非常に一...