配置日志 - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配置日志

Amazon ES 通过 Amazon CloudWatch Logs 公开三种 Elasticsearch 日志:错误日志、搜索慢速日志和索引慢速日志。这些日志有助于排查性能和稳定性问题,但默认情况下处于禁用 状态。如果启用,则应用标准 CloudWatch 定价

注意

错误日志仅可用于 Elasticsearch 版本 5.1 和更高版本。慢速日志可用于所有 Elasticsearch 版本。

对于其日志,Elasticsearch 使用 Apache Log4j 2 及其内置日志级别(按最不严重到最严重的顺序排列):TRACEDEBUGINFOWARNERRORFATAL

如果您启用错误日志,Amazon ES 会将 WARNERRORFATAL 的日志行发布到 CloudWatch。Amazon ES 还会从 DEBUG 级别发布几个异常,其中包括:

  • org.elasticsearch.index.mapper.MapperParsingException

  • org.elasticsearch.index.query.QueryShardException

  • org.elasticsearch.action.search.SearchPhaseExecutionException

  • org.elasticsearch.common.util.concurrent.EsRejectedExecutionException

  • java.lang.IllegalArgumentException

错误日志在许多情况下有助于诊断,包括:

  • Painless 脚本编译问题

  • 无效的查询

  • 索引问题

  • 快照失败

启用日志发布(控制台)

Amazon ES 控制台是启用将日志发布到 CloudWatch 的最简单方法。

启用将日志发布到 CloudWatch(控制台)

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics 下,选择 Elasticsearch Service

  3. 在导航窗格中的 My domains (我的域) 下,选择要更新的域。

  4. Logs 选项卡上,为所需日志选择 Enable

  5. 创建 CloudWatch 日志组,或选择现有日志组。

    注意

    如果计划启用多个日志,建议将它们发布到相应的日志组。这样分开更便于进行日志扫描。

  6. 选择一个包含适当权限的访问策略,或使用控制台提供的 JSON 创建策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn" } ] }
    重要

    CloudWatch Logs 支持每个区域 10 个资源策略。如果您计划针对若干 Amazon ES 域启用日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。有关更新您的策略的步骤,请参阅启用日志发布 (AWS CLI)

  7. 选择 Enable

    您的域状态将从 Active 更改为 Processing。在启用日志发布之前,必须重新回到 Active 状态。此项更改通常需要 30 分钟,但可能需要更长时间,具体取决于您的域配置。

如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布 (AWS CLI)

您需要有一个 CloudWatch 日志组,才能启用日志发布。如果还没有日志组,可以使用以下命令创建一个:

aws logs create-log-group --log-group-name my-log-group

输入下一命令查找日志组的 ARN,然后将它记下来

aws logs describe-log-groups --log-group-name my-log-group

现在,可以为 Amazon ES 授予日志组写入权限。您必须在命令结尾处提供日志组的 ARN:

aws logs put-resource-policy --policy-name my-policy --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents","logs:PutLogEventsBatch","logs:CreateLogStream"],"Resource": "cw_log_group_arn"}]}'
重要

CloudWatch Logs 支持每个区域 10 个资源策略。如果您计划针对若干 Amazon ES 域启用慢速日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。

如果您以后需要查看此策略,请使用 aws logs describe-resource-policies 命令。要更新策略,请发出带有新策略文档的相同 aws logs put-resource-policy 命令。

最后,可以使用 --log-publishing-options 选项来启用发布。该选项的语法与 create-elasticsearch-domainupdate-elasticsearch-domain-config 命令相同。

参数 有效值
--log-publishing-options SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
ES_APPLICATION_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
注意

如果计划启用多个日志,建议将它们发布到相应的日志组。这样分开更便于进行日志扫描。

示例

下面的示例对指定域启用搜索和索引慢速日志的发布:

aws es update-elasticsearch-domain-config --domain-name my-domain --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"

要禁用到 CloudWatch 的发布,请在 Enabled=false 的情况下运行同一命令。

如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布(AWS 开发工具包)

您必须先创建一个 CloudWatch 日志组,获取其 ARN,并为 Amazon ES 授予日志组写入权限,然后才能启用日志发布。Amazon CloudWatch Logs API Reference 介绍了相关操作:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

您可以使用 AWS 开发工具包访问这些操作。

AWS 开发工具包(除 Android 和 iOS 开发工具包之外)支持在 Amazon Elasticsearch Service 配置 API 参考 中定义的所有操作,包括 CreateElasticsearchDomainUpdateElasticsearchDomainConfig--log-publishing-options 选项。

如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

为慢速日志设置 Elasticsearch 日志记录阈值

默认情况下,Elasticsearch 禁用慢速日志。在启用到 CloudWatch 的慢速日志发布 后,仍必须为每个 Elasticsearch 索引指定日志记录阈值。这些阈值精确定义应在哪个日志级别记录哪些内容。

您可以通过 Elasticsearch REST API 指定这些设置:

PUT elasticsearch_domain_endpoint/index/_settings { "index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.query.info": "2s" }

要测试慢速日志是否发布成功,请考虑从非常值开始验证日志是否出现在 CloudWatch 中,然后将阈值增大到更有用的级别。

如果日志没有显示,请检查以下内容:

  • CloudWatch 日志组是否存在? 检查 CloudWatch 控制台。

  • Amazon ES 是否有日志组写入权限? 检查 Amazon ES 控制台。

  • Amazon ES 域是否已配置为发布到该日志组? 检查 Amazon ES 控制台,使用 AWS CLI describe-elasticsearch-domain-config 选项,或者使用某个开发工具包调用 DescribeElasticsearchDomainConfig

  • Elasticsearch 日志记录阈值是否足够低,让您的请求超过这些阈值? 要查看索引阈值,请使用以下命令:

    GET elasticsearch_domain_endpoint/index/_settings?pretty

如果要禁用索引的慢速日志,请将您更改的任何阈值恢复为其默认值 -1

使用 Amazon ES 控制台或 AWS CLI 禁用到 CloudWatch 的发布 会阻止 Elasticsearch 生成日志;只会停止发布 这些日志。请务必检查索引设置,确定是否还需要这些慢速日志。

查看日志

在 CloudWatch 中查看应用程序和慢速日志,方法与查看任何其他 CloudWatch 日志一样。有关更多信息,请参阅 Amazon CloudWatch Logs User Guide 中的查看日志数据

下面是查看日志时的一些注意事项:

  • Amazon ES 仅将每一行中的前 255000 个字符发布到 CloudWatch。其余任何内容都将被截断。

  • 在 CloudWatch 中,日志流名称包含后缀 -index-slow-logs-search-slow-logs-es-application-logs 以帮助标识其内容。