我过去曾使用过 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.01
,metrics-2020.01.02
等创建索引。此方法具有以下优点:希望能对您有所帮助!
关于elasticsearch - 根据发展目标进行麋鹿指标设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59560945/