Logstoreで収集されたログを照会および分析する場合は、Logstoreのインデックスを作成する必要があります。 このトピックでは、Simple Log Serviceでサポートされているインデックスの定義、タイプ、および課金について説明します。 このトピックでは、インデックスを作成してインデックス機能を無効にする方法についても説明し、インデックス作成の例を示します。
インデックスを作成する必要があるのはなぜですか?
ほとんどの場合、キーワードを使用して生ログからデータを照会できます。 たとえば、curl
キーワードを含むcurl/7.74.0
ログを取得します。 ログ分割が実行されない場合、ログは全体として考慮され、システムはログをcurl
キーワードに関連付けません。 この場合、Simple Log Serviceでログを取得できません。
ログを検索するには、ログを別々の検索可能な単語に分割する必要があります。 区切り文字を使用してログを分割できます。 区切り文字は、ログが分割される位置を決定します。 この例では、次の区切り文字を使用して前のログを分割できます。\n\t\r,;[]{}()&^ *#@ ~ =<>/\?: '"
ログはカール
と7.74.0
に分割されます。 Simple Log Serviceは、ログ分割後に取得された単語に基づいてインデックスを作成します。 インデックスが作成されたら、ログを照会および分析できます。
Simple Log Serviceは、フルテキストインデックスとフィールドインデックスをサポートしています。 フルテキストインデックスとフィールドインデックスの両方を作成する場合、フィールドインデックスが優先されます。
インデックスタイプ
フルテキストインデックス
Simple Log Serviceは、区切り文字を使用して、ログをTEXTタイプの複数の単語に分割します。 フルテキストインデックスを作成した後、キーワードを使用してログを照会できます。 たとえば、ChromeまたはSafari
の検索文に基づいて、Chrome
またはSafari
を含むログを照会できます。
中国語のコンテンツは、区切り文字を使用して分割できません。 ただし、中国語のコンテンツを分割する場合は、Include Chineseをオンにすることができます。 その後、Simple Log Serviceは、中国語の文法に基づいて中国語のコンテンツを自動的に分割します。
Logstoreにフルテキストインデックスのみを作成する場合は、フルテキスト検索構文のみを使用してクエリ条件を指定できます。 詳細については、「クエリ構文と関数」をご参照ください。
フィールドインデックス
Simple Log Serviceは、フィールド名でログを区別し、区切り文字を使用してフィールドを分割します。 サポートされているフィールドタイプは、TEXT、LONG、DOUBLE、JSONです。 詳細については、「データ型」をご参照ください。 フィールドインデックスを作成した後、key:value形式
でフィールド名とフィールド値を指定してログを照会できます。 SELECTステートメントを使用してログを照会することもできます。 詳細については、「フィールド固有の検索」をご参照ください。
フィールドをクエリおよび分析する場合は、フィールドインデックスを作成し、SELECTステートメントを使用する必要があります。 フィールドインデックスは、フルテキストインデックスよりも優先度が高くなります。 フルテキストインデックスとフィールドインデックスの両方を作成する場合、フィールドインデックスが優先されます。
TEXTタイプのフィールド: 全文ベースの検索文、フィールドベースの検索文、および分析文を使用して、データを照会および分析できます。 分析ステートメントには、SELECTステートメントが含まれます。
フルテキストインデックスが有効になっていない場合、フルテキストベースの検索文は、textタイプのすべてのフィールドからデータを照会します。
フルテキストインデックスが有効になっている場合、フルテキストベースの検索文はすべてのログからデータを照会します。
LONG型またはDOUBLE型のフィールド: フィールドベースの検索ステートメントと分析ステートメントを使用して、データを照会および分析できます。 分析ステートメントには、SELECTステートメントが含まれます。
インデックスの作成
クエリと分析の結果は、インデックスの構成によって異なります。 ビジネス要件に基づいてインデックスを作成する必要があります。 インデックスの作成後、インデックスは約1分以内に有効になります。
新しいインデックスは、新しいログに対してのみ有効です。 履歴ログをクエリするには、ログのインデックスを再作成する必要があります。 詳細については、「Logstoreのログの再インデックス」をご参照ください。
Simple Log Serviceは、特定の予約フィールドのインデックスを自動的に作成します。 詳細については、「予約フィールド」をご参照ください。
Simple Log Serviceは、
__topic__
および__source__
の予約フィールドのインデックスを作成するときに、区切り文字を空のままにします。 したがって、2つのフィールドをクエリするキーワードを指定する場合、完全一致のみがサポートされます。__tag__
というプレフィックスが付いたフィールドは、フルテキストインデックスをサポートしていません。 __tag ___というプレフィックスが付いたフィールドをクエリおよび分析する場合は、フィールドインデックスを作成する必要があります。 サンプルクエリ文:* | select "__tag __:__ receive_time__"
request_timeなど、同じ名前の2つのフィールドがログに含まれている場合、Simple log Serviceはいずれかのフィールドをrequest_time_0として表示します。 2つのフィールドは、Simple Log Serviceにrequest_timeとして保存されます。 フィールドのインデックスのクエリ、分析、出荷、変換、または作成を行う場合は、request_timeを使用する必要があります。
コンソール
API
SDK
CLI
インデックスの更新
手順
インデックス作成機能の無効化
Logstoreのインデックス作成機能を無効にすると、Logstoreのデータ保持期間が経過すると、履歴インデックスが占有しているストレージ領域が自動的に解放されます。
手順
インデックス設定例
例 1
ログにはrequest_time
フィールドが含まれ、request_time>100
フィールドベースの検索文が実行されます。
フルテキストインデックスのみを作成すると、
request_time
、>
、および100
を含むログが返されます。 より大きい記号 (>) は区切り文字ではありません。フィールドインデックスのみが作成され、フィールドタイプがDOUBLEおよびLONGの場合、
request_time
フィールド値が100を超えるログが返されます。フルテキストインデックスとフィールドインデックスの両方が作成され、フィールドタイプがDOUBLEおよびLONGの場合、フルテキストインデックスは
request_time
フィールドに対して有効にならず、request_time
フィールド値が100を超えるログが返されます。
例 2
ログにはrequest_time
フィールドが含まれ、request_time
全文ベースの検索文が実行されます。
フィールドインデックスのみが作成され、フィールドタイプがDOUBLEおよびLONGの場合、ログは返されません。
フルテキストインデックスのみが作成された場合、
request_time
フィールドを含むログが返されます。 この場合、ステートメントはすべてのログからデータを照会します。フィールドインデックスのみが作成され、フィールドタイプがTEXTの場合、
request_time
フィールドを含むログが返されます。 この場合、ステートメントはTEXT型のすべてのフィールドからデータを照会します。
例 3
ログにstatus
フィールドが含まれ、* | SELECT status, count(*) AS PV GROUP BY status
クエリ文が実行されます。
フルテキストインデックスのみが作成された場合、ログは返されません。
status
フィールドにインデックスを作成すると、さまざまなステータスコードのページビュー (PV) の合計数が返されます。
インデックストラフィックの説明
フルテキストインデックス
すべてのフィールド名とフィールド値はテキストとして保存されます。 この場合、フィールド名とフィールド値の両方がインデックストラフィックの計算に含まれます。
フィールドインデックス
インデックストラフィックの計算に使用される方法は、フィールドのデータ型によって異なります。
TEXT型: フィールド名とフィールド値はどちらもインデックストラフィックの計算に含まれます。
LONGおよびDOUBLEタイプ: フィールド名はインデックストラフィックの計算に含まれません。 各フィールド値は、インデックストラフィックで8バイトとしてカウントされます。
たとえば、LONG型の
status
フィールドにインデックスを作成し、フィールド値が200
の場合、文字列status
はインデックストラフィックの計算に含まれず、200
値はインデックストラフィックで8バイトとしてカウントされます。JSON型: フィールド名とフィールド値はどちらもインデックストラフィックの計算に含まれます。 そこには、インデックス化されていないサブフィールドも含まれます。 詳細については、「」をご参照ください。インデックス化されていないJSONサブフィールドに対してインデックストラフィックが生成されるのはなぜですか?
サブフィールドがインデックスされていない場合、インデックストラフィックは、サブフィールドのデータタイプをTEXTとみなすことによって計算される。
サブフィールドがインデックス付けされている場合、インデックストラフィックは、サブフィールドのデータタイプに基づいて計算される。 データ型は、TEXT、LONG、またはDOUBLEです。
課金の概要
従量課金データ課金モードを使用するログストア
インデックスはストレージスペースを占有します。 ストレージタイプの詳細については、「インテリジェント階層ストレージの設定」をご参照ください。
インデックスの再作成は料金を発生しません。
インデックストラフィックの課金の詳細については、「従量課金データの課金項目」をご参照ください。
従量課金モードを使用するログストア
インデックスはストレージスペースを占有します。 ストレージタイプの詳細については、「インテリジェント階層ストレージの設定」をご参照ください。
インデックスを作成すると、トラフィックが生成されます。 クエリログストア項目のログデータのインデックストラフィックとログデータのインデックストラフィックに基づいて、インデックストラフィックに対して課金されます。 詳細については、「機能課金の課金項目」をご参照ください。 インデックストラフィックを削減する方法の詳細については、インデックスのトラフィック料金を削減するにはどうすればよいですか? をご参照ください。
インデックスの再作成は料金を生成します。 インデックスの再作成中に、インデックスの作成時と同じ請求可能なアイテムと価格に基づいて課金されます。
次のステップ
クエリと分析の例の詳細については、次のトピックを参照してください。
クエリのパフォーマンスを向上させる方法の詳細については、「ログのクエリと分析の高速化」をご参照ください。
JSON形式のWebサイトログをクエリおよび分析する方法の詳細については、「JSONログのクエリと分析」をご参照ください。