一: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 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人请参考前期文章知晓参数,启动完成后。咱们开始整账户
第二步:启动docker中的mongodb 推荐
指定版本安装,推荐版本,最新的版本的-Auth 启动有问题,截至到2021-01-25
安装4.2.1
[root@iZbp1gp1t778obaz5m8vk8Z ~]$ docker pull mongo:4.2.1
这个是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人请参考前期文章知晓参数,启动完成后。咱们开始整账户
日志查看命令:
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker logs -f mongo
补充:假如上面命令启动不了,日志提示/data/db 没有权限,则是你使用了最新版本docker
[root@iZbp1gp1t778obaz5m8vk8Z mongodb]# docker run -itd --name mongo --privileged=true --restart=on-failure:10 -d -m 1G --memory-swap 4G -p 27017:27017 \
-v /data/mongodb:/data/db \
mongo:4.2.1 --auth
关键授权属性:--privileged=true
第三步:mongodb 配置好用户信息
为MongoDb创建账户信息,初始化admin账号
# 连接至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
# 创建新的业务数据库管理员:guides ,且授权数据管理管理员权限:必须在 use guides 之后执行
> db.createUser({user:"guides",pwd:"123456",roles:[{role:"dbOwner",db:"guides"}]})
# 查看新的业务数据库:guides 下面的管理员信息
> db.getUsers();
#退出本次登录
> exit;
# 再次连接至docker中的命令操作界面
[root@izwz99z5o9dc90keftqhlrz ~]# docker exec -it mongo mongo admin
# 切换到我们刚刚创建的新的业务数据库:guides
> use guides
# 使用上面创建的用户信息进行连接。
> db.auth('guides', '123456')
# 在新的业务数据库:guides 下面写入数据,圆满完成创建数据库,账号,写入数据的测试,后面我们使用自己的代码来连接系统操作
> db.guides.insert({"name":"liux", "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.120.157.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稳定版本,用最新版本有点当小白鼠的感觉。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/160812.html