如何对 Amazon Elasticsearch Service 中的慢速日志进行问题排查?

上次更新时间:2020 年 8 月 26 日

我为 Amazon Elasticsearch Service (Amazon ES) 域启用了 Elasticsearch 搜索慢速日志。但是我收到错误提示,或者慢速日志不显示在 Amazon CloudWatch 日志组中。如何解决此问题?

解决方法

当我尝试设置慢速日志时收到错误提示

如果您的 AWS 账户超过了所在区域的 10 个资源策略,您将在 Amazon CloudWatch Logs 中收到以下错误消息:

"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"
        }
    ]
}

注意:AWS Identity and Access Management (IAM) 策略限制无法提高。

我没有看到任何慢速日志传送

如果您没有看到慢速日志传送到 CloudWatch,请检查 IAM 策略或 Amazon ES 阈值。

由于 Amazon ES 需要写入 CloudWatch Logs 的权限,因此您必须具有适当的 IAM 策略才能记录查询。要更新您的 IAM 策略,请导航到 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:logs:us-east-1:588671893395:log-group:/aws/aes/domains/myes/search-logs:*"
    }
  ]
}

此外,请务必为您的 Amazon ES 域设置适当的时间阈值。例如,如果所有请求都在设定的阈值之内完成,日志就不会传送到日志组。

您还可以为每个调试级别(TRACE、DEBUG、INFO 和 WARN)设置单独的索引级阈值。在以下示例中,对于 Kibana 中的 YOURINDEXNAME 索引,WARN 调试级别的阈值设置为 10 秒:

PUT /YOURINDEXNAME/_settings{"index.search.slowlog.threshold.query.warn": "10s"}

注意:您可以将 TRACE 设置为“0”毫秒,这样做将在日志中记录 Amazon ES 域的所有查询。但是,记录所有查询可能会影响 Amazon ES 域的性能,因为这是一项资源密集型操作。

然后,使用以下命令检查阈值:

GET/YOURINDEXNAME/_settings?pretty

Amazon ES 会记录超出定义阈值的所有查询。

最佳实践

  • 避免同时进行多个配置更改(例如启用或禁用发布到 CloudWatch 的日志)。一次进行过多的配置更改会触发多个蓝/绿部署。多个蓝/绿部署可能会导致 Amazon ES 域卡在处理状态。有关蓝/绿部署的更多信息,请参阅配置更改
  • 设置查询阶段和获取阶段的阈值,以识别慢速搜索查询。
  • 使用较低的阈值进行测试,慢慢增加阈值,以便仅记录影响性能或需要优化的查询。
  • 为 Elasticsearch 集群选择适当数量的分区,以优化集群性能。有关分区维护的更多信息,请参阅 Amazon Elasticsearch Service 最佳实践
  • 对于慢速日志,请在 TRACE、DEBUG、INFO 和 WARN 调试级别启用日志记录。由于每个调试级别记录不同类别的信息,因此最佳做法是根据请求状态启用日志记录。