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日志内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot配置aop切面日志打印过程解析

    这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.SpringBoot Aop说明 1. Aop AOP(Aspect-Oriented Programming,面向切面编程),它利用一种"横切"的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. 2. AOP相关概念: Aspect

  • Springboot项目使用Slf4j将日志保存到本地目录的实现代码

    1.引入jar包 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> 2.编写application.properties/yml #.properties logging.config= classpath:logback-spr

  • docker中使用mongodb数据库详解(在局域网访问)

    前言 有了docker,基本上就告别了各种软件.数据库的安装,直接从镜像库pull下来,爽,想想以前那真是一个遭罪啊. 这文章就来看一下如何跑mongo的docker镜像,并且可以在局域网访问,内容相对简单,也是记录我的自学过程. 第一步 获得mongo镜像,命令如下, # 拉取mongo镜像 docker pull mongo # 查看本地库mongo镜像 docker images mongo 第二步 启动mongo镜像,如下 # 启动mongo镜像 docker run -itd -P -

  • 基于Docker的MongoDB实现授权访问的方法

    基于Docker部署一个数据库实例通常比直接在服务器上安装数据库还要简单,Gevin在开发环境中经常使用基于docker的数据库服务,docker也渐渐成为Gevin在Linux上安装MongoDB的首选方式,由于MongoDB默认是不用通过认证就能直接连接的,出于安全考虑,在公网上部署MongoDB时,务必设置authentication机制,以避免类似 "黑客赎金" 问题的发生. 那么,基于Docker拉起的MongoDB,如何实现通过用户名密码访问指定数据库呢?方法很简单,但前提

  • 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/mong

  • 最新版 Windows10上安装Python 3.8.5的步骤详解

    因为旧电脑不幸挂了,所以要在新电脑上面重新安装Python.一看官网发现已经更新到3.8.5+了,乖乖,真是迭代快啊.虽然之前安装过一次,不过也忘得差不多了,正好借这次回顾一下安装步骤(万一以后再次遇到(还是不要了

  • win10 安装mysql 8.0.18-winx64的步骤详解

    1.先去官网下载mysql 安装包 https://dev.mysql.com/downloads/mysql/ 2.下载完后解压到你想要安装MSQ 的文件目录下(如 D:\Mysql) 3.管理员命令运行 命令行,进入mysql 安装包的 bin 目录(D:\MySQL\mysql-8.0.18-winx64\bin) 4.执行 命令 mysqld --initialize --console (会自动生成data 文件夹,且生成临时密码,记住临时密码) 5.执行命令mysqld --inst

  • 关于win10在tensorflow的安装及在pycharm中运行步骤详解

    本文介绍在win10中安装tensorflow的步骤: 1.安装anaconda3 2.新建conda环境变量,可建多个环境在内部安装多个tensorflow版本,1.x和2.x版本功能差别太大,代码也很大区别 3.环境中安装python和fensorflow 4.用tensorflow运行一段测试程序 安装anaconda下载地址(清华镜像): https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/选择最新版本 开始安装anaconda 选

  • 安装IDEA和配置Maven的步骤详解

    1.下载IDEA教育版,版本为2019.3.5 2.导入项目 3.选择pom.xml,右键Maven,点Reimport,自动下载依赖 4.在Maven官网下载Maven,版本为apache-maven-3.6.3,解压后放在D盘 5.修改Maven的仓库地址.打开conf文件夹的settings.xml,把默认地址改为D盘D:\Maven\repository 6.配置Maven的环境变量.右键电脑属性,高级系统设置,环境变量. 新建MAVEN_HOME 编辑Path,新建%MAVEN_HOM

  • Ubuntu中安装MySQL更改默认密码的步骤详解

    第一步:进入目录:cd /etc/mysql,查看debian.cnf文件 第二步:使用上图中的账号密码登录MySQL. 第三步:查看数据库中的库. 第四步:使用mysql库. 第五步:使用一下语句设置账号密码:update user set authentication_string=PASSWORD("自定义新密码") where user='root'; 我个人设置的简单.账号为:root. 密码:123456. 第六步:执行一下语句:update user set plugin

  • Mongodb 3.2.9开启用户权限认证问题的步骤详解

    前言 大家在Mongodb安装好后,一般不需要用户名密码就可以直接使用,开发者认为只要使用环境足够安全,可以不使用认证,但是在实际使用中为了数据的安全,大多人还是选择了开启权限认证. 一.在老版的Mongodb(大概3.0以前)可以这样开启认证: 1.Linux环境下mongo shell方式认证: >show dbs ##看到有如下数据 admin (empty) comment 0.203125GB dbtest (empty) foo 0.203125GB local (empty) te

  • 在centos 7中安装配置k8s集群的步骤详解

    配置背景介绍 kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) 为什么要用kubernetes这么复杂的docker集群管理工具呢?一开始接触了docker内置的swarm,这个工具非常简单快捷的完成docker集群功能.但是在使用docker1.13内置的swarm做集群的时候遇到vip负载均衡没有正确映射端口到外网,或者出现地址被占用的情况,这对高可用性

  • Linux Docker运行springboot项目的步骤详解

    简介: Docker 运行springboot项目其实配置非常简单,跟咱们直接到Linux上运行springboot是一样一样的.开始 一:咱们首先要有一个运行Docker环境 第一步:使用 yum 安装(CentOS 7下) Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 [root@iZbp1gp1t778obaz5m8vk8Z ~]# uname

  • CentOS 7.2下安装部署邮件服务器(Postfix)的步骤详解

    本文主要介绍的是在CentOS 7.2安装部署邮件服务器(Postfix)的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的.最早在1990年代晚期出现,是一个开放源代码的软件. 注意:以下所有配置的命名都是根据主机的hostname变量来配置的,如果hostname更换了的话,需

随机推荐