Simple Log Serviceでは、検索文を実行して、Logstoreに保存されているログを照会できます。 検索結果は、独立して使用することも、複雑なデータ分析および処理のための分析ステートメントで使用することもできる。 このトピックでは、検索文の構文、シナリオ、および例について説明します。
基本構文
各クエリステートメントは、検索ステートメントと分析ステートメントで構成されます。 検索文と分析文は縦棒 (|
) で区切られています。 形式:
Search statement|Analytic statement
検索文は独立して実行できます。 分析ステートメントは、検索ステートメントと一緒に実行する必要があります。 ログ分析機能は、検索結果のデータまたはLogstoreのすべてのデータを分析するために使用されます。
検索文には、最大30の検索条件を指定することを推奨します。
分析ステートメントでFROM句またはWHERE句を指定する必要はありません。 デフォルトでは、現在のLogstoreのすべてのデータが分析されます。 分析ステートメントはオフセットをサポートせず、大文字と小文字を区別しません。 セミコロン (;) を分析ステートメントに追加する必要はありません。
ステートメント | 説明 |
検索文 | 検索文は、1つ以上の検索条件を指定する。 検索ステートメントには、キーワード、数値、数値範囲、スペース、またはアスタリスク (*) を使用できます。 検索文としてスペースまたはアスタリスク (*) を指定した場合、検索に条件は使用されず、すべてのログが返されます。 |
分析ステートメント | 分析ステートメントは、検索結果のデータまたはLogstoreのすべてのデータを集計または分析するために使用されます。 Simple Log Serviceでサポートされているログ分析用の機能と構文の詳細については、以下のトピックを参照してください。 |
サンプルクエリ文:
* | SELECT status, count(*) AS PV GROUP BY status
このトピックの検索例で、生ログの詳細については、「デバッグ」をご参照ください。
検索文の作成プロセス
クエリ文を作成するには、次の手順を実行します。
ステップ1: 検索タイプを選択する
ステップ2: フィールドデータ型を選択する
ステップ3: マッチモードを選択する
検索文の例
異なるインデックス設定に基づいて異なるログで検索ステートメントを実行すると、ステートメントは異なる結果を返します。 このセクションで提供される例は、次のサンプルログおよびインデックス設定に基づいています。
サンプルログ
NGINXアクセスログがサンプルログとして使用されます。
インデックス設定
検索文を実行する前に、インデックスが設定されていることを確認してください。 詳細については、「インデックスの作成」をご参照ください。 インデックス設定を確認するには、次の手順を実行します。
Logstoreの [クエリと分析] ページで、
を選択します。検索と分析パネルで、フィールドインデックスが設定されているかどうかを確認します。
一般的な検索例
期待される検索結果 | 検索文 | デバッグ |
成功したGETリクエストを記録するログ (ステータスコード: 200〜299) |
| |
GETリクエストを記録し、リクエストのソースリージョンが中国 (杭州) リージョンではないログ |
| なし |
GETリクエストまたはPOSTリクエストを記録するログ |
| |
GETリクエストを記録しないログ |
| |
成功したGETまたはPOSTリクエストを記録するログ |
| |
失敗したGETまたはPOST要求を記録するログ |
| |
成功したGETリクエスト (ステータスコード: 200〜299) を記録し、リクエスト期間が60秒未満のログ |
| |
リクエスト期間が60秒に等しいログ |
| |
| ||
リクエスト期間が60秒以上で200秒未満のログ |
| |
| ||
request_timeフィールドが空であるか、またはフィールド値が無効な番号であるログ |
説明
| |
request_timeフィールドを含み、フィールド値が数値であるログ |
| |
とを含むログと |
説明 この検索文では、とは共通の文字列ですが、演算子ではありません。 | |
リクエストメソッドフィールド値がPUTのログ |
重要 リクエストメソッドフィールドの名前にはスペースが含まれます。 検索文では、フィールド名を二重引用符 ("") で囲む必要があります。 | なし |
トピックがHTTPSまたはHTTPのログ |
| なし |
192.0.2.1ホストから収集されたログ |
重要 データ変換機能またはLogtailプラグインを使用してログを処理する場合、__tag __:__ client_ip__フィールドのキーが共通キーに変換されます。 ログを検索する場合は、検索文で__タグ __:__ client_ip__フィールドの名前を二重引用符 ("") で囲む必要があります。 例: | なし |
IPアドレスが |
詳細については、「LIKE句を使用してファジー一致を実装する」をご参照ください。 | なし |
remote_userフィールドが空でないログ |
| |
remote_userフィールドが空のログ |
| |
remote_userフィールド値がnullでないログ |
| |
remote_userフィールドを含まないログ |
| |
remote_userフィールドを含むログ |
| |
cityフィールドの値が上海ではないログ |
説明 中国語文字列をクエリする場合は、インデックスを設定するときにInclude Chineseをオンにする必要があります。 詳細については、「インデックスの作成」をご参照ください。 | なし |
高度な検索例
ファジー検索
期待される検索結果
検索文
デバッグ
特定の単語を含むログ。 単語はcnで始まります。
cn*
regionフィールド値がcnで始まるログ。
region:cn*
なし
regionフィールド値にcn * が含まれるログ。
region:"cn*"
説明この検索文では、
cn *
は完全な文字列です。 例:ログの内容が
region:cn *,en
で、区切り文字がコンマ (,) の場合、Simple log Serviceはログの内容をregion
、cn *
、およびen
に分割します。 検索文を使用してログを検索できます。ログの内容が
region:cn * hangzhou
の場合、Simple log Serviceはcn * hangzhou
全体を考慮します。 この場合、検索文を使用してログを検索することはできません。
なし
特定の単語を含むログ。 単語はmoziで始まり、laで終わり、moziとlaの間に1文字が含まれます。
mozi?la
特定の単語を含むログ。 単語はmoで始まり、laで終わり、moとlaの間に0文字以上の文字が含まれます。
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はフィールド値をMozilla
、5.0
、Windows
、NT
、6.1
、AppleWebKit
、537.2
、KHTML
、like
に分割します。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_index
や1
などの単語が一致します。なし
特別なシナリオでのクエリ例
検索文
この演算子は、構文キーワードを囲むために使用されます。 構文キーワードが二重引用符 (
""
) で囲まれている場合、キーワードは通常の単語に変換されます。 フィールド固有の検索では、二重引用符 (""
) で囲まれた単語が全体として見なされます。フィールド名またはフィールド値に、スペース、漢字、コロン (
:
) 、ハイフン (-
) などの特殊文字、またはおよび
または
などの構文キーワードが含まれる場合、フィールド名またはフィールド値を二重引用符 (""
) で囲む必要があります。 たとえば、"and"
は、単語とを含むログを返します。 この場合、演算子ではありません。Simple Log Serviceは、
sort
、asc
、desc
、group by
、avg
、sum
、min
、max
、limit
をサポートしています。 これらの演算子をキーワードとして使用する場合は、演算子を二重引用符 (""
) で囲む必要があります。データ変換機能またはLogtailプラグインを使用してログを処理する場合、__tag __:__ client_ip__フィールドのキーが共通キーに変換されます。 ログを検索する場合は、検索文で__タグ __:__ client_ip__フィールドの名前を二重引用符 (
""
) で囲む必要があります。 例:"__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.%.%'
詳細については、「」をご参照ください。クエリ文で引用符を使用するにはどうすればよいですか。
関連ドキュメント
分析関数と構文の詳細については、「分析関数と構文」をご参照ください。
トラブルシューティング
ログクエリの例
フィールド値がJSONオブジェクトまたはJSON配列であるJSONログをクエリできます。 クエリと分析の例の詳細については、「JSONログのクエリと分析」および「JSONログのクエリと分析に関するFAQ」をご参照ください。