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

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

使用 Amazon OpenSearch 日志监控 CloudWatch 日志

亚马逊 OpenSearch 服务通过亚马逊 OpenSearch 日志公开以下日 CloudWatch 志:

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

注意

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

对于其日志, OpenSearch 使用 Apache Log4j 2 及其内置日志级别(从最低到最严重)TRACE,、DEBUGINFOWARNERROR和。FATAL

如果您启用错误日志, OpenSearch 服务会将WARNERROR、和的日志行发布FATAL到 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 服务控制台是允许向发布日志的最简单方法 CloudWatch。

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

  2. 在 “分析” 下,选择 “亚马逊 OpenSearch 服务”。

  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 日志支持每个区域 10 个资源策略。如果您计划为多个 OpenSearch 服务域启用日志,则应创建并重复使用包含多个日志组的更广泛的策略,以避免达到此限制。有关更新您的策略的步骤,请参阅启用日志发布 (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 服务授予写入日志组的权限。您必须在命令结尾处提供日志组的 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 日志支持每个区域 10 个资源策略。如果您计划为多个 OpenSearch 服务域启用分片慢日志,则应创建并重复使用包含多个日志组的更广泛的策略,以避免达到此限制。

如果您以后需要查看此策略,请使用 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 服务写入该组的权限。相关操作记录在《亚马逊 CloudWatch 日志 API 参考》中:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

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

Amazon 软件开发工具包(Android 和 iOS 软件开发工具包除外)支持《亚马逊 OpenSearch 服务 API 参考》中定义的所有操作,包括和--log-publishing-options选项。CreateDomain UpdateDomainConfig

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

启用日志发布 (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 服务写入日志组的权限:

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 服务域。访问策略允许用户 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 服务域上进行搜索。搜索请求慢速日志阈值是针对请求总花费时间配置的。这与分片请求慢日志不同,后者是为单个分片花费时间配置的。

您可以使用集群设置指定搜索请求慢日志。这与分片慢速日志不同,后者是通过索引设置启用的。例如,您可以通过 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 台。

  • S OpenSearch ervice 是否有权写入日志组? 检查 OpenSearch 服务控制台。

  • OpenSearch 服务域是否配置为发布到日志组? 检查 OpenSearch 服务控制台,使用 Amazon CLI describe-domain-config选项,或DescribeDomainConfig使用其中一个 SDK 调用。

  • OpenSearch 日志阈值是否足够低,以至于您的请求超出了这些阈值?

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

    GET domain-endpoint/_cluster/settings?flat_settings

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

    GET domain-endpoint/index/_settings?pretty

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

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

查看日志

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

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

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

  • 在中 CloudWatch,日志流名称的后缀为-index-slow-logs-search-slow-logs-application-logs、和,-audit-logs以帮助识别其内容。