我们当前正在使用AWS lambda处理每日移动应用日志数据,并将其发布到redshift中。 Lambda构成数据,但本质上是原始数据。下一步是将日志数据实际处理为会话等,以进行报告。最后一步是进行特征工程,然后将数据用于模型训练。
步骤是
对于步骤2,我正在考虑使用Quicksight和/或Kibana创建报告仪表板。但是据我了解,典型的堆栈是使用logstash进行日志处理,然后将其传递给elasticsreach,最后传递给Kibana / Quicksight。由于我们已经通过lambda处理了初始日志处理,是否可以跳过此步骤并将其直接传递给elasticsearch?如果是这样,在lambda函数中还是将其存储在表中之后从redshift发生在哪里?还是Elasticsearch可以从我将要提取的数据发布到redshift表的同一s3中读取它?
答案 0 :(得分:2)
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库发出经过身份验证的请求。