【发布时间】:2018-06-23 09:07:50
【问题描述】:
我需要选择一种技术来存储和检索审核日志(添加、删除、修改等内容时)。场景是:日志可能每天增加1000万条,会被一些关键词检索。 所以我的问题是:
- 我应该使用哪种技术,例如 ELK(Elasticsearch、Logstash、Kibana)或 MySQL 或 Redis 或更好的方法以及原因。
【问题讨论】:
标签: mysql logging redis elastic-stack audit
我需要选择一种技术来存储和检索审核日志(添加、删除、修改等内容时)。场景是:日志可能每天增加1000万条,会被一些关键词检索。 所以我的问题是:
【问题讨论】:
标签: mysql logging redis elastic-stack audit
ELK 是一种标准选项。它可靠,在数百万条记录中具有出色且快速的关键字搜索功能,并且可以相当线性地扩展。
MySQL 将是一个不错的次要选择,但根据您需要保留的时间范围,您最终会在空间或搜索能力方面遇到扩展问题(在合理的时间框架)没有分片。分片可以解决很多这些问题,但它可能会比 ELK 之类的东西更手动和更痛苦,ELK 很容易设置为按日期索引/分片。
Redis 不会是一个很好的选择。所有 redis 数据必须适合内存,这极大地限制了您可以保留的日志数据量。键/值也不适合日志结构的数据,尤其是它的可搜索性,这在 redis 中基本上是没有的。
如果您要超越 ELK,下一个最佳选择可能是 HDFS + Hadoop/Spark 搜索(或者如果您在 AWS 领域,则为 S3+EMR),但每天 1000 万个 ELK 应该能持续好一会儿(取决于时间范围)。举个例子,我目前正在使用一个 10 节点的 ELK 集群,该集群每天处理大约 10 亿个日志项,并且我们保留了两周的历史记录。
编辑:
对于您正在寻找的审计日志记录,为了增加可靠性,将类似 kafka 流的东西作为应用程序和 ELK 之间的层写入可能会很有用。这将绕过一些可能会遇到依赖日志文件传送的奇怪/糟糕的行为,并为您提供所有更改的无限期、可重播流。
【讨论】: