如何在MongoDB Node App中启用审计并logging所有的CRUD操作?

我有一个节点mongo应用程序。 现在我想为应用程序中发生的一些特定的恶意事件显示审计线索。

解决这个问题最好的办法是什么?

我已经考虑创build一个新的集合和服务,将在节点应用程序中的每个方法中调用以logging操作。

你在说“触发”。 但不幸的是“MongoDB不支持触发器”。

为了解决您的问题,只需创build另一个集合并将日志信息存储到该集合中。

参考:

  • mongodb在关系数据库中是否具有触发器和过程的属性?
  • 如何监听MongoDB集合的更改?

最好使用包含所有要存储用于特定操作的日志的不同模式。

// schema var schema = new Schema({ actionType: {type: String, require: true}, userId: { type: Schema.Types.ObjectId, required: true }, userType: { type: String, required: true }, message: { type: String, required: true }, createdAt: { type: Date, default: Date.now }, }, options); 

在这里你可以logging你的活动日志

采取了什么行动。 哪个用户 以及您想要存储的消息等等

如果您正在使用mongoose模块,那么有logging所有查询的方法。它将在控制台上logging所有查询。

 mongoose.set('debug', true); 

如果你想login一个文件,然后使用callback这个方法

 mongoose.set('debug', function (coll, method, query, doc [, options]) { //do your thing }); 

你可以添加一个中间件到你的应用程序,它添加一个bunyan子logging器到每个请求与一些唯一的ID(可能是uuid

这里有一些示例代码来将logging器附加到具有唯一ID的每个请求上,无论何时使用此logging器打印某些内容,此uuid也将被自动打印,以便您可以使用此id来跟踪每个请求

 var bunyan = require('bunyan'); var uuid = require('uuid'); var logger = bunyan.createLogger({name: 'some name'}); function loadlogger(req, res, next) { req.log = logger.child({request_id: uuid.v4()}); next() } app.use(loadLogger); 

你可以随时login

 req.log.info({keys: values}, "message"); req.log.warn({keys: values}, "message"); req.log.error({keys: values}, "message"); 

你可以参考完整的文档bunyanlogging器