Amazon OpenSearch Service のスローログに関連するトラブルシューティング方法を教えてください。
Amazon OpenSearch Service ドメインでスローログ検索を有効にすると、エラーが発生するか、Amazon CloudWatch ロググループにスローログが表示されません。
解決策
リソースのアクセスポリシー作成に関するエラー
AWS アカウントが単一 AWS リージョン内に 10 よりも多くリソースポリシーを配置した場合、CloudWatch Logs に次のエラーが表示されます。
"Unable to create the Resource Access Policy - You have reached the maximum limit for number of Resource Access Policies for CloudWatch Logs.Please select an existing policy and edit it or delete an older policy and try again." (既存ポリシーを選択して編集するか、古いポリシーを削除してから再試行してください)
このエラーを解決するには、複数のロググループを含むリソースポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": [ "ARN-Log-Group-1", "ARN-Log-Group-2", "ARN-Log-Group-3", "ARN-Log-Group-4" ] } ] }
注: region を実際のリージョンに置き換えてください。account-id をアカウント ID に置き換えてください。
重要: AWS Identity and Access Management (IAM) ポリシーのクォータを増やすことはできません。
スローログが配信されない
CloudWatch にスローログが配信されない場合は、IAM ポリシーまたは OpenSearch Service のしきい値を確認します。
OpenSearch Service には CloudWatch ログへの書き込み権限が必要なため、IAM ポリシーの構成でクエリの記録を有効にする必要があります。
IAM ポリシーを更新するには、次の手順を実行します。
- OpenSearch Service コンソールを開きます。
- ドメインを選択します。
- [ログ] タブを選択し、[スローログの検索] を選択します。
- [セットアップを選択] を選択します。
- IAM ポリシーをリソース値で更新します。
注: region を実際のリージョンに置き換えてください。account-id をアカウント ID に置き換えてください。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "arn:aws:region:account_id:log-group:/aws/aes/domains/myes/search-logs:*" } ] } - (オプション) ポリシーに aws:SourceAccount、aws:SourceArn の各条件キーを追加し、セキュリティを強化します。
注: region を実際のリージョンに置き換えてください。account-id をアカウント ID に置き換えてください。domain-name をドメイン名に置き換えてください。{ "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } } } - [有効] を選択します。
詳細については、「ログ発行を有効にする (コンソール)」を参照してください。
デフォルトでは、OpenSearch Service のログ記録は無効です。API コールを使用すると、ログレベルとタイミングのしきい値を設定できます。これらの設定は動的なため、実行中のクラスターに対する設定を更新できます。OpenSearch Service は、その変更を即時適用します。
ドメインに適切なタイミング閾値を設定します。すべてのリクエストが設定されたしきい値より前に完了した場合、CloudWatch はロググループにログを配信しません。デバッグレベル (TRACE、DEBUG、INFO、WARN) ごとに、インデックスレベルのしきい値を個別に設定できます。
たとえば、OpenSearch Dashboards では、インデックスに対する WARN デバッグレベルのしきい値を 10 秒に設定できます。
PUT /YOURINDEXNAME/_settings { "index.search.slowlog.threshold.query.warn": "10s" }
注: YOURINDEXNAME をインデックス名に置き換えてください。
curl では、次のコマンドを実行します。
curl -XPUT http://your_domain_endpoint/index/_settings -d '{"index.search.slowlog.threshold.query.level":"10s"}'
注: your_domain_endpoint をドメインエンドポイントに置き換えてください。10s を目的のログしきい値に置き換えてください。
ドメインでのすべてのクエリを記録する場合は、TRACE を 0 ミリ秒に設定します。ただし、すべてのクエリを記録するとリソースを大量に消費するため、ドメインのパフォーマンスが影響を受ける可能性があります。ログ記録を無効にする場合は、しきい値を -1 に設定します。
しきい値を確認するには、次のコマンドを実行します。
GET /YOURINDEXNAME/_settings?pretty
注: YOURINDEXNAME をインデックス名に置き換えてください。
OpenSearch Service は、定義されたしきい値を超えるクエリをすべて記録します。
クラスターレベルで、すべての新しいインデックスにスローログ設定を適用する
クラスターレベルで、すべての新しいインデックスにスローログ設定を適用するには、インデックステンプレートを使用します。OpenSearch Service には、クラスター全体を対象とするインデックススローログの設定は存在しません。
スローログ設定を含むインデックステンプレートを作成します。
PUT _template/all_indices_template { "index_patterns": ["*"], // This applies to all indices "settings": { "index.indexing.slowlog.threshold.index.warn": "10s", "index.indexing.slowlog.threshold.index.info": "5s", "index.indexing.slowlog.threshold.index.debug": "2s", "index.indexing.slowlog.threshold.index.trace": "500ms" } }
上記のテンプレートは、このテンプレートを設定した後に作成したすべての新規インデックスに対し、自動で設定を適用します。
ベストプラクティス
次の手順を実行します。
- 構成の更新は、一度に 1 つずつ行います。
- 低速な検索クエリを特定するには、クエリフェーズとフェッチフェーズの両方にしきい値を設定します。
- 低いしきい値でテストを行います。しきい値を徐々に増やすと、パフォーマンスに影響するクエリや最適化が必要なクエリのみをログに記録できます。
- クラスターとユースケースに適したシャード数を選択し、クラスターのパフォーマンスを最適化します。詳細については、「シャード戦略」を参照してください。
- スローログでは、TRACE、DEBUG、INFO、WARN の各レベルでログ記録を有効にします。各デバッグレベルは、異なるカテゴリの情報を記録します。リクエストステータスに応じてログ記録を有効にします。
関連情報
Amazon CloudWatch Logs ストリーミングと Kibana を使用して Amazon Elasticsearch Service のスローログを分析する
OpenSearch Service ドメインへのストリーミングを行うために、CloudWatch Logs をトラブルシューティングする方法を教えてください
