amazon-web-services - ELK 堆栈(Elasticsearch、Logstash、Kibana)——logstash 是必要的组件吗?
问题描述
我们目前正在使用 AWS lambda 处理每日移动应用程序日志数据并将其发布到 redshift。lambda 构造数据,但它本质上是原始的。下一步是将日志数据实际处理为会话等,以用于报告目的。最后一步是做一些特征工程,然后使用数据进行模型训练。
步骤是
- 结构化原始数据以进行存储
- 会话化数据以进行报告
- 用于建模的特征工程
对于第 2 步,我正在考虑使用 Quicksight 和/或 Kibana 创建报告仪表板。但据我所知,典型的堆栈是使用 logstash 进行日志处理,然后将其转到 elasticsreach,最后转到 Kibana/Quicksight。由于我们已经通过 lambda 处理了初始日志处理,是否可以跳过这一步,直接将其传递给 elasticsearch?如果是这样,这种情况发生在哪里 - 在 lambda 函数中还是在它被存储在表中之后的 redshift 中?或者,elasticsearch 可以从我将要摄取的数据发布到红移表的同一个 s3 中读取它吗?
解决方案
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库来发出经过身份验证的请求。
推荐阅读
- c++ - 如何将类成员地址传递给函数,以便将其分配给函数内部的类成员指针?
- javascript - Vue.js 在渲染时通过 vue.router 参数动态填充内容
- scheme - 与对的组合
- azure-devops - Azure Devops 将构建 ID 作为参数传递给 YAML 部署管道
- c++ - TI RSLK MAX 机器人的编码器
- prometheus - 计算多个 prometheus 指标的百分比并在 Grafana 中显示
- airflow - Airflow Slack 提供商未发送所有消息
- python - PyCUDA 中的随机数生成
- javascript - NodeJs/TestCafe:致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足
- asp.net - 从集线器向信号发送 Signalr 消息无效