

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

# Amazon CloudWatch Logs を用いて OpenSearch ログをモニタリングする
<a name="createdomain-configure-slow-logs"></a>

Amazon OpenSearch Service は、Amazon CloudWatch Logs を通じて以下の OpenSearch ログを公開します。
+ エラーログ
+ [検索リクエストのスローログ](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#search-request-slow-logs)
+ [シャードスローログ](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#shard-slow-logs)
+ [監査ログ](audit-logs.md)

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

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

ログについては、OpenSearch は、[Apache Log4j 2](https://logging.apache.org/log4j/2.x/) とその組み込みログレベル (昇順) の `TRACE`、`DEBUG`、`INFO`、`WARN`、`ERROR`、および `FATAL` を使用します。

エラーログを有効にすると、OpenSearch Service によって、`WARN`、`ERROR`、および `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 は、発生したすべてのエラーをログに記録しません。

**Topics**
+ [ログ発行を有効にする (コンソール)](#createdomain-configure-slow-logs-console)
+ [ログ発行の有効化 (AWS CLI)](#createdomain-configure-slow-logs-cli)
+ [ログ発行 (AWS SDKs) の有効化](#createdomain-configure-slow-logs-sdk)
+ [ログの発行を有効にする (CloudFormation)](#createdomain-configure-slow-logs-cfn)
+ [検索リクエストスのスローログのしきい値設定](#createdomain-configure-search-request-slow-logs)
+ [シャードスローログのしきい値設定](#createdomain-configure-slow-logs-indices)
+ [スローログのテスト](#createdomain-configure-slow-logs-testing)
+ [ログの表示](#createdomain-configure-slow-logs-viewing)

## ログ発行を有効にする (コンソール)
<a name="createdomain-configure-slow-logs-console"></a>

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

**CloudWatch へのログの発行を有効にするには (コンソール)**

1. [aws.amazon.com](https://aws.amazon.com/) に移動し、**[サインイン]** を選択して認証情報を指定します。

1. **[分析]** の下で、**[Amazon OpenSearch Service]** を選択します。

1. 更新するドメインを選択します。

1. [**ログ**] タブで、ログタイプを選択し、[**有効化**] を選択します。

1. 新しい CloudWatch ロググループを作成するか、既存のロググループを選択します。
**注記**  
複数のログを有効にする場合は、各ログを個別にロググループに発行することをお勧めします。分離することで、ログをスキャンしやすくなります。

1. 適切なアクセス権限を含むアクセスポリシーを選択するか、コンソールに用意された JSON を使用してポリシーを作成します。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "es.amazonaws.com"
         },
         "Action": [
           "logs:PutLogEvents",
           "logs:CreateLogStream"
         ],
         "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:cw_log_group_name:*"
       }
     ]
   }
   ```

------

   [Confused Deputy Problem (混乱した代理の問題)](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) から自分を守るために、`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 個のリソースポリシー](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutResourcePolicy.html)がサポートされます。複数の OpenSearch Service ドメインでログを有効にする場合は、この制限に達しないように、複数のロググループを含む広範囲のポリシーを作成して再利用します。ポリシーを更新する手順については、「[ログ発行の有効化 (AWS CLI)](#createdomain-configure-slow-logs-cli)」を参照してください。

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

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

シャードスローログのいずれかを有効にしている場合は、「[シャードスローログのしきい値設定](#createdomain-configure-slow-logs-indices)」を参照してください。監査ログを有効にした場合は、「[ステップ 2: OpenSearch Dashboards で、監査ログを有効にする](audit-logs.md#audit-log-dashboards-ui)」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

## ログ発行の有効化 (AWS CLI)
<a name="createdomain-configure-slow-logs-cli"></a>

ログの発行を有効にする前に、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 個のリソースポリシー](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutResourcePolicy.html)がサポートされます。複数の OpenSearch Service ドメインでシャードスローログを有効にする場合は、複数のロググループが含まれている適用範囲のより広いポリシーを作成して再利用し、この制限に達しないようにします。

後でこのポリシーを確認する必要がある場合は、`aws logs describe-resource-policies` コマンドを使用します。ポリシーを更新するには、新しいポリシードキュメントで同じ `aws logs put-resource-policy` コマンドを実行します。

最後に、`--log-publishing-options` オプションを使用して発行を有効化できます。オプションの構文は、`create-domain` コマンドと `update-domain-config` コマンドのどちらでも同じです。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/createdomain-configure-slow-logs.html)

**注記**  
複数のログを有効にする場合は、各ログを個別にロググループに発行することをお勧めします。分離することで、ログをスキャンしやすくなります。

**例**

次の例では、指定されたドメインに対して検索およびインデックス作成のシャードスローログの発行を有効にします。

```
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` を使用して同じコマンドを実行します。

シャードスローログのいずれかを有効にしている場合は、「[シャードスローログのしきい値設定](#createdomain-configure-slow-logs-indices)」を参照してください。監査ログを有効にした場合は、「[ステップ 2: OpenSearch Dashboards で、監査ログを有効にする](audit-logs.md#audit-log-dashboards-ui)」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

## ログ発行 (AWS SDKs) の有効化
<a name="createdomain-configure-slow-logs-sdk"></a>

ログの発行を有効にする前に、CloudWatch ロググループを作成してその ARN を取得し、そのロググループに書き込むための許可を OpenSearch Service に付与する必要があります。関連するオペレーションは [Amazon CloudWatch Logs API リファレンス](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/)に記載されています。
+ `CreateLogGroup`
+ `DescribeLogGroup`
+ `PutResourcePolicy`

これらのオペレーションには、[AWS SDK](https://aws.amazon.com/tools/#sdk) を使用してアクセスできます。

 AWS SDKs (Android および iOS SDKs を除く) は、 `CreateDomain`および `--log-publishing-options`のオプションを含め、[Amazon OpenSearch Service API リファレンス](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)で定義されているすべてのオペレーションをサポートします`UpdateDomainConfig`。

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

## ログの発行を有効にする (CloudFormation)
<a name="createdomain-configure-slow-logs-cfn"></a>

この例では、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 ドメインを生成します。アクセスポリシーは、 のユーザーがドメイン AWS アカウント へのすべての 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
```

構文の詳細については、*CloudFormation ユーザーガイド*の「[ログの発行オプション](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-logpublishingoption.html)」を参照してください。

## 検索リクエストスのスローログのしきい値設定
<a name="createdomain-configure-search-request-slow-logs"></a>

[検索リクエストのスローログ](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#search-request-slow-logs)は、バージョン 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"
  }
}
```

**注記**  
`PUT /_cluster/settings` エンドポイントは Amazon OpenSearch Service で制限されています。このリクエストを送信するとエラーが返されます。シャードスローログのしきい値`Your request: '/_cluster/settings' payload is not allowed.`を設定するには、代わりにインデックスレベルの設定を使用します。例えば、次のようになります。  

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

## シャードスローログのしきい値設定
<a name="createdomain-configure-slow-logs-indices"></a>

OpenSearch では、デフォルトで[シャードスローログ](https://opensearch.org/docs/latest/install-and-configure/configuring-opensearch/logs/#shard-slow-logs)が無効になっています。CloudWatch へのシャードスローログの*発行*を有効にしたら、さらに OpenSearch インデックスごとにログしきい値を指定する必要があります。これらのしきい値は、ログに記録する内容とログレベルを正確に定義します。

例えば、次の設定は、OpenSearch REST API を使用して指定できます。

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

## スローログのテスト
<a name="createdomain-configure-slow-logs-testing"></a>

検索リクエストのスローログとシャードスローログの正常な発行をテストするには、極度に低い値から開始してログが CloudWatch に表示されることを確認し、その後、しきい値をより有用なレベルに高めます。

ログが表示されない場合は、以下を確認してください。
+ CloudWatch ロググループが存在しているかどうか? CloudWatch コンソールを確認します。
+ ロググループに書き込むための許可が OpenSearch Service にあるかどうか? OpenSearch Service コンソールを確認します。
+ OpenSearch Service ドメインはロググループに発行するように設定されているかどうか? OpenSearch Service コンソールを確認するか、 AWS CLI `describe-domain-config`オプションを使用するか、いずれかの SDK `DescribeDomainConfig`を使用して を呼び出します。 SDKs
+ OpenSearch ログしきい値が低くてリクエストが超過していないかどうか?

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

  ```
  GET domain-endpoint/_cluster/settings?flat_settings
  ```

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

  ```
  GET domain-endpoint/index/_settings?pretty
  ```

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

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

## ログの表示
<a name="createdomain-configure-slow-logs-viewing"></a>

CloudWatchでアプリケーションとスローログを表示する方法は、その他の CloudWatch ログを表示する方法と同じです。詳細については、*Amazon CloudWatch Logs ユーザーガイド*の「[ログデータの表示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)」を参照してください。

ログを表示する際の考慮事項は以下のとおりです。
+ OpenSearch Service は、各行の最初の 255,000 文字のみを CloudWatch に発行します。残りのコンテンツは切り捨てられます。監査ログの場合、それはメッセージあたり 10,000 文字です。
+ CloudWatch では、ログの内容を識別しやすいようにログストリーム名のサフィックスとして `-index-slow-logs`、`-search-slow-logs`、`-application-logs`、および `-audit-logs` が使用されます。