Cloud Foundry上的业务审核事件

时间:2018-10-29 17:02:30

标签: spring cloudfoundry pivotal-cloud-foundry audit-trail audit-logging

我在 Cloud Foundry 上部署了一些 spring-boot 微服务,并且我必须实现它们发出的业务审计事件的传播和存储(到存储库)。

我可以通过几种方式来做到这一点,例如:

  1. 将审核事件发布到SourceSpring Cloud Stream / RabbitMQ)上,并由Sink服务使用,以将事件写入存储库中。
  2. 将审核事件发布为自定义应用程序日志,并通过log-consuming service过滤并将其写入存储库来使用它。
  3. 使用internal CF's mechanism作为新的自定义log type或自定义audit event发布审核事件-我认为此选项不是一个好主意,但我可能是错的...

在Cloud Foundry平台上是否有建议的方法/模式来实现此问题?


编辑

(我认为)所有方法都符合12-factor规则,但是每种方法都有其优点和缺点:

  • (1)春季云流
    • +确保交付(事件不会丢失)
    • +允许使用路由(RabbitMQ)
    • -需要连接到消息代理(不像记录器那样简单)
  • (2)消耗日志的服务
    • +很简单
    • -日志可能会丢失
    • -审计业务信息广泛传播-GDPR
  • (3)新CF的日志类型
    • -可能会强制更改CF

2 个答案:

答案 0 :(得分:1)

我将用一个问题回答您的问题。您的“业务审核日志”到底是什么?如果您丢失了其中一些会不会有问题?

如果答案是,并且丢失单个日志也是不可接受的,那么我可以证明它们不是真正的日志,而是业务记录(也许看起来像日志)。在这种情况下,请将记录存储在有存储空间的数据库或其他服务中。这是额外的工作,但是您需要确保正确存储这些记录,以确保进行额外的工作。

如果答案为,并且丢失部分甚至全部日志(为最坏的情况做计划)是可以接受的,那么我建议只将它们写入STDOUT。 Cloud Foundry将为您处理这些日志的路由,因此非常容易。如果要将系统日志流发送到消耗日志的服务,则可以绑定系统日志流失,也可以实现Loggregator Nozzle并直接从CF中读取日志。从应用程序的角度来看,这并不重要,您甚至可以稍后改变主意,而无需更新应用程序。

希望有帮助!

答案 1 :(得分:0)

在我的应用程序中,我坚持使用12 factor application规则。

第11条规则是: Treat logs as event streams

这是有关日志记录的重要部分:

  

十二要素应用程序从不关心路由或存储   它的输出流。它不应尝试写入或管理   日志文件。相反,每个正在运行的进程都写入其事件流,   无缓冲,到标准输出。在本地开发期间,开发人员将   在其终端的前台查看此流,以观察   应用的行为。

     

在登台或生产部署中,每个流程的流将是   由执行环境捕获,并与所有   应用中的其他流,并路由到一个或多个最终流   观看和长期存档的目的地。这些档案   应用程序看不到目的地或无法配置目的地,并且   而是完全由执行环境进行管理。   开源日志路由器(例如Logplex和Fluentd)可用   为此目的。

因此,建议的方法是将日志写入stdout。