ELK stack (Elasticsearch, Logstash, Kibana) - logstash 是必备组件吗?
ELK stack (Elasticsearch, Logstash, Kibana) - is logstash a necessary component?
我们目前正在使用 AWS lambda 处理每日移动应用程序日志数据并将其发布到 redshift 中。 lambda 构造数据,但它本质上是原始的。下一步是将日志数据实际处理成会话等,以用于报告目的。最后一步就是有东西做特征工程,然后用数据做模型训练。
步骤是
- 构建原始数据进行存储
- 会话化数据以进行报告
- 用于建模的特征工程
对于第 2 步,我正在考虑使用 Quicksight and/or Kibana 创建报告仪表板。但据我了解,典型的堆栈是使用 logstash 进行日志处理,然后将其转到 elasticsreach,最后转到 Kibana/Quicksight。既然我们已经通过lambda处理了初始的日志处理,是不是可以跳过这一步,直接传给elasticsearch呢?如果是这样,这发生在哪里 - 在 lambda 函数中或在它存储在 table 中后从 redshift 中发生?或者 elasticsearch 可以从同一个 s3 读取它,我将数据发布到 redshift table?
Elasticsearch 使用 JSON 来执行所有操作。例如,要将文档添加到索引,您可以使用 PUT
操作(从 docs 复制):
PUT twitter/_doc/1
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
Logstash 的存在是为了收集日志消息,将它们转换为 JSON,并发出这些 PUT 请求。但是,任何生成格式正确的 JSON 并且可以执行 HTTP PUT 的东西都可以工作。如果您已经调用 Lambdas 来转换您的 S3 内容,那么您应该能够调整它们以将 JSON 写入 Elasticsearch。我会为 Redshift 和 Elasticsearch 使用单独的 Lambda,只是为了提高可管理性。
性能提示:您可能一次处理大量记录,在这种情况下,bulk API 将比单个 PUT 更有效。但是,请求的大小有限制,因此您需要对输入进行批处理。
另外:您没有说明您是使用 AWS Elasticsearch 集群还是自我管理。如果是前者,您还必须处理经过身份验证的请求,或者在集群上使用基于 IP 的访问策略。你没有说你的 Lambda 是用什么语言编写的,但如果它是 Python 你可以使用 aws-requests-auth 库来发出经过身份验证的请求。
我们目前正在使用 AWS lambda 处理每日移动应用程序日志数据并将其发布到 redshift 中。 lambda 构造数据,但它本质上是原始的。下一步是将日志数据实际处理成会话等,以用于报告目的。最后一步就是有东西做特征工程,然后用数据做模型训练。
步骤是
- 构建原始数据进行存储
- 会话化数据以进行报告
- 用于建模的特征工程
对于第 2 步,我正在考虑使用 Quicksight and/or Kibana 创建报告仪表板。但据我了解,典型的堆栈是使用 logstash 进行日志处理,然后将其转到 elasticsreach,最后转到 Kibana/Quicksight。既然我们已经通过lambda处理了初始的日志处理,是不是可以跳过这一步,直接传给elasticsearch呢?如果是这样,这发生在哪里 - 在 lambda 函数中或在它存储在 table 中后从 redshift 中发生?或者 elasticsearch 可以从同一个 s3 读取它,我将数据发布到 redshift table?
Elasticsearch 使用 JSON 来执行所有操作。例如,要将文档添加到索引,您可以使用 PUT
操作(从 docs 复制):
PUT twitter/_doc/1
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
Logstash 的存在是为了收集日志消息,将它们转换为 JSON,并发出这些 PUT 请求。但是,任何生成格式正确的 JSON 并且可以执行 HTTP PUT 的东西都可以工作。如果您已经调用 Lambdas 来转换您的 S3 内容,那么您应该能够调整它们以将 JSON 写入 Elasticsearch。我会为 Redshift 和 Elasticsearch 使用单独的 Lambda,只是为了提高可管理性。
性能提示:您可能一次处理大量记录,在这种情况下,bulk API 将比单个 PUT 更有效。但是,请求的大小有限制,因此您需要对输入进行批处理。
另外:您没有说明您是使用 AWS Elasticsearch 集群还是自我管理。如果是前者,您还必须处理经过身份验证的请求,或者在集群上使用基于 IP 的访问策略。你没有说你的 Lambda 是用什么语言编写的,但如果它是 Python 你可以使用 aws-requests-auth 库来发出经过身份验证的请求。