当我在我的 Amazon OpenSearch Service 域中开启搜索慢速日志时,收到错误。或者,我在我的 Amazon CloudWatch 日志组中看不到慢速日志。
解决方法
无法创建资源访问策略错误
如果您的 AWS 账户在单个 AWS 区域中超过 10 个资源策略,则您会在 CloudWatch 日志中收到以下错误:
“Unable to create the Resource Access Policy - You have reached the maximum limit for number of Resource Access Policies for CloudWatch Logs.Please select an existing policy and edit it or delete an older policy and try again.”
要解决此错误,请创建包含多个日志组的资源策略:
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Resource": [
"ARN-Log-Group-1",
"ARN-Log-Group-2",
"ARN-Log-Group-3",
"ARN-Log-Group-4"
]
}
]
}
**注意:**将 region 替换为您的区域。将 account-id 替换为您的账户 ID。
**重要事项:**您无法增加 AWS Identity and Access Management (IAM) 策略配额。
慢速日志无法传送
如果您看不到传送到 CloudWatch 的慢速日志,请查看您的 IAM 策略或 OpenSearch Service 阈值。
您必须配置 IAM 策略才能记录查询,因为 OpenSearch Service 需要写入 CloudWatch 日志的权限。
要创建您的 IAM 策略,请完成以下步骤:
- 打开 OpenSearch Service 控制台。
- 选择您的域。
- 选择 Logs(日志)选项卡,然后选择 Search Slow Logs(搜索慢速日志)。
- 选择 Select Setup(选择设置)。
- 使用您的资源值更新您的 IAM 策略:
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Resource": "arn:aws:region:account_id:log-group:/aws/aes/domains/myes/search-logs:*"
}
]
}
**注意:**将 region 替换为您的区域。将 account-id 替换为您的账户 ID。
- (可选)为了提高安全性,请将 aws:SourceAccount 和 aws:SourceArn 条件键添加到您的策略中:
{
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account-id"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name"
}
}
}
**注意:**将 region 替换为您的区域。将 account-id 替换为您的账户 ID。将 domain-name 替换为您的域名。
- 选择 Enable(启用)。
有关详细信息,请参阅启用日志发布(控制台)。
默认情况下,OpenSearch Service 已关闭日志记录。您可以使用 API 调用来设置日志级别和计时阈值。这些设置是动态的,因此您可以更新正在运行的集群上的设置,OpenSearch Service 会立即应用这些设置。
为您的域设置适当的时机阈值。如果您的所有请求在设定的阈值之前完成,则 CloudWatch 不会将您的日志传送到您的日志组。您可以为每个调试级别(TRACE、DEBUG、INFO 和 WARN)设置单独的索引级别阈值。
例如,在 OpenSearch 控制面板中将索引的 WARN 调试级别的阈值设置为 10 秒:
PUT /YOURINDEXNAME/_settings
{
"index.search.slowlog.threshold.query.warn": "10s"
}
**注意:**将 YOURINDEXNAME 替换为您的索引名称。
要使用 curl,请运行以下命令:
curl -XPUT http://your_domain_endpoint/index/_settings -d '{"index.search.slowlog.threshold.query.level":"10s"}'
**注意:**将 your_domain_endpoint 替换为您的域端点。将 10s 替换为要使用的日志阈值。
要记录域的所有查询,可以将 TRACE 设置为 0 毫秒。但是,记录所有查询会占用大量资源,这可能会影响您的域性能。要关闭日志记录,请将阈值设置为 -1。
要检查阈值,请运行以下命令:
GET /YOURINDEXNAME/_settings?pretty
**注意:**将 YOURINDEXNAME 替换为您的索引名称。
OpenSearch Service 会记录任何超过定义阈值的查询。
在集群级别为所有新索引应用慢速日志设置
要在集群级别为所有新索引应用慢速日志设置,请使用索引模板。OpenSearch Service 中没有针对索引慢速日志的集群范围设置。
创建包含慢速日志设置的索引模板:
PUT _template/all_indices_template
{
"index_patterns": ["*"], // This applies to all indices
"settings": {
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "2s",
"index.indexing.slowlog.threshold.index.trace": "500ms"
}
}
前面的模板会自动将设置应用于您在设置模板后创建的所有新索引。
最佳实践
执行以下操作:
- 逐一更新配置。
- 要识别慢速搜索查询,请为查询阶段和提取阶段设置阈值。
- 使用较低的阈值进行测试。缓慢提高阈值,仅记录影响性能或需要优化的查询。
- 为您的集群和使用案例选择正确数量的分片以优化集群性能。有关详细信息,请参阅分片策略。
- 对于慢速日志,请在 TRACE、DEBUG、INFO 和 WARN 调试级别开启日志记录。每个调试级别记录不同类别的信息。根据请求状态开启日志记录。
相关信息
Analyzing Amazon Elasticsearch Service Slow Logs Using Amazon CloudWatch Logs Streaming and Kibana(使用 Amazon CloudWatch Logs 流式传输和 Kibana 分析 Amazon Elasticsearch Service 慢速日志)
如何对 CloudWatch Logs 进行故障排除,使其可以流式传输到我的 OpenSearch Service 域?
Viewing Amazon OpenSearch Service error logs(查看 Amazon OpenSearch Service 错误日志)