首页 > 解决方案 > ELK 堆栈(Elasticsearch、Logstash、Kibana)——logstash 是必要的组件吗?

问题描述

我们目前正在使用 AWS lambda 处理每日移动应用程序日志数据并将其发布到 redshift。lambda 构造数据,但它本质上是原始的。下一步是将日志数据实际处理为会话等,以用于报告目的。最后一步是做一些特征工程,然后使用数据进行模型训练。

步骤是

  1. 结构化原始数据以进行存储
  2. 会话化数据以进行报告
  3. 用于建模的特征工程

对于第 2 步,我正在考虑使用 Quicksight 和/或 Kibana 创建报告仪表板。但据我所知,典型的堆栈是使用 logstash 进行日志处理,然后将其转到 elasticsreach,最后转到 Kibana/Quicksight。由于我们已经通过 lambda 处理了初始日志处理,是否可以跳过这一步,直接将其传递给 elasticsearch?如果是这样,这种情况发生在哪里 - 在 lambda 函数中还是在它被存储在表中之后的 redshift 中?或者,elasticsearch 可以从我将要摄取的数据发布到红移表的同一个 s3 中读取它吗?

标签: amazon-web-serviceselasticsearchamazon-s3logstashkibana

解决方案


Elasticsearch 使用 JSON 来执行所有操作。例如,要将文档添加到索引中,请使用操作(从docsPUT复制):

PUT twitter/_doc/1
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

Logstash 的存在是为了收集日志消息,将它们转换为 JSON,并发出这些 PUT 请求。但是,任何生成格式正确的 JSON 并可以执行 HTTP PUT 的东西都可以工作。如果您已经调用 Lambda 来转换您的 S3 内容,那么您应该能够调整它们以将 JSON 写入 Elasticsearch。我会为 Redshift 和 Elasticsearch 使用单独的 Lambda,只是为了提高可管理性。

性能提示:您可能一次处理大量记录,在这种情况下,批量 API将比单个 PUT 更有效。但是,请求的大小是有限制的,因此您需要批量输入。

另外:您没有说您使用的是 AWS Elasticsearch 集群还是自我管理的集群。如果是前者,您还必须处理经过身份验证的请求,或者在集群上使用基于 IP 的访问策略。您没有说明您的 Lambda 是用什么语言编写的,但如果是 Python,您可以使用aws-requests-auth库来发出经过身份验证的请求。


推荐阅读