代码之家  ›  专栏  ›  技术社区  ›  hsluoyz

将所有文档的列更新到Elasticsearch的最佳实践

  •  0
  • hsluoyz  · 技术社区  · 7 年前

    我正在开发一个日志分析系统。输入是日志文件。我有一个外部Python程序,它读取日志文件,并判断记录(行)或日志文件是“正常”还是“恶意”。我想用 Elasticsearch Update API 通过添加一个名为 result

    简单地说,我的Python代码和Elasticsearch都分别使用日志文件作为输入。现在我想将Python代码的结果更新为Elasticsearch。最好的方法是什么?

    1. Elasticsearch自动分配一个ID( _id _身份证 ,然后我的Python代码可以自己计算,然后通过 _身份证 . 但问题是,Elasticsearch官方文档并没有说明它使用什么算法生成 _身份证 .

    2. 我的Python代码从Elasticsearch获取日志,而不是直接读取日志文件。但这使得系统变得脆弱,因为弹性搜索成为一个关键点。我现在只希望Elasticsearch是一个日志查看器。

    因此,在当前的观点中,第一种解决方案将是理想的。但我不确定有没有更好的方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    5 年前

    如果可能的话,重新构造您的应用程序,这样您就可以直接将结构化的日志信息写入Elasticsearch之类的东西,而不是将纯文本转储到日志文件中。以后谢谢我。

    1. 这种感觉 超脆 . Elasticsearch不基于 _id 特定文档的属性。它是根据现有的 _身份证 它存储的字段(我认为也是随机种子)。即使它可以工作,依赖一个未记录的属性是一个很好的方法,射击自己的脚时,与团队打交道,使突破性的变化,即使是其记录的代码经常作为Elasticsearch做。

    2. 其实没那么糟 . Elasticsearch支持手动选择文档的id。即使没有,它在批量术语查询中的性能也相当好,不会像您想象的那样成为瓶颈。如果你真的有这么多的数据,这可能会破坏你的应用程序,那么Elasticsearch可能不是最好的工具。

    3. 此解决方案 太棒了

    但有一个问题是,为什么在Elasticsearch中有需要用这个特定的普通/恶意属性更新的日志?如果是你把它们放入ES,那么在你储存它们之前,只需适当地标记它们,以防止额外的读取困扰你。如果这不是一个选项,那么您可能仍然希望直接读取ES来将日志拉入Python,以避免再次解析原始日志文件的巨大开销。

    如果这是对现有ES数据的一次性修补程序,而您正在推出普通/恶意的,那么不要担心速度会提高2倍。如果您想关闭集群,只需限制查询。修补程序最终会执行,而且可能比我们一直在考虑最佳选择的速度更快。