Mysql 对于审计日志记录,哪种技术最好?

Mysql 对于审计日志记录,哪种技术最好?,mysql,logging,redis,elastic-stack,audit,Mysql,Logging,Redis,Elastic Stack,Audit,我需要选择一种技术来存储和检索审计日志(当添加、删除、修改某些内容时)。场景是:日志每天可能会增加1000万条,并将通过一些关键字进行检索。 所以我的问题是: 我应该使用哪种技术,例如ELK(Elasticsearch、Logstash、Kibana)或MySQL或Redis或更好的技术,以及原因 麋鹿是这方面的标准选择。它是可靠的,在数百万条记录中有强大而快速的关键字搜索,并且可以相当线性地扩展 MySQL将是一个不错的第二选择,但取决于您需要保留的时间范围,您最终将在没有切分的情况下遇到空

我需要选择一种技术来存储和检索审计日志(当添加、删除、修改某些内容时)。场景是:日志每天可能会增加1000万条,并将通过一些关键字进行检索。 所以我的问题是:

  • 我应该使用哪种技术,例如ELK(Elasticsearch、Logstash、Kibana)或MySQLRedis或更好的技术,以及原因

  • 麋鹿是这方面的标准选择。它是可靠的,在数百万条记录中有强大而快速的关键字搜索,并且可以相当线性地扩展

    MySQL将是一个不错的第二选择,但取决于您需要保留的时间范围,您最终将在没有切分的情况下遇到空间或搜索能力(在合理的时间范围内)的缩放问题。切分可以解决很多问题,但它可能会比像麋鹿这样很容易设置索引/按日期切分的东西更加手动和痛苦

    Redis不是一个很好的选择。所有redis数据都必须放在内存中,这大大限制了您可以保留的日志数据量。Key/value也不适合于日志结构的数据,尤其是wrt,因为它的可搜索性在redis中基本上是没有的

    如果你想超过麋鹿,下一个最好的选择可能是HDFS+Hadoop/Spark搜索(如果你在AWS的土地上,也可能是S3+EMR),但麋鹿每天1000万只,应该能维持一段时间(取决于时间范围)。举个例子,我目前正在使用一个10节点的麋鹿集群,它每天处理大约10亿个日志项,我们保存了两周的历史记录


    编辑:


    对于您正在寻找的审计日志记录,为了增加可靠性,在应用程序和ELK之间有一个类似kafka流的层来写入可能会很有用。这将避免依赖日志文件传送可能遇到的一些潜在的奇怪/糟糕行为,并为您提供一个不确定的、可重放的所有更改流。

    添加审核日志的一个简单方法是使用另一个线程(例如spring@Async)来完成此操作,但随着日志的增加,管理线程的成本会越来越高。因此,消息quesue(如卡夫卡)是一个很好的建议。我还想知道是否有任何方法可以在应用程序中保留审核日志而不受代码入侵?由于在应用程序中会存在大量用于保存日志的重复代码,这在很大程度上取决于您的应用程序体系结构。如果您的db访问在代码中完全分离,并且实体有自己的管理类/服务,那么您可以设想一个通用实体记录器,该记录器中的数据管理类可以是其操作固有的,并自动实现。我对Spring不太熟悉,我想你正在使用Spring,所以我不一定有非常具体的建议。