Amazon CloudWatch Logs を用いて OpenSearch ログをモニタリングする - Amazon OpenSearch サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon CloudWatch Logs を用いて OpenSearch ログをモニタリングする

Amazon OpenSearch Service は、Amazon CloudWatch Logs を通じて以下の OpenSearch ログを公開します。

検索シャードスローログ、インデックス作成シャードスローログ、およびエラーログは、パフォーマンスと安定性の問題のトラブルシューティングに役立ちます。監査ログは、コンプライアンスの目的でユーザーのアクティビティを追跡します。すべてのログはデフォルトで無効になっています。有効にすると、標準の CloudWatch 料金が適用されます。

注記

エラーログは、OpenSearch および Elasticsearch バージョン 5.1 以降のでのみ利用できます。スローログは、すべてのバージョンの OpenSearch および Elasticsearch で利用できます。

ログについては、OpenSearch は、Apache Log4j 2 とその組み込みログレベル (昇順) の TRACEDEBUGINFOWARNERROR、および FATAL を使用します。

エラーログを有効にすると、OpenSearch Service によって、WARNERROR、および FATAL のログ行が CloudWatch に発行されます。OpenSearch サービスは、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 スクリプトのコンパイルの問題

  • 無効なクエリ

  • インデックス作成の問題

  • スナップショットの失敗

  • Index State Management の移行の失敗

注記

OpenSearch Service は、発生したすべてのエラーをログに記録しません。

ログ発行を有効にする (コンソール)

CloudWatch へのログの発行を有効にするには、OpenSearch Service コンソールを使用する方法が最も簡単です。

CloudWatch へのログの発行を有効にするには (コンソール)
  1. https://aws.amazon.com にアクセスし、[コンソールにサインイン] を選択します。

  2. [分析] の下で、[Amazon OpenSearch 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:*" } ] }

    Confused Deputy Problem (混乱した代理の問題) から自分を守るために、aws:SourceAccount および aws: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 ドメインでログを有効にする場合は、この制限に達しないように、複数のロググループを含む広範囲のポリシーを作成して再利用します。ポリシーを更新する手順については、「ログ発行の有効化 (AWS CLI)」を参照してください。

  7. [有効] を選択します。

    ドメインのステータスが [アクティブ] から [処理中] に変わります。ステータスは、ログの発行が有効になる前に [アクティブ] に戻る必要があります。この変更には通常 30 分かかりますが、ドメイン設定によってはさらに時間がかかる場合があります。

シャードスローログのいずれかを有効にしている場合は、「シャードスローログのしきい値設定」を参照してください。監査ログを有効にした場合は、「ステップ 2: OpenSearch Dashboards で、監査ログを有効にする」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

ログ発行の有効化 (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

これで、このロググループに書き込むための許可を 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-domain コマンドと update-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 Dashboards で、監査ログを有効にする」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

ログ発行の有効化 (AWS SDK)

ログの発行を有効にする前に、CloudWatch ロググループを作成してその ARN を取得し、そのロググループに書き込むための許可を OpenSearch Service に付与する必要があります。関連するオペレーションは Amazon CloudWatch Logs API リファレンスに記載されています。

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

これらのオペレーションには、AWS SDK を使用してアクセスできます。

AWS SDK (Android および iOS SDK を除く) は、CreateDomain および UpdateDomainConfig--log-publishing-options オプションを含む、「Amazon OpenSearch Service API リファレンス」で定義されているすべてのオペレーションをサポートします。

シャードスローログのいずれかを有効にしている場合は、「シャードスローログのしきい値設定」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

ログの発行を有効にする (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 ドメインを生成します。アクセスポリシーは、ドメインに対してすべての HTTP リクエストを実行することを AWS アカウントのユーザーに許可します。

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

構文の詳細については、AWS 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 コンソールを確認するか、AWS CLI describe-domain-config オプションを使用するか、いずれかの SDK を使用して DescribeDomainConfig を呼び出します。

  • OpenSearch ログしきい値が低くてリクエストが超過していないかどうか?

    ドメインの検索リクエストのスローログのしきい値を確認するには、次のコマンドを使用します。

    GET domain-endpoint/_cluster/settings?flat_settings

    インデックスのシャードスローログのしきい値を確認するには、次のコマンドを使用します。

    GET domain-endpoint/index/_settings?pretty

インデックスのスローログを無効にする場合は、変更したしきい値をデフォルト値の -1 に戻します。

OpenSearch Service コンソールまたは AWS CLI を使用して CloudWatch への発行を無効にしても、OpenSearch でのログ生成は停止されません。これらのログの発行が停止されるだけです。シャードスローログが不要になった場合はインデックス設定、検索リクエストのスローログが不要になった場合はドメイン設定を確認してください。

ログの表示

CloudWatchでアプリケーションとスローログを表示する方法は、その他の CloudWatch ログを表示する方法と同じです。詳細については、Amazon CloudWatch Logs ユーザーガイドの「ログデータの表示」を参照してください。

ログを表示する際の考慮事項は以下のとおりです。

  • OpenSearch Service は、各行の最初の 255,000 文字のみを CloudWatch に発行します。残りのコンテンツは切り捨てられます。監査ログの場合、それはメッセージあたり 10,000 文字です。

  • CloudWatch では、ログの内容を識別しやすいようにログストリーム名のサフィックスとして -index-slow-logs-search-slow-logs-application-logs、および -audit-logs が使用されます。