elasticsearch - 根据发展目标进行麋鹿指标设计

标签 elasticsearch database-design application-design

我过去曾使用过 flex 来分析日志,但是我对 flex “架构”没有任何经验。
我有一个部署到多台计算机(200台以上)的应用程序。
我想连接到每台计算机并收集元数据,例如日志,指标,数据库统计信息等。

有了这些数据,我希望能够:

1.查找每台机器中的问题并通知他们(发现问题需要在不同源之间连接数据,例如,在log1中发现异常需要我去检查数据库)

2.分析所有机器的常见问题,并实现将能够预测问题的ML模型。

我需要创建索引,并且考虑了2个选项:
1.为每台计算机创建一个索引,然后与每台计算机相关的所有数据将在其索引中可用。
2.为每个数据源创建索引。例如,来自所有计算机的所有数据库日志将在一个专用索引中可用。另一个索引将仅包含与机器指标(cpu / ram使用情况..)有关的数据。

您如何看待创建这些索引的最佳方式?

最佳答案

好的,现在我对您的需求有了更好的了解,这是我的建议:

我强烈建议不要为每台机器创建索引。我对您的用例了解不多,但是我假设您想在kibana中或通过在应用程序中实现搜索请求来搜索数据。

假设您对每台机器的ram使用感兴趣。由于数据(内存使用情况)分布在200个索引中,因此您将需要针对Elasticsearch执行200个搜索请求(当然,一个索引可以创建别名,但是必须为每台新机器更新这些别名)。此外,您将无法进行基本汇总,例如哪台机器的内存使用率最高?以方便的方式。在我看来,还有很多缺点,例如索引管理,分片分配等。

那么有什么更好的解决方案?

正如您已经建议的那样,您应该为每个数据源创建一个索引。这样,您的索引就具有专用的“目的”,例如一个索引用于存储数据库数据,另一个索引用于存储系统数据等等。引用上面的示例,您只需执行一个搜索请求即可确定a)每台机器的内存使用情况,以及b)内存使用率最高的机器。但是,这需要每个文档都包含一个引用特定主机的字段,如下所示:

PUT metrics/_doc/1
{
  "system":{
    "ram": {
      "usage": "45%",
      "free": "55%"
    }
  },
  "host":{
    "name": "YOUR HOSTNAME",
    "ip": "192.168.17.100"
  }
}

除了外,我建议使用每日索引。因此,与其为系统指标创建一个巨大的索引,不如每天为metrics-2020.01.01metrics-2020.01.02等创建索引。此方法具有以下优点:
  • 您的索引的大小将小得多,从而使其更易于管理和(重新)分配。
  • 在一段时间后,您可以粗略估计数据大小,并能够更好地定义分片数量。仅使用一个巨大的索引,您将不断需要更新分片的数量,以便快速处理您的请求。
  • 此外,您可以方便地每天搜索数据。
  • ,您可以设置ilm策略来自动维护索引,例如删除超过X天的指标索引。
  • ...

  • 希望能对您有所帮助!

    关于elasticsearch - 根据发展目标进行麋鹿指标设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59560945/

    相关文章:

    elasticsearch - 如何在Elasticsearch 6.3中找到哪个碎片超过30Gb

    elasticsearch - Elastic Search 7.9:在多个字段上完全相同

    docker - Docker上的Elastic 6:无法设置密码

    architecture - 有人可以解释5层架构吗?

    angularjs - 我应该在项目结构中的服务器端哪里管理高级算法/服务?

    Elasticsearch CreateIndex() 参数不足

    c# - 在没有超时的情况下从数据库中提取记录

    sql-server - 在 SQL Server 2005 中,我应该如何对可以包含数字和字符串值的字段建模?

    postgresql - 分散数据库结构

    ios - 使用应用委托(delegate)启动 iOS 应用