

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

# パターン分析
<a name="CWL_AnalyzeLogData_Patterns"></a>

CloudWatch Logs Insights は、機械学習アルゴリズムを使用して、ログをクエリするときに*パターン*を検索します。パターンは、ログフィールド間で繰り返される共有テキスト構造です。クエリの結果を表示するときは、**[パターン]**タブを選択して、結果のサンプルに基づいて CloudWatch Logs が検出したパターンを表示できます。または、クエリに `pattern` コマンドを追加して、一致するログイベントのセット全体のパターンを分析することもできます。

多数のログイベントをいくつかのパターンに圧縮することができるため、パターンは大きなログセットを分析する際に役立ちます。

次の 3 つのログイベントの例を検討してください。

```
2023-01-01 19:00:01 [INFO] Calling DynamoDB to store for resource id 12342342k124-12345
2023-01-01 19:00:02 [INFO] Calling DynamoDB to store for resource id 324892398123-12345
2023-01-01 19:00:03 [INFO] Calling DynamoDB to store for resource id 3ff231242342-12345
```

前のサンプルでは、3 つのログイベントはすべて 1 つのパターンに従っています。

```
<Time-1> [INFO] Calling DynamoDB to store for resource id <ID-2>
```

パターン内のフィールドは*トークン*と呼ばれます。リクエスト ID やタイムスタンプなど、パターン内の異なるフィールドは*動的トークン*と呼ばれます。個々の動的トークンは `<string-number>` で表されます。*文字列*は、トークンが表すデータのタイプの説明です。*数値*は、他の動的トークンと比較して、このトークンがパターン内のどこに表示されるかを示します。

動的トークンの一般的な例には、エラーコード、タイムスタンプ、リクエスト ID があります。*トークン値*は、動的トークンの特定の値を表します。例えば、動的トークンが HTTP エラーコードを表す場合、トークン値は `501` になります。

パターン検出は、CloudWatch Logs 異常ディテクターおよび比較機能でも使用されます。詳細については、「[ログ異常検出](LogsAnomalyDetection.md)」および「[(diff) を以前の時間範囲と比較する](CWL_AnalyzeLogData_Compare.md)」を参照してください。

## パターン分析の開始方法
<a name="CWL_AnalyzeLogData_Patterns-GetStarted"></a>

パターン検出は、CloudWatch Logs Insights クエリで自動的に実行されます。`pattern` コマンドを含まないクエリは、結果にログイベントとパターンの両方を取得します。

`pattern` コマンドをクエリに含めると、一致するログイベントのセット全体に対してパターン分析が実行されます。これにより、より正確なパターン結果が得られますが、`pattern` コマンドの使用時に未加工のログイベントは返されません。クエリに `pattern` が含まれていない場合、パターン結果は、返された最初の 1000 個のログイベント、またはクエリで使用した制限値のいずれかに基づいて返されます。`pattern` をクエリに含めると、**[パターン]** タブに表示される結果は、クエリに一致するすべてのログイベントから取得されます。

**CloudWatch Logs Insights でパターン分析を開始するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[ログ]**、**[Logs Insights]** を選択します。

   **[Logs Insights]** (ログのインサイト) ページでは、クエリエディタにデフォルトクエリが表示されます。デフォルトでは、最新の 20 件のログイベントが返されます。

1. クエリボックスの `| limit 20` 行を削除して、クエリを次のようにします。

   ```
   fields @timestamp, @message, @logStream, @log
   | sort @timestamp desc
   ```

1. **[ロググループを選択]** ドロップダウンから、クエリを実行するロググループを 1 つ以上選択します。

1. (オプション) 時間間隔セレクタを使用して、クエリを実行する期間を選択します。

   5 分および 30 分間隔、1 時間、3 時間、12 時間間隔、またはカスタム時間枠を選択できます。

1. **[クエリの実行]** を選択してクエリを開始します。

   クエリの実行が完了すると、**[ログ]** タブにクエリによって返されたログイベントのテーブルが表示されます。表の上にあるのは、クエリに一致するレコードの数に関するメッセージです。これは、**一致する 71,101 レコードのうち 10,000 レコードを表示する**というメッセージと似ています。

1. **[パターン]** タブを選択します。

1. テーブルにクエリで検出されたパターンが表示されるようになりました。クエリには `pattern` コマンドが含まれていなかったため、このタブには、**[ログ]** タブのテーブルに表示された 10,000 個のログイベントで検出されたパターンのみが表示されます。

   パターンごとに、次の情報が表示されます。
   + **[パターン]** では、各動的トークンが `<string-number>` として表示されます。*文字列*は、トークンが表すデータのタイプの説明です。*数値*は、他の動的トークンと比較して、このトークンがパターン内のどこに表示されるかを示します。
   + **[イベント数]** は、クエリされたログイベントにパターンが表示された回数です。**[イベント数]** 列の見出しを選択して、パターンを頻度でソートします。
   + **[イベント比率]** は、このパターンを含むクエリされたログイベントの割合です。
   + **[重要度タイプ]** は、次のいずれかになります。
     + パターンに **Error** という単語が含まれている場合は、**ERROR** です。
     + パターンに **Warn** という単語が含まれているが、**Error** が含まれていない場合は **WARN** です。
     + パターンに **Warn** または **Error** が含まれていない場合は **INFO** です。

     **[Severity info]** 列の見出しを選択して、重要度別にパターンをソートします。

1. 次に、クエリを変更します。クエリの `| sort @timestamp desc` 行を `| pattern @message` に置き換えて、次のような完全なクエリにします。

   ```
   fields @timestamp, @message, @logStream, @log
   | pattern @message
   ```

1. **[Run query]** (クエリの実行) を選択します。

   クエリが終了すると、**[ログ]** タブに結果は表示されません。ただし、**[パターン]** タブには、クエリされたログイベントの合計数に応じて、リストされたパターンの数が多く表示される可能性があります。

1. クエリに `pattern` を含めるかどうかにかかわらず、クエリが返すパターンをさらに検査することができます。これを行うには、いずれかのパターンについて **[検査]** 列のアイコンを選択します。

   **[パターン検査]** ペインが表示され、以下が表示されます。
   + **[パターン]**。パターン内のトークンを選択して、そのトークンの値を分析します。
   + クエリされた時間範囲におけるパターンの出現回数を示すヒストグラム。これにより、パターンの発生の急増など、興味深い傾向を特定できます。
   + **[ログサンプル]** タブには、選択したパターンに一致するログイベントがいくつか表示されます。
   + **[トークンの値]** タブには、選択している場合は、選択した動的トークンの値が表示されます。
**注記**  
トークンごとに最大 10 個のトークン値がキャプチャされます。トークン数は正確ではない可能性があります。CloudWatch Logs は確率カウンターを使用して、絶対値ではなくトークン数を生成します。
   + **[関連パターン]** タブには、検査するパターンとほぼ同じ時間に頻繁に発生した他のパターンが表示されます。例えば、`ERROR` メッセージのパターンに通常、追加の詳細を含む `INFO` とマークされた別のログイベントが伴っていた場合、そのパターンがここに表示されます。

## パターンコマンドの詳細
<a name="CWL_AnalyzeLogData_Patterns-Details"></a>

このセクションでは、`pattern` コマンドとその用途について詳しく説明します。
+ 前のチュートリアルでは、`sort` コマンドの後に `pattern` コマンドが含まれている場合、クエリは有効ではないため、`pattern` コマンドを追加したときに `sort` コマンドを削除しました。`sort` の前に `pattern` があるのは有効です。

   `pattern` 構文の詳細については、「[pattern](CWL_QuerySyntax-Pattern.md)」を参照してください。
+ クエリで `pattern` を使用する場合、`@message` は `pattern` コマンドで選択されたフィールドの 1 つである必要があります。
+ `pattern` コマンドの前に `filter` コマンドを含めると、フィルタリングされたログイベントのセットのみをパターン分析の入力として使用できます。
+ `parse` コマンドから派生したフィールドなど、特定のフィールドのパターン結果を表示するには、`pattern @fieldname` を使用します。
+ `stats` コマンドを使用したクエリなど、ログ以外の出力を持つクエリは、パターン結果を返しません。

