使用 Amazon CloudWatch Logs 监控 OpenSearch 日志 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon CloudWatch Logs 监控 OpenSearch 日志

Amazon OpenSearch Service 通过 Amazon CloudWatch Logs 公开以下 OpenSearch 日志:

搜索分片慢速日志、索引分片慢速日志和错误日志,有助于排查性能和稳定性问题。审核日志跟踪用户活动,以达到合规性目的。所有日志默认情况下已禁用。如果启用,则应用标准 CloudWatch 定价

注意

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

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

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

  • org.opensearch.index.mapper.MapperParsingException

  • org.opensearch.index.query.QueryShardException

  • org.opensearch.action.search.SearchPhaseExecutionException

  • org.opensearch.common.util.concurrent.OpenSearchRejectedExecutionException

  • java.lang.IllegalArgumentException

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

  • Painless 脚本编译问题

  • 无效的查询

  • 索引问题

  • 快照失败

  • 索引状态管理迁移失败

注意

OpenSearch Service 不会记录所有发生的错误。

启用日志发布(控制台)

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

启用将日志发布到 CloudWatch(控制台)
  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics 下,选择 Amazon OpenSearch Service

  3. 选择要更新的域。

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

    建议您在策略中使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。源帐户是域的所有者,并且源 ARN 是域的 ARN。您的域必须在服务软件 R20211203 或更高版本上才能添加这些条件键。

    例如,您可以将以下条件块添加到策略:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
    重要

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

  7. 请选择 启用

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

如果您已启用其中的一种分片慢速日志,请参阅设置分片慢速日志阈值。如果启用了审核日志,请参阅 步骤 2:在 OpenSearch 控制面板中打开审计日志记录。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布 (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

现在,可以为 OpenSearch Service 授予日志组写入权限。您必须在命令结尾处提供日志组的 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 个资源策略。如果您计划为多个 OpenSearch Service 域启用分片慢速日志,应创建并重用包含多个日志组的更宽泛策略,以避免达到此限制。

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

最后,可以使用 --log-publishing-options 选项来启用发布。该选项的语法与 create-domainupdate-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 opensearch update-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 运行同一命令。

如果您已启用其中的一种分片慢速日志,请参阅设置分片慢速日志阈值。如果启用了审核日志,请参阅 步骤 2:在 OpenSearch 控制面板中打开审计日志记录。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布 (Amazon SDK)

您必须先创建一个 CloudWatch 日志组,获取其 ARN,并为 OpenSearch Service 授予日志组写入权限,然后才能启用日志发布。相关操作记录在 Amazon CloudWatch Logs API 参考中:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

您可以使用 Amazon SDK 访问这些操作。

Amazon SDK(除 Android 和 iOS SDK 之外)支持在 Amazon OpenSearch Service API 参考中定义的所有操作,包括 CreateDomainUpdateDomainConfig--log-publishing-options 选项。

如果您已启用其中的一种分片慢速日志,请参阅设置分片慢速日志阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布 (CloudFormation)

在此示例中,我们将使用 CloudFormation 创建一个名为 opensearch-logs 的日志组,分配相应的权限,然后创建一个域并为应用程序日志、搜索分片慢速日志和索引慢速日志启用日志发布功能。

您需要创建一个 CloudWatch 日志组,才能启用日志发布:

Resources: OpenSearchLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: opensearch-logs Outputs: Arn: Value: 'Fn::GetAtt': - OpenSearchLogGroup - Arn

模板将输出日志组的 ARN。在本例中,ARN 为 arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs

使用 ARN,创建一个资源策略来授予 OpenSearch Service 写入日志组的权限:

Resources: OpenSearchLogPolicy: Type: AWS::Logs::ResourcePolicy Properties: PolicyName: my-policy PolicyDocument: "{ \"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:opensearch-logs:*\"}]}"

最后,创建以下 CloudFormation 堆栈,该堆栈使用具有日志发布的 OpenSearch Service 域。访问策略允许 Amazon Web Services 账户 的用户向域发出所有 HTTP 请求:

Resources: OpenSearchServiceDomain: Type: "AWS::OpenSearchService::Domain" Properties: DomainName: my-domain EngineVersion: "OpenSearch_1.0" ClusterConfig: InstanceCount: 2 InstanceType: "r6g.xlarge.search" DedicatedMasterEnabled: true DedicatedMasterCount: 3 DedicatedMasterType: "r6g.xlarge.search" EBSOptions: EBSEnabled: true VolumeSize: 10 VolumeType: "gp2" 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:opensearch-logs" Enabled: true SEARCH_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true INDEX_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true

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

设置搜索请求慢速日志阈值

搜索请求慢速日志适用于在版本 2.13 及更高版本上运行的 OpenSearch Service 域上的搜索。搜索请求慢速日志阈值是针对请求总用时配置的。这与分片请求慢速日志不同,后者是针对单个分片用时配置的。

您可以使用集群设置来指定搜索请求慢速日志。这与分片慢速日志不同,后者是使用索引设置启用的。例如,您可以通过 OpenSearch REST API 指定以下设置:

PUT domain-endpoint/_cluster/settings { "transient": { "cluster.search.request.slowlog.threshold.warn": "5s", "cluster.search.request.slowlog.threshold.info": "2s" } }

设置分片慢速日志阈值

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

例如,您可以通过 OpenSearch REST API 指定这些设置:

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

测试慢速日志

要测试搜索请求和分片慢速日志是否发布成功,请考虑首先使用非常低的值来验证日志是否出现在 CloudWatch 中,然后将阈值增大到更实用的级别。

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

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

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

  • OpenSearch Service 域是否已配置为发布到该日志组? 检查 OpenSearch Service 控制台,使用 Amazon CLI describe-domain-config 选项,或者使用某个 SDK 调用 DescribeDomainConfig

  • OpenSearch 日志记录阈值是否足够低,让您的请求超过这些阈值?

    要检查某个域的搜索请求慢速日志阈值,请使用以下命令:

    GET domain-endpoint/_cluster/settings?flat_settings

    要检查某个索引的分片慢速日志阈值,请使用以下命令:

    GET domain-endpoint/index/_settings?pretty

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

使用 OpenSearch Service 控制台或 禁用发布到 CloudWatch Amazon CLI 不阻止 OpenSearch 生成日志;只会停止发布这些日志。如果不再需要分片慢速日志,请务必检查索引设置;如果不再需要搜索请求慢速日志,请务必检查域设置。

查看日志

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

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

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

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