上次更新日期:2020 年 10 月 6 日
我无法将我的 Amazon CloudWatch Logs 流式传输至我的 Amazon Elasticsearch Service (Amazon ES) 域。如何解决此问题?
解决方法 我无法将多个 CloudWatch 日志组流式传输至相同的 Amazon ES 域在默认情况下,Amazon CloudWatch 只会为每个 Amazon ES 域创建一个 AWS Lambda 函数。如果您设置多个日志组以通过编列索引将数据传输到 Amazon ES 域,全部多个日志组均会调用相同的 Lambda 函数。当第一个日志组调用 Lambda 函数时,调用将会在 Amazon ES 域创建一个索引和一个类型字段。
针对 Elasticsearch 版本 6.0 或更高版本,您只能有一个映射类型。相同的规则也适用于 Elasticsearch 版本 5.x 至 6.x。如需关于 Elasticsearch 映射类型的更多信息,见 Elasticsearch 上的 What are mapping types?。
若其他日志组尝试调用相同的 Lambda 函数,调用将会失败,并显示以下错误消息:
"reason": "Rejecting mapping update to as the final mapping would have more than 1 type: ”
要解决此问题,使用以下语法更新您的 Lambda 函数:
var indexName = .join('.');
此语法会为流式传输至您的 Amazon ES 域的不同日志组创建多个索引。然后,保存更新后的 Lambda 函数,以便为流式传输至您的 Amazon ES 域的多个日志组创建独立的索引。
我无法在相同的 AWS 账户里流式传输至基于 VPC 的 Amazon ES 域重要提示:在将 CloudWatch 日志组流式传输至您的基于 VPC 的 Amazon ES 域之前,确保更新您的 AWS Identity and Access Management (IAM) 角色策略。附加到对应 Lambda 函数的 IAM 角色必须附加有 AWSLambdaVPCAccessExecutionRole 策略。
以下是采用 JSON 格式的 AWSLambdaVPCAccessExecutionRole策略:
{
"Version": "2012-10-17",
"Statement": ,
"Resource": "*"
}
]
}
注意:此托管策略使 Lambda 函数能够将 CloudWatch 日志组写入到 VPC 中的 Elasticsearch 集群。
在您为 Lambda 函数附加策略以后,开始将日志流式传输至您在 VPC 中的 Amazon ES 域。
当启用精细访问控制时,我无法将我的 CloudWatch 日志组流式传输至 Amazon ES 域如果通过精细访问控制将您的 CloudWatch Logs 流式传输至 Amazon ES 域,您可能会遇到以下权限错误:
"{\"statusCode\":403,\"responseBody\":{\"error\":{\"root_cause\": and User , requestedTenant=null]\"}],\"type\":\"security_exception\",\"reason\":\"no permissions for and User , requestedTenant=null]\"},\"status\":403}}"
如果您从 Lambda 函数日志收到此错误消息,则表示该角色映射不完整。
注意:在默认的情况下,Amazon ES 会为您创建一个 AWS Lambda 函数。
要解决此错误消息,执行以下步骤:
1.打开 Kibana。您可以在您的 Amazon ES 控制台的域摘要中找到 Kibana 的链接。
2.在左侧导航窗格中,单击锁定图标。
3.选择角色映射。
4.选择 all_access 和 security_manager 作为您的角色。
注意:all_access角色仅提供对 Elasticsearch 集群的访问权限。根据具体使用情况,您还可以向 Elasticsearch 集群添加精细访问控制。
5.为 all_access 编辑映射。
6.对于后端角色,添加 Lambda 函数的执行角色并选择提交。您的日志现在应流式传输至您的 Amazon ES 域。
有关角色映射的更多信息,请参阅将角色映射到用户。
集群块异常由以下原因导致:
可用存储空间不足 JVM 内存压力过高有关排查集群数据块异常问题的更多信息,请参阅 ClusterBlockException。</p