ELK 在 AWS 上的良好设置

Posted

技术标签:

【中文标题】ELK 在 AWS 上的良好设置【英文标题】:Good setup on AWS for ELK 【发布时间】:2016-11-03 10:28:01 【问题描述】:

我们正在考虑在 Amazon 上设置 ELK 堆栈,但我们真的不知道我们需要什么机器才能顺利处理它。 现在我知道,如果它运行不顺畅,就会变得很明显,但我们仍然希望了解我们的情况需要什么。

所以我们有 4 个服务器以自定义格式生成日志文件。每天大约 4500 万行日志,生成大约 4 个 600mb(gzip 压缩)的文件,因此每天大约有 24GB 的日志。

现在我们正在研究 ELK 堆栈,并希望 Kibana 的仪表板显示实时数据,所以我正在考虑使用 syslog 将日志记录到 logstash。

4 个服务器 -> Rsyslog(在这 4 个服务器上)-> Logstash (AWS) -> ElasticSearch (AWS) -> Kibana (AWS)

所以现在我们需要弄清楚我们需要在 AWS 中使用什么样的硬件来处理这个问题。

我在某处至少读到了 3 个 ElasticSearch 主节点和 2 个数据节点。 那么这将总共有 5 个服务器 + 1 个用于 Kibana 的服务器和 1 个用于 Logstash 的服务器? 所以我总共需要 7 台服务器才能开始,但这似乎有点过头了? 我想将我的数据保留 1 个月,所以最多保留 31 天,所以我在 Elastic Search 中会有大约 1.4TB 的原始日志数据(~45GB x 31)

但由于我真的不知道最佳设置是什么,因此欢迎提供任何提示/提示/信息。

另外一个可以为我处理这个问题(节点故障等)的系统或工具可能会很有用。

提前致谢,

暗恋

【问题讨论】:

【参考方案1】:

以下是我构建云集群的方式:

3 个主节点 - 这些节点协调集群并保留其中三个节点有助于容忍故障。理想情况下,这些将分布在可用区域中。这些可以相当小,理想情况下不会收到任何请求——它们唯一的工作是维护集群。在这种情况下,设置discovery.zen.minimum_master_nodes = 2 以维持仲裁。这些 IP 和这些 IP 只是您应该提供给 discovery.zen.ping.unicast.hosts 中的所有集群节点的内容

索引:您可能应该利用每日索引 - 请参阅 https://www.elastic.co/guide/en/elasticsearch/guide/current/time-based.html 这将在下面更有意义,但如果您开始扩大规模也会有好处 - 您可以随着时间的推移增加分片数量而无需重新编制索引。

数据节点:根据您的规模或性能要求,有几个选项 - i2.xlarge 或 d2.xlarge 可以很好地工作,但 r3.2xlarge 也是一个不错的选择。确保保持 JVM 堆

热/暖:根据使用情况 - 有时将数据节点拆分为热/暖(快速 SSD/慢速 HDD)是有益的。这主要是因为所有写入都是实时的,而大多数读取都是在过去几个小时内完成的。如果您可以将昨天的数据转移到更便宜、速度更慢的驱动器上,那将有很大帮助。这涉及更多一点,但您可以在https://www.elastic.co/blog/hot-warm-architecture 阅读更多内容。这需要添加一些标签并每晚使用 curator,但通常值得这样做,因为将大部分未搜索的数据从更昂贵的 SSD 中移出可以节省成本。

在生产中,我为热层运行约 20 个 r3.2xlarge,为热层运行 4-5 个 d2.xlarge,复制因子为 2 - 这允许每天约 TB 的摄取量和相当数量的保留。我们将 Hot 用于音量,将 Warm 用于留存。

总的来说 - 祝你好运!一旦一切顺利运行,构建和运行它就是一个有趣的堆栈。

PS - 根据您可用的时间/资源,您可以在 AWS 上运行托管的 elasticsearch 服务,但我上次看到它比在您自己的实例上运行它和 YMMV 贵约 60%。

【讨论】:

哇,这是一个非常详细和扩展的答案。将等待一天,看看是否有其他回复,否则我会接受你的,因为它非常广泛:) 刚刚看到您的编辑,这就是我想知道的 :) 至少现在我知道我需要查看什么样的硬件了。 没问题 - 如果您有任何其他我没有解决的问题,请告诉我,我很乐意编辑 :) 对 Logstash / Kibana 机器的硬件有什么建议吗? :) 或者关于如何监控集群的性能/健康状况的任何提示? 大多数监控工具都有可以收集指标的插件(datadog、sensu、telegraf),但您始终可以让每个主节点访问 localhost:9200/_cluster/stats 和所有节点 localhost:9200/_node/stats并将 json 发送回 elasticsearch【参考方案2】:

您似乎需要一些东西才能从 AWS 上的 ELK Stack 开始

您是否尝试过这两个 CloudFormation 脚本,它可以简化您的安装过程,并帮助您一次性设置环境。

ELK-Cookbook - CloudFormation Script

ELK-Stack with Google OAuth in Private VPC

如果这不能解决您的问题,请在下方评论。

【讨论】:

以上是关于ELK 在 AWS 上的良好设置的主要内容,如果未能解决你的问题,请参考以下文章

AWS Route53 DNS 故障转移设置上的临时反转主要 <=> 次要

AWS Cloudwatch 上的警报设置

如何使用 .net Core 设置 AWS 凭证

在 aws-cdk 上的 aws-rds 上,使数据库可公开访问的设置在哪里?

AWS 中的 Laravel WebSockets 推送器

AWS Cloudwatch + ECS - 设置啥权限?