使用 Kinesis Firehose 时,VPC 内的 Elasticsearch 经常出现 503 错误
Posted
技术标签:
【中文标题】使用 Kinesis Firehose 时,VPC 内的 Elasticsearch 经常出现 503 错误【英文标题】:Constant 503 errors from Elasticsearch inside a VPC when using Kinesis Firehose 【发布时间】:2021-01-23 17:57:45 【问题描述】:我正在使用 Amazon Kinesis Data Generator 将数据发送到测试 Kinesis Firehose Stream,以便在 Elasticsearch Service 集群中建立索引。
数据生成器发送一个相当基本的 json 文档进行处理,流元素工作正常,Lambda 转换也是如此。到目前为止,我已经验证并能够测试所有内容。只有在我的 VPC 中向 Elasticsearch 发出请求时,我才会收到错误消息。
如果我将管道切换为使用公共 Elasticsearch 域,它可以正常工作,但是当我在 VPC 中使用 Elasticsearch 域时,我得到一个503 error。这是每个请求的一致错误,因此不是容量问题。
这是我看到的错误示例。只是一个通用的 503。我不确定这是来自负载均衡器还是来自目标(Elasticsearch 本身)。
"deliveryStreamARN": "arn:aws:firehose:eu-west-2:xxx:deliverystream/firehose-test",
"destination": "arn:aws:es:eu-west-2:xxx:domain/elasticsearch-test",
"deliveryStreamVersionId": 1,
"message": "Error received from Elasticsearch cluster. <html><body><h1>503 Service
Unavailable</h1>\nNo server is available to handle this request.\n</body></html>",
"errorCode": "ES.ServiceException",
"processor": "arn:aws:lambda:eu-west-2:xxx:function:transform-test:$LATEST"
VPC 内的其他应用程序可以毫无问题地使用 Elasticsearch 服务。这似乎是 Firehose 特有的。
我已经阅读并重新阅读了文档,但无法弄清楚为什么相同的数据管道在公共 ES 域上运行良好,但在我的 VPC 内的 ES 域上运行良好。我已经仔细检查了所有角色、策略、安全组和子网。 Firehose 和 Elasticsearch 都使用相同的 VPC、安全组和子网。安全组的入站规则允许 HTTPS。这一切看起来都正确,但仍然出现错误,并且 Elastic 中没有任何内容被索引。
我还阅读了这篇 AWS 博客文章大约 15 次,但无济于事。 Ingest streaming data into Amazon Elasticsearch Service within the privacy of your VPC with Amazon Kinesis Data Firehose
【问题讨论】:
【参考方案1】:所以在经历了几天的痛苦之后,我意识到了我在设置 Firehose 时的错误/怪癖。
我的 Elasticsearch 集群是多可用区。创建 Firehose 时,我只是让它根据预先存在的 Elasticsearch 域选择默认安全组。我在 Firehose 上只定义了一个安全组。如果您的 Elasticsearch 在 VPC 中,则需要两个。
一个用于 Firehose 出站 一个用于 Elasticsearch 入站(您可能已经有了这个)然后他们需要使用 SG 规则连接在一起。
Firehose 传输流设置向导不会警告您只有一个安全组并且这不起作用。 (也许它适用于单可用区上的 Elasticsearch 域,但我还没有测试过。)
您必须在创建 Firehose 传输流之前创建两个必需的安全组。
为允许 HTTPS/433 出站流量的 Firehose 端点创建第一个安全组。 然后确保 Elasticsearch 域安全组允许入站 HTTPS/433 流量,特别是来自您刚刚创建的 Firehose 端点安全组的流量。
这是所需内容的图表(来自这篇博文:Ingest streaming data into Amazon Elasticsearch Service within the privacy of your VPC with Amazon Kinesis Data Firehose)
【讨论】:
以上是关于使用 Kinesis Firehose 时,VPC 内的 Elasticsearch 经常出现 503 错误的主要内容,如果未能解决你的问题,请参考以下文章
从 fluentd 发送到 aws kinesis firehose 时数据丢失
使用 Amazon Kinesis Data Firehose ElasticSearch Selivery 时是不是可以设置文档 ID
按事件时间对 Kinesis firehose S3 记录进行分区
使用 AWS kinesis-firehose 将数据写入文件