Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解

 更新时间:2020年12月29日 09:23:10   作者:悟能的师兄  
这篇文章主要介绍了Docker mongoDB 4.2.1 安装并收集springboot日志,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一:docker安装好mongodb

第一步:docker安装好mongodb

[root@iZbp1gp1t778obaz5m8vk8Z /]# docker search mongo
 
[root@iZbp1gp1t778obaz5m8vk8Z /]# docker pull mongo:latest
 
Trying to pull repository docker.io/library/mongo ... 
latest: Pulling from docker.io/library/mongo
f22ccc0b8772: Pull complete 
3cf8fb62ba5f: Pull complete 
e80c964ece6a: Pull complete 
329e632c35b3: Pull complete 
3e1bd1325a3d: Pull complete 
4aa6e3d64a4a: Pull complete 
035bca87b778: Pull complete 
874e4e43cb00: Pull complete 
08cb97662b8b: Pull complete 
f623ce2ba1e1: Pull complete 
f100ac278196: Pull complete 
6f5539f9b3ee: Pull complete 
Digest: sha256:02e9941ddcb949424fa4eb01f9d235da91a5b7b64feb5887eab77e1ef84a3bad
Status: Downloaded newer image for docker.io/mongo:latest
 
[root@iZbp1gp1t778obaz5m8vk8Z /]# docker images
REPOSITORY   TAG     IMAGE ID   CREATED    SIZE
docker.io/mongo  latest    3068f6bb852e  5 days ago   493 MB
 
 指定版本安装,建议不要安装最新的,很坑爹,我喜欢这个版本
[root@iZbp1gp1t778obaz5m8vk8Z ~]$ docker pull mongo:4.2.1

第二步:启动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
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# 
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS      NAMES
1bcf117db0a8  mongo    "docker-entrypoint..." 7 seconds ago  Up 7 seconds  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
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# 
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS      NAMES
1bcf117db0a8  mongo    "docker-entrypoint..." 7 seconds ago  Up 7 seconds  0.0.0.0:27017->27017/tcp mongo
 
此处我们设置为非登录可见
新docker人请参考前期文章知晓参数,启动完成后。咱们开始整账户

docker常见参数操作方法

第三步:mongodb 配置好用户信息

为MongoDb创建账户信息
 
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker exec -it mongo mongo admin
MongoDB shell version v4.4.2
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a2d4a27c-a9dc-4af4-90cb-233e41394d51") }
MongoDB server version: 4.4.2
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
	https://community.mongodb.com
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}
> db.auth('admin', '123456')
1
> db.grantRolesToUser("admin", [ { role: "readWrite", db: "admin" } ])
为MongoDb创建账户信息,如果你不需要验证可以不跑这一段,但是生产环境可不要这么干
 
# 连接至docker中的命令操作界面
[root@izwz99z5o9dc90keftqhlrz ~]# docker exec -it mongo mongo admin
 
# 创建一个名为 admin,密码为 123456的用户。
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
 
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123456')
 
# 给admin授权、读写权限
> db.grantRolesToUser("admin", [ { role: "readWrite", db: "admin" } ])
 
上面是第一次进入的时候
第二次进入时,就要守规矩了.一定要先进guides 数据库,再添加用户,否则不知道你添加到哪里去了
> use guides
#或者直接创建时给所有者权限
> db.createUser({user:"guides",pwd:"123456",roles:[{role:"dbOwner",db:"guides"}]})
#连接到此账户
> db.auth('guides','123456')
#用此账户、写入一条数据到guides数据库-这个文档
> db.guides.insert({"name":"liuxing", "age":31})

二:springboot采集日志至mongodb

采集日志就特别粗旷了

第一步:pom.xml添加配置

<!-- mongodb数据库操作 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

第二步:application.yml 配置好连接

#告诉Spring Boot应该在何处mongodb,没开验证 --auth 不需要输入用户名和密码,记住
spring 
 data:
 mongodb:
  host: 47.110.57.115
  port: 27017
  authentication-database: guides
  database: guides
  username: guides
  password: '123456'
  max-connection-idle-time: 1000
  max-connection-per-host: 200
  max-wait-time: 60000
  max-connection-life-time: 0
  connect-timeout: 1000
  socket-timeout: 2000
 
4.0以上authentication-database: 不要再写admin了,或者说4.2.1
authentication-database: guides

第三步:AOP切片日志获取

package com.zhx.guides.assistant.dto;
 
import com.zhx.guides.assistant.util.object.TimeHelper;
 
import java.io.Serializable;
import java.util.Date;
 
/**
 * @Date 创建时间: 2020-12-17 14:33
 * @Author 作者姓名: Liux
 * @Version 1.0
 * @Copyright Copyright by
 * @Direction 类说明
 */
public class HttpRequestLog implements Serializable {
 
 public final static String collectName = "guides" ;
 
 private String url ;
 private String httpMethod ;
 private String className ;
 private String methodName ;
 private String ip ;
 private String requestParam ;
 private Date nowTime = TimeHelper.getCurrentDate() ;
 
 .... get set 省略
 
}
package com.zhx.guides.assistant.web.aspect;
 
import com.alibaba.fastjson.JSONObject;
import com.zhx.guides.assistant.dto.HttpRequestLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
 
/**
 * @Class WebLogAspect
 * @Version 1.0
 * @Date 创建时间:2020-03-03 10:05
 * @Copyright Copyright by company
 * @Direction 类说明
 */
@Aspect
@Component
public class WebLogAspect {
 
 @Autowired
 private MongoTemplate mongoTemplate;
 
 private final static Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
 
 /** 以 controller 包下定义的所有请求为切入点 */
 @Pointcut("execution(public * com.zhx.guides.assistant.interfaces.controller..*.*(..))")
 public void webLog() {}
 
 /**
  * 在切点之前织入
  * @param joinPoint
  * @throws Throwable
  */
 @Before("webLog()")
 public void doBefore(JoinPoint joinPoint) throws Throwable {
  // 开始打印请求日志
  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  HttpServletRequest request = attributes.getRequest();
 
  HttpRequestLog httpRequestLog = new HttpRequestLog() ;
  httpRequestLog.setUrl( request.getRequestURL().toString() );
  httpRequestLog.setHttpMethod( request.getMethod() );
  httpRequestLog.setClassName( joinPoint.getSignature().getDeclaringTypeName() );
  httpRequestLog.setMethodName( joinPoint.getSignature().getName());
  httpRequestLog.setIp( request.getRemoteAddr() );
 
  // 打印请求相关参数
  logger.info("======================= Start ======================");
  // 打印请求 url
  logger.info("URL   : {}", httpRequestLog.getUrl() );
  // 打印 Http method
  logger.info("HTTP Method : {}", httpRequestLog.getHttpMethod() );
  // 打印调用 controller 的全路径以及执行方法
  logger.info("Class Method : {}.{}", httpRequestLog.getClassName() , httpRequestLog.getMethodName());
  // 打印请求的 IP
  logger.info("IP    : {}", httpRequestLog.getIp() );
  // 打印请求入参
  try {
   Object requestParam = joinPoint.getArgs();
   httpRequestLog.setRequestParam( JSONObject.toJSONString(requestParam) );
   logger.info("参数   : {}", httpRequestLog.getRequestParam() );
  }catch (Exception e){
   logger.info("参数打印失败,异常: {}", e.getMessage() );
  }finally {
   httpRequestLog.setClassName( null );
   try{mongoTemplate.save( httpRequestLog , HttpRequestLog.collectName );}catch (Exception e){}
  }
 }
 
 /**
  * 在切点之后织入
  * @throws Throwable
  */
 @After("webLog()")
 public void doAfter() throws Throwable {
  logger.info("======================= End ======================");
 }
 
 /**
  * 环绕
  * @param proceedingJoinPoint
  * @return
  * @throws Throwable
  */
 @Around("webLog()")
 public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
  long startTime = System.currentTimeMillis();
  Object result = proceedingJoinPoint.proceed();
  // 打印出参
  logger.info("返回值 : {}", JSONObject.toJSONString(result));
  // 执行耗时
  logger.info("耗时 : {} ms", System.currentTimeMillis() - startTime);
  return result;
 }
 
}
package com.zhx.guides.assistant.util.object;
 
import org.apache.commons.lang.StringUtils;
 
import java.util.Date;
 
/**
 * @Class TimeHelper
 * @Version 1.0
 * @Date 创建时间:2018/12/21 09:26
 * @Copyright Copyright by
 * @Direction 类说明
 */
public class TimeHelper { 
 
 /**
  *当前时间
  * @return
  */
 public static Date getCurrentDate(){
  Calendar calendar = Calendar.getInstance();
  return calendar.getTime();
 }
 
}

三:看看存储日志的效果

备注:请注意使用的mongodb版本:4.2.1 依次配置使用即可

如果你使用的最新版本,有可能发生各种 权限不能通过的问题,那么请切换至4.2.1稳定版本,用最新版本有点当小白鼠的感觉。

到此这篇关于Docker mongoDB 4.2.1 安装并收集springboot日志的文章就介绍到这了,更多相关Docker安装mongoDB并收集springboot日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker内部容器之间的端口访问实现方法

    docker内部容器之间的端口访问实现方法

    alpine-client 与 alpine-server 两容器,前者访问后者监听之端口,以此探析 Docker 内部容器间端口访问机制,这篇文章主要介绍了如何实现docker内部容器之间的端口访问,需要的朋友可以参考下
    2024-04-04
  • docker使用registry搭建本地镜像仓库实例详解

    docker使用registry搭建本地镜像仓库实例详解

    这篇文章主要介绍了docker使用registry搭建本地镜像仓库实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Docker Push Skipped foreign layer 的错误问题及解决方案

    Docker Push Skipped foreign layer 的错误问题及解决方案

    当Docker推送基于Windows镜像到私有仓库的时候会遇到Skipped foreign layer的问题,这篇文章主要介绍了Docker Push Skipped foreign layer 的错误问题及解决方案,需要的朋友可以参考下
    2022-05-05
  • Docker部署MySQL并实现客户端连接

    Docker部署MySQL并实现客户端连接

    这篇文章介绍了Docker部署MySQL并实现客户端连接的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • docker 挂载、修改文件的步骤

    docker 挂载、修改文件的步骤

    这篇文章主要介绍了docker 挂载、修改文件的步骤,咱们使用的是docker的 copy 命令从容器中 copy 出来相关的配置文件,在本地修改,修改完毕在使用docker的 copy 命令从本地 copy 到容器中,重启容器生效的,需要的朋友可以参考下
    2023-03-03
  • docker中mysql初始化及启动失败问题解决方案

    docker中mysql初始化及启动失败问题解决方案

    这篇文章主要介绍了docker中mysql初始化及启动失败问题解决方案的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker服务迁移的实现

    Docker服务迁移的实现

    本文详细介绍了如何备份和迁移Docker服务数据,包括停止Docker服务、备份Docker数据和DockerCompose文件,使用SCP或Rsync传输备份文件,以及在新服务器上恢复Docker数据和设置权限,文中提供了详细的命令和步骤,确保数据迁移过程顺利进行
    2024-10-10
  • docker compose部署mongodb 分片集群的操作方法

    docker compose部署mongodb 分片集群的操作方法

    分片机制(Sharding)是MongoDB中用于处理大规模数据集和高负载应用的一种数据分布策略,通过将数据均匀分布在多个服务器上,分片技术能够提高应用的可扩展性和性能,本文给大家介绍docker compose部署mongodb 分片集群的相关操作,感兴趣的朋友一起看看吧
    2024-10-10
  • Docker构建文件Dockerfile简单入门

    Docker构建文件Dockerfile简单入门

    这篇文章主要介绍了Docker构建文件Dockerfile简单入门,需要的朋友可以参考下
    2022-04-04
  • Docker搭建私有仓库的实现步骤

    Docker搭建私有仓库的实现步骤

    因为dockerHub公共仓库是外网的,所以访问就特别慢,所以一般公司都会搭建私人的镜像仓库来保存镜像,本文主要介绍了Docker搭建私有仓库的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论