使用 Amazon CloudWatch Logs Logs 监控弹性搜索日志 - Amazon Elasticsearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon CloudWatch Logs Logs 监控弹性搜索日志

Amazon Elasticsearch Service (Amazon ES) 通过 Amazon CloudWatch Logs 公开以下弹性搜索日志:

  • 错误日志

  • 搜索慢日志

  • 索引慢速日志

  • 审核日志

搜索慢速日志、索引慢速日志和错误日志,可用于排查性能和稳定性问题。审计日志跟踪用户活动,以达到合规性目的。所有日志都是已禁用默认为。如果启用,标准 CloudWatch 定价适用于。

注意

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

对于它的日志,弹性搜索使用阿帕奇 Log4j 2及其内置日志级别(从最不严重到最严重的)TRACEDEBUGINFOWARNERROR, 和FATAL

如果您启用错误日志,Amazon ES 会将WARNERROR, 和FATAL到 CloudWatch。亚马逊 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. 在导航窗格中的我的域下,选择要更新的域。

  4. 在存储库的日志选项卡上,选择设置对于您想要的日志。

  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 域启用日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。有关更新您的策略的步骤,请参阅启用日志发布 (Amazon CLI)

  7. 选择启用

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

如果您已启用慢速日志之一,请参阅设置慢日志的弹性搜索日志记录阈值。如果您启用审核日志,请参阅在 Kibana 中配置审核日志。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布 (Amazon 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: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}
AUDIT_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

如果您已启用慢速日志之一,请参阅设置慢日志的弹性搜索日志记录阈值。如果您启用审核日志,请参阅在 Kibana 中配置审核日志。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

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

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

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

您可以使用Amazon开发工具包

这些区域有:Amazon开发工具包(除 Android 和 iOS 开发工具包之外)支持在Amazon Elasticsearch Service 的配置 API 参考,包括--log-publishing-options对于的选项CreateElasticsearchDomainUpdateElasticsearchDomainConfig

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

启用日志发布(CloudFormation)

在您可以使用Amazon CloudFormation创建启用了日志发布的域,则首先需要创建 CloudWatch 日志组并授予 Amazon ES 写入该日志组的权限。在此示例中,我们将创建一个名为的日志组elasticsearch-logs,分配适当的权限,然后使用 CloudFormation 创建一个域,并为应用程序日志启用日志发布、搜索慢速日志和索引慢速日志。

首先,创建一个日志组:

aws logs create-log-group --log-group-name elasticsearch-logs

查找并记下日志组的 ARN:

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

在此示例中,ARN 是arn:aws:logs:us-east-1:123456789012:log-group:elasticsearch-logs:*

为 Amazon ES 授予日志组写入权限:

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:CreateLogStream"],"Resource": "arn:aws:logs:us-east-1:123456789012:log-group:elasticsearch-logs:*"}]}'

最后,创建以下 CloudFormation 堆栈,该堆栈生成启用了日志发布的 Amazon ES 域。访问策略允许根用户访问 Amazon Web Services 账户 将所有 HTTP 请求发出到该域:

Resources: ElasticsearchDomain: Type: "AWS::Elasticsearch::Domain" Properties: DomainName: my-domain ElasticsearchVersion: "7.10" ElasticsearchClusterConfig: InstanceCount: 2 InstanceType: "r6g.xlarge.elasticsearch" DedicatedMasterEnabled: true DedicatedMasterCount: 3 DedicatedMasterType: "r6g.xlarge.elasticsearch" EBSOptions: EBSEnabled: true VolumeSize: 10 VolumeType: "gp2" SnapshotOptions: AutomatedSnapshotStartHour: "0" AccessPolicies: Version: "2012-10-17" Statement: Effect: "Allow" Principal: AWS: "arn:aws:iam::123456789012:user/es-user" Action: "es:*" Resource: "arn:aws:es:us-east-1:123456789012:domain/my-domain/*" LogPublishingOptions: ES_APPLICATION_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:elasticsearch-logs:*" Enabled: true SEARCH_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:elasticsearch-logs:*" Enabled: true INDEX_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:elasticsearch-logs:*" Enabled: true

有关详细的语法信息,请参阅日志发布选项中的Amazon CloudFormation用户指南。

设置慢日志的弹性搜索日志记录阈值

默认情况下,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 Logs 组是否存在? 检查 CloudWatch 控制台。

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

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

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

    GET elasticsearch_domain_endpoint/index/_settings?pretty

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

使用亚马逊 ES 控制台或Amazon CLI确实停止 Elasticsearch 生成日志; 它只会停止发布这些日志。请务必检查索引设置,确定是否还需要这些慢速日志。

查看日志

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

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

  • Amazon ES 仅将每一行中的前 255000 个字符发布到 CloudWatch。其余任何内容都将被截断。对于审核日志,每条消息为 10,000 个字符。

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