すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:検索構文

最終更新日:Aug 30, 2024

Simple Log Serviceは、クエリ条件を指定するために使用できる一連の検索構文を提供します。 指定されたクエリ条件を満たすログが返されます。 複雑なデータ分析と処理には、分析ステートメントでクエリ結果を使用できます。

検索構文構造

構文

各クエリステートメントは、検索ステートメントと分析ステートメントで構成されます。 検索文と分析文は縦棒 (|) で区切られています。 検索文は単独で実行できます。 ただし、分析ステートメントは検索ステートメントと一緒に実行する必要があります。 ログ分析機能を使用して、検索結果のデータを分析できます。 この機能を使用して、Logstore内のすべてのデータを分析することもできます。

重要
  • 分析ステートメントでFROM句またはWHERE句を指定する必要はありません。 デフォルトでは、現在のLogstoreのすべてのデータが分析されます。

  • セミコロン (;) を分析ステートメントにステートメントターミネータとして追加する必要はありません。

  • 分析ステートメントは大文字と小文字を区別しません。

  • 構文

    Search statement|Analytic statement

    ステートメント

    説明

    検索文

    検索文は、1つ以上の検索条件を指定する。 条件は、キーワード、数値、数値範囲、空白文字、またはアスタリスク (*) です。

    検索文として空白文字またはアスタリスク (*) を指定した場合、条件は指定されず、すべてのログが返されます。 詳細については、「検索構文」をご参照ください。

    分析ステートメント

    分析ステートメントは、検索結果またはLogstore内のすべてのデータを集計または分析するために使用されます。

  • 例:

    * | SELECT status, count(*) AS PV GROUP BY status

文の書き込みプロセス

image

検索文は、検索タイプに基づいて検索構文を決定し、フィールドのデータタイプに基づいて演算子を指定してから、一致モードを決定する手順で記述できます。

ステップ1: 検索タイプの選択

重要
  • 特定のフィールドを分析する場合は、フィールドインデックスを作成し、SELECTステートメントを使用する必要があります。 フィールドインデックスとフルテキストインデックスの作成方法の詳細については、「インデックスの作成」をご参照ください。

  • クエリと分析の結果は、インデックスの構成によって異なります。 フルテキストインデックスとフィールドインデックスを作成する場合、フィールドインデックスが優先されます。

  • Logstoreにフルテキストインデックスのみを作成する場合は、フルテキスト検索構文のみを使用してクエリ条件を指定できます。

  • Logstoreのフィールドインデックスのみを作成する場合、使用できる検索構文はフィールドのデータ型によって異なります。

    • Double and long: フィールド固有の検索構文のみを使用してクエリ条件を指定できます。

    • テキスト: キーワードが関連付けられているフィールドを特定でき、そのフィールドに対してフィールドインデックスが作成されている場合は、フィールド固有の検索構文を使用してクエリ条件を指定することをお勧めします。 キーワードが関連付けられているフィールドを特定できない場合は、全文検索構文を使用することを推奨します。

      • フルテキスト検索構文を使用しているが、Logstoreにフルテキストインデックスが作成されていない場合、インデックス付きデータがテキスト型であるフィールドからのみデータをクエリできます。

      • フルテキスト検索構文を使用し、Logstoreにフルテキストインデックスが作成されている場合、すべてのフィールドのデータをクエリできます。 この場合、すべてのフィールドのインデックス付きデータはテキスト型です。

フルテキスト検索構文

フルテキスト検索構文に基づいて特定のフィールドのデータをクエリすることはできません。 フルテキスト検索構文:

keywords1 [ [ and | または | not ] keywords2]

keywords1は、データのクエリに使用するキーワードを指定します。 アスタリスク (*) と疑問符 (?) を使用して、ファジーマッチを実行することもできます。 クエリ条件を組み合わせるには、and orなどの演算子を使用できます。

例1: Nginxキーワードを含むクエリログ。 検索文: Nginx

例2: NginxまたはTomcatキーワードを含むログの照会。 検索文: NginxまたはTomcat

フィールド固有の検索構文

フィールド固有の検索構文に基づいて、特定のフィールドのデータをクエリできます。 フィールドには、textlongdouble、またはJSONタイプを指定できます。 フィールド固有の検索構文:

indexname1[:|>|>=|<|<=|=|[in]keyword1[[および]|または|ない]indexname2...]

説明
  • indexname1は、データをクエリするフィールドの名前を指定します。 フィールド名やテーブル名などの固有名詞に、スペースや漢字などの特殊文字、またはおよびまたはなどの構文キーワードが含まれている場合は、文字またはキーワードを二重引用符 ("") で囲む必要があります。 詳細については、「」をご参照ください。クエリ文で引用符を使用するにはどうすればよいですか。

  • long型またはdouble型のフィールドにインデックスが作成されている場合は、>>=<<==inの比較演算子を使用できます。

例1: requestMethodフィールド値がGETであるクエリログ。 検索文: requestMethod: GET

例2: requestTimeSpendフィールド値が500 msを超えるクエリログ。 検索文: requestTimeSpend > 500 フィールドのデータ型が長い

例3: requestMethodフィールド値がGETであり、requestTimeSpendフィールド値が500ミリ秒より大きいクエリログ。 検索文: requestMethod: GET and requestTimeSpend > 500

手順2: フィールドデータ型の決定

フィールドデータ型

検索文を作成するときは、フィールドデータ型の特性をメモし、必要な演算子を使用します。 このようにして、文を使用して効率的かつ正確な方法でログを取得できます。

説明

フィールドデータ型

説明

サポートされる演算子

テキスト

関連フィールドのデータ型をテキストに設定することで、文字列型のデータをクエリできます。 既定では、フルテキストインデックスを有効にすると、__time__ フィールドを除くログ内のすべてのフィールドのデータ型がtextに設定されます。

ornot():""\*?

ロングまたはダブル

フィールドのデータ型をlongまたはdoubleに設定した場合にのみ、数値範囲を使用してフィールドの値を照会できます。

  • フィールドのデータ型をdoubleまたはlongに設定しない場合、または数値範囲の構文が無効な場合、Simple Log Serviceは全文検索を実行し、検索結果が予想結果と異なる場合があります。 たとえば、owner_id>100検索文を実行し、owner_idフィールドのデータ型が2倍または長さでない場合、owner_id> 、および100を含むログが返されます。 この例では、より大きい記号 (>) は区切り文字ではありません。

  • フィールドのデータ型をテキストからdoubleまたはlongに変更した場合、データのクエリには等号 (=) のみを使用できます。 データをクエリするために、範囲と比較演算子 (たとえば、より大きい (>) およびより小さい (<)) 記号を使用する場合は、データのインデックスを再作成する必要があります。 詳細については、「Logstoreのログの再インデックス」をご参照ください。

ornot()>>=<<==、およびin

JSON

フィールドの値に基づいて、JSONオブジェクトのフィールドのデータ型をlong、double、またはtextに設定し、そのフィールドの分析を有効にすることができます。

JSONオブジェクトのフィールドのデータ型に基づいて演算子を指定します。

演算子

重要
  • in演算子の文字は小文字でなければなりません。 他の演算子は大文字と小文字を区別しません。

  • Simple Log Serviceは、sortascdescgroup byavgsumminmaxlimitをサポートしています。 これらの演算子をキーワードとして使用する場合は、演算子を二重引用符 ("") で囲む必要があります。

  • 次の演算子は、優先度の高い順にリストされます。

    1. コロン (:)

    2. 二重引用符 ("")

    3. 括弧()

    4. とではない

    5. または

演算子

説明

:

この演算子は、key:value形式に基づくフィールド固有の検索に使用されます。 例: request_method:GET

フィールド名またはフィールド値にスペース、コロン (:) 、ハイフン (-) などの特殊文字が含まれている場合は、フィールド名またはフィールド値を二重引用符 ("") で囲む必要があります。 例: "file info":apsara

および

と演算子。 例: request_method:GET and status:200

複数の検索キーワードの中に構文キーワードが存在しない場合は、and演算子を使用して検索キーワードを評価します。 たとえば、GET 200 cn-shanghaiGET and 200 and cn-shanghaiと同等です。

または

または演算子。 例: request_method:GET or status:200

not

演算子ではありません。 例: request_method:GET not status:200またはnot status:200

( )

この演算子は、括弧 () で囲まれたクエリ条件の優先度を上げるために使用されます。 例: (request_method:GETまたはrequest_method:POST) およびstatus:200

""

この演算子は、構文キーワードを囲むために使用されます。 構文キーワードが二重引用符 ("") で囲まれている場合、キーワードは通常の単語に変換されます。 たとえば、"and" は、単語とを含むログを返します。 この場合、演算子ではありません。

フィールド固有の検索では、二重引用符 ("") で囲まれた単語が全体として見なされます。

\

エスケープ文字。 この文字は、二重引用符 ("") をエスケープするために使用されます。 二重引用符 ("") は、エスケープされた後にのみ自分自身を示すことができます。 たとえば、ログの内容がinstance_id:nginx "01" の場合、instance_id:nginx\"01\" 文を実行してログを検索できます。

*

ワイルドカード文字。 この文字は、0、1、または複数の文字を一致させるために使用されます。 例: host:aliyund * c

説明

Simple Log Serviceはすべてのログを検索し、指定した条件に一致する最大100語を取得します。 次に、Simple Log Serviceは、これらの単語を1つ以上含み、クエリ条件に一致するログを返します。

?

ワイルドカード文字。 この文字は、単一の文字と一致するために使用されます。 例: host:aliyund?c

>

この演算子は、フィールドの値が指定された数値より大きいログを照会するために使用されます。 例: request_time>100

>=

この演算子は、フィールドの値が指定された数値以上であるログを照会するために使用されます。 例: request_time>=100

<

この演算子は、フィールドの値が指定された数値より小さいログを照会するために使用されます。 例: request_time<100

<=

この演算子は、フィールドの値が指定された数値以下であるログを照会するために使用されます。 例: request_time<=100

=

この演算子は、フィールドの値が指定された数値に等しいログを照会するために使用されます。 等号 (=) とコロン (:) は、double型またはlong型のフィールドに同じ効果があります。 たとえば、request_time=100request_time:100に相当します。

in

この演算子は、フィールドの値が指定された数値範囲内にあるログを照会するために使用されます。 括弧 [] はクローズ区間を示し、括弧 () はオープン区間を示す。 スペースは、数値範囲内の2つの数値を区切るために使用されます。 例: request_time in [100 200] またはrequest_time in (100 200)

重要

in演算子の文字は小文字でなければなりません。

__source__

この演算子は、指定されたログソースのログを照会するために使用されます。 ワイルドカード文字がサポートされています。 例: __source __: 192.0.2.*

重要

__source__ フィールドは、Simple Log Serviceの予約済みフィールドです。 このフィールドはsourceと省略できます。 カスタムソースフィールドを設定すると、カスタムフィールドはSimple Log Serviceの予約済みソースフィールドと競合します。 カスタムフィールドを検索する場合は、検索文でSourceまたはSOURCEを使用する必要があります。

__tag__

この演算子は、メタデータを使用してログを照会するために使用されます。 例: __tag __:__ receive_time __: 1609837139

__topic__

この演算子は、指定されたログトピックのログを照会するために使用されます。 例: __topic __: nginx_access_log

ステップ3: 一致モードを決定する

キーワードとビジネス要件に基づいて、正確な検索またはあいまい検索を使用できます。 必要なログが返されない場合は、ログを照会したときに結果が返されない場合はどうすればよいですか?

検索タイプ

説明

正確な検索

完全な単語が検索に使用されます。

Simple Log Serviceは、単語分割を使用してログを照会します。 正確な検索では、フレーズを完全に一致させることはできません。 たとえば、abc def検索文は、abcdefを含むログを返します。 フレーズabc defは完全に一致することはできません。 abc defフレーズを完全に一致させたい場合は、フレーズ検索を実行するか、LIKE句を使用できます。 詳細については、「フレーズ検索」および「完全一致を使用してログを照会する方法」をご参照ください。

  • hos t:example.com: hostフィールドの値にexample.comが含まれているログを返します。

  • PUTおよびcn-shanghai: PUTおよびcn-shanghaiキーワードを含むログを返します。

  • * | Select * where http_user_agent like '% like Gecko %': http_user_agentフィールドの値にlike Geckoフレーズが含まれるログを返します。

  • #"redo_index/1": redo_index/1フレーズを含むログを返します。

ファジー検索

あいまい検索を実行するときに、検索文の単語の中央または末尾に、ワイルドカード文字としてアスタリスク (*) または疑問符 (?) を追加できます。 単語の長さは1〜64文字でなければなりません。 単語にワイルドカード文字が含まれている場合、Simple Log Serviceはすべてのログを検索し、その単語に一致する最大100の単語を取得します。 その後、Simple Log Serviceは、これらの単語を1つ以上含むログを返します。 より正確な単語を指定すると、検索結果はより正確になります。

重要
  • 単語の先頭にアスタリスク (*) または疑問符 (?) を追加することはできません。

  • ロングデータ型とダブルデータ型は、ファジー検索でアスタリスク (*) または疑問符 (?) をサポートしていません。 数値範囲を指定して、ファジー検索を実行できます。 例: [200 299] のステータス。

ファジー検索は、次のメカニズムを使用してサンプルに基づいて実行されます。

  • フィールドインデックス機能を有効にし、ログをクエリするフィールドを指定すると、Simple Log Serviceは、フィールドのインデックス付きデータからランダムサンプルを取得し、結果を返します。 Simple Log Serviceはフルテキストスキャンを実行しません。

  • フルテキストインデックス機能を有効にし、ログを照会するフィールドを指定しない場合、Simple Log Serviceはすべてのフィールドのインデックス付きデータからランダムなサンプルを取得し、結果を返します。 Simple Log Serviceはフルテキストスキャンを実行しません。

  • request_time>60およびrequest_method:Ge *: request_timeフィールドの値が60より大きく、request_methodフィールドの値がGeで始まるログを返します。

  • addr *: すべてのログからaddrで始まる100の単語を取得し、これらの単語の1つ以上を含むログを返します。

  • host:www.yl *: すべてのログのhostフィールドの値からwww.ylで始まる100の単語を取得し、これらの単語の1つ以上を含むログを返します。

詳細については、「」をご参照ください。ファジーマッチを使用してログを照会するにはどうすればよいですか?

検索文の例

異なるインデックス設定に基づいて異なるログで検索ステートメントを実行すると、ステートメントは異なる結果を返します。 このセクションで提供される例は、次のサンプルログおよびインデックス設定に基づいています。

サンプルログ

NGINXアクセスログがサンプルログとして使用されます。

日志样例

インデックス設定

検索文を実行する前に、インデックスが設定されていることを確認してください。 詳細については、「インデックスの作成」をご参照ください。

Logstoreのクエリと分析ページで、右上隅の [インデックス属性] をクリックし、[属性] を選択します。

image

インデックスが設定されているかどうかを確認します。 次の図は、インデックスが設定されるフィールドを示しています。

索引

一般的な検索例

期待される検索結果

検索文

デバッグ

成功したGETリクエストを記録するログ (ステータスコード: 200〜299)

request_method:GET and status in [200 299]

デバッグ

GETリクエストを記録し、リクエストのソースリージョンが中国 (杭州) リージョンではないログ

request_method:GET not region:cn-hangzhou

なし

GETリクエストまたはPOSTリクエストを記録するログ

request_method:GET or request_method:POST

デバッグ

GETリクエストを記録しないログ

not request_method:GET

デバッグ

成功したGETリクエストまたは成功したPOSTリクエストを記録するログ

(request_method:GET or request_method:POST) and status in [200 299]

デバッグ

失敗したGETリクエストまたは失敗したPOSTリクエストを記録するログ

(request_method:GET or request_method:POST) not status in [200 299]

デバッグ

成功したGETリクエスト (ステータスコード: 200〜299) を記録し、リクエスト期間が60秒未満のログ

request_method:GET and status in [200 299] not request_time>=60

デバッグ

リクエスト期間が60秒に等しいログ

request_time:60

デバッグ

request_time=60

デバッグ

リクエスト期間が60秒以上で200秒未満のログ

request_time>=60 and request_time<200

デバッグ

request_time in [60 200)

デバッグ

request_timeフィールドが空であるか、またはフィールドの値が無効な番号であるログ

request_time > -1000000000
説明

request_time:* は、request_timeフィールドが存在するかどうかを確認するために使用されます。 この検索文では、アスタリスク (*) はファジー検索を示していません。

デバッグ

request_timeフィールドを含み、フィールドの値が数値であるログ

request_time > -1000000000

デバッグ

とを含むログ

"and"
説明

この検索文では、は共通の文字列ですが、演算子ではありません。

デバッグ

リクエストメソッドフィールドの値がPUTのログ

"request method":PUT
重要

リクエストメソッドフィールドの名前にはスペースが含まれます。 検索文では、フィールド名を二重引用符 ("") で囲む必要があります。

なし

トピックがHTTPSまたはHTTPのログ

__topic__:HTTPS or __topic__:HTTP

なし

192.0.2.1ホストから収集されたログ

__tag__:__client_ip__:192.0.2.1

__tag __:__ client_ip__ フィールドは、Simple Log Serviceの予約済みフィールドです。 このフィールドは、ログを収集するホストのIPアドレスを示します。 詳細については、「予約済みフィールド」をご参照ください。

重要

データ変換機能またはLogtailプラグインを使用してログを処理する場合、__tag __:__ client_ip__フィールドのキーが共通キーに変換されます。 ログを検索する場合は、検索文で__タグ __:__ client_ip__フィールドの名前を二重引用符 ("") で囲む必要があります。 例: "__tag __:__ client_ip__":192.0.2.1

なし

IPアドレスが192.168.XX.XXと一致するログ

* | select * from log where key like '192.168.%.%'

詳細については、「LIKE句を使用してファジー一致を実装する」をご参照ください。

なし

remote_userフィールドが空でないログ

not remote_user:""

デバッグ

remote_userフィールドが空のログ

remote_user:""

デバッグ

remote_userフィールドの値がnullでないログ

not remote_user:"null"

デバッグ

remote_userフィールドを含まないログ

not remote_user:*

デバッグ

remote_userフィールドを含むログ

remote_user:*

デバッグ

cityフィールドの値が上海ではないログ

not city:Shanghai
説明

中国語文字列をクエリする場合は、インデックスを設定するときにInclude Chineseをオンにする必要があります。 詳細については、「インデックスの作成」をご参照ください。

なし

高度な検索例

  • ファジー検索

    期待される検索結果

    検索文

    デバッグ

    特定の単語を含むログ。 単語はcnで始まります。

    cn*

    デバッグ

    regionフィールドの値がcnで始まるログ。

    region:cn*

    なし

    regionフィールドの値にcn * が含まれるログ。

    region:"cn*"
    説明

    この検索文では、cn * は完全な文字列です。 例:

    • ログの内容がregion:cn *,enで、区切り文字がコンマ (,) の場合、Simple log Serviceはログの内容をregioncn * 、およびenに分割します。 検索文を使用してログを検索できます。

    • ログの内容がregion:cn * hangzhouの場合、Simple log Serviceはcn * hangzhou全体を考慮します。 この場合、検索文を使用してログを検索することはできません。

    なし

    特定の単語を含むログ。 単語はmoziで始まり、laで終わり、moziとlaの間に1文字が含まれます。

    mozi?la

    デバッグ

    特定の単語を含むログ。 単語はmoで始まり、laで終わり、moとlaの間に0、1、またはそれ以上の文字が含まれます。

    mo*la

    デバッグ

    特定の単語を含むログ。 言葉はmozまたはsaで始まります。

    moz* and sa*

    デバッグ

    regionフィールドの値がhaiで終わるログ。

    検索文を使用してログを検索することはできません。 SQL文でLIKE句を使用して、ログを検索できます。 詳細については、「LIKE句を使用してファジー一致を実装する」をご参照ください。

    * | select * from log where region like '%hai'

    なし

  • 区切り文字ベースの検索

    Simple Log Serviceは、指定した区切り文字に基づいて、ログの内容を複数の単語に分割します。 デフォルトの区切り文字は、'";=()[]{}?@&<>/:\n\t\rです。 Delimiterを空のままにすると、Simple Log Serviceは各フィールドの値を全体として考慮します。 この場合、完全な文字列を使用するか、あいまい検索を実行することによってのみ、ログを検索できます。 区切り文字の指定方法の詳細については、「インデックスの作成」をご参照ください。

    たとえば、http_user_agentフィールドの値は、Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/192.0.2.0 Safari/537.2です。

    • Delimiterを空のままにすると、Simple Log Serviceはフィールド値全体を考慮します。 この場合、http_user_agent:Chrome検索文を使用してログを検索することはできません。

    • Delimiter, '";=()[]{}?@&<>/:\n\t\rに設定した場合、Simple Log Serviceはフィールド値をMozilla5.0WindowsNT6.1AppleWebKit537.2KHTMLlikeに分割します。2. ヤモリクローム192.0.2.0サファリ537。 この場合、http_user_agent:Chrome検索文を使用してログを検索できます。

    説明

    検索キーワードに区切り文字が含まれている場合は、フレーズ検索を実行するか、LIKE句を使用できます。 例:

    • フレーズ検索: #"redo_index/1" 詳細については、「フレーズ検索」をご参照ください。

    • LIKE句: * | select * from log where key like 'redo_index/1'

    期待される検索結果

    検索文

    デバッグ

    http_user_agentフィールドの値にChromeが含まれるログ

    http_user_agent:Chrome

    デバッグ

    http_user_agentフィールドの値にLinuxおよびChromeが含まれるログ

    http_user_agent:Linux and http_user_agent:Chrome

    デバッグ

    http_user_agent:"Linux Chrome"

    デバッグ

    http_user_agentフィールドの値にFirefoxまたはChromeが含まれるログ

    http_user_agent:Firefox or http_user_agent:Chrome

    デバッグ

    request_uriフィールドの値に /request/path-2が含まれるログ

    request_uri:/request/path-2

    デバッグ

    request_uriフィールドの値が /requestで始まり、/file-0を含まないログ

    request_uri:/request* not request_uri:/file-0

    デバッグ

    redo_index/1フレーズが完全に一致するログ

    • #"redo_index/1"

    • * | select * from log where key like 'redo_index/1'

    説明

    フレーズ検索を実行するか、LIKE句を使用してフレーズを完全に一致させることができます。 正確な検索を実行すると、redo_index1などの単語が一致します。

    なし

特別なシナリオでのクエリ例

検索文

  • フィールド名またはフィールド値に、スペース、漢字、コロン (:) 、ハイフン (-) などの特殊文字が含まれている場合、またはおよびまたはなどの構文キーワードが含まれている場合は、フィールド名またはフィールド値を二重引用符 ("") で囲む必要があります。

  • Simple Log Serviceは、sort、asc、desc、group by、avg、sum、min、max、およびlimitの演算子をサポートしています。 演算子をキーワードとして使用する場合は、演算子を二重引用符 ("") で囲む必要があります。

  • データ変換機能またはLogtailプラグインを使用してログを処理する場合、タグフィールドのキーは共通キーに変換されます。 ログを検索する場合は、キーの名前を二重引用符 ("") で囲む必要があります。 例: "__tag __:__ client_ip__":192.0.2.1 __tag __:__ client_ip__ フィールドは、Simple Log Serviceの予約済みフィールドです。 このフィールドは、ログを収集するホストのIPアドレスを示します。 詳細については、「予約済みフィールド」をご参照ください。

期待されるクエリ結果

検索文

デバッグ

リクエストメソッドフィールドの値にPUTが含まれるログ。 リクエストメソッドフィールドの名前にはスペースが含まれます。

"request method":PUT

なし

192.0.2.1ホストから収集されたログ。

"__tag__:__client_ip__":192.0.2.1

なし

分析ステートメント

  • フィールド名やテーブル名などの固有名詞に、スペース、漢字、コロン (:) 、ハイフン (-) などの特殊文字が含まれている場合、またはおよびまたはなどの構文キーワードが含まれている場合は、分析ステートメントで固有名詞を二重引用符 ("") で囲む必要があります。

  • 特定の文字が文字列を表す場合は、単一引用符 ('') を使用して、その文字を分析ステートメントで囲む必要があります。 例えば、 'status' はステータスの文字列を示し、status または "status" はステータスログフィールドを示します。

期待されるクエリ結果

クエリ文

デバッグ

IPアドレスが192.168.XX.XXと一致するログ

* | select * from log where key like '192.168.%.%'

なし

詳細については、「」をご参照ください。クエリ文で引用符を使用するにはどうすればよいですか。

関連ドキュメント