Simple Log Service では、検索ステートメントを実行して、ログストアに保存されているログをクエリできます。検索結果は、単独で使用することも、複雑なデータ分析と処理のための分析ステートメントで使用することもできます。このトピックでは、検索ステートメントの構文、シナリオ、および例について説明します。
基本構文
各クエリ文は、検索ステートメントと分析ステートメントで構成されます。検索ステートメントと分析ステートメントは、縦棒(|
)で区切られます。フォーマット:
Search statement|Analytic statement
検索ステートメントは単独で実行できます。分析ステートメントは、検索ステートメントと一緒に実行する必要があります。ログ分析機能は、検索結果のデータまたはログストア内のすべてのデータを分析するために使用されます。
検索ステートメントでは、最大 30 個の検索条件を指定することをお勧めします。
分析ステートメントで FROM 句または WHERE 句を指定する必要はありません。デフォルトでは、現在のログストアのすべてのデータが分析されます。分析ステートメントはオフセットをサポートしておらず、大文字と小文字は区別されません。分析ステートメントにセミコロン(;)を追加する必要はありません。
ステートメント | 説明 |
検索ステートメント | 検索ステートメントは、1 つ以上の検索条件を指定します。検索ステートメントは、キーワード、数値、数値範囲、スペース、またはアスタリスク(*)にすることができます。 検索ステートメントとしてスペースまたはアスタリスク(*)を指定すると、検索に条件が使用されず、すべてのログが返されます。 |
分析ステートメント | 分析ステートメントは、検索結果のデータまたはログストア内のすべてのデータを集計または分析するために使用されます。Simple Log Service がログの分析でサポートしている関数と構文の詳細については、以下のトピックを参照してください。 |
クエリ文の例:
* | SELECT status, count(*) AS PV GROUP BY status
このトピックの検索例の raw ログの詳細については、「デバッグ」を参照してください。
検索ステートメントの作成プロセス
クエリ文を作成するには、次の手順を実行します。
手順 1:検索タイプを選択する
手順 2:フィールドデータ型を選択する
手順 3:一致モードを選択する
検索文の例
異なるインデックス構成に基づいて異なるログに対して検索文を実行すると、文は異なる結果を返します。このセクションで提供される例は、次のサンプルログとインデックス構成に基づいています。
text、double、long 型
サンプルログ
NGINX アクセスログがサンプルログとして使用されます。
インデックス構成
検索文を実行する前に、インデックスが構成されていることを確認してください。詳細については、「インデックスの作成」をご参照ください。インデックス構成を確認するには、次の手順を実行します。
ログストアの [クエリと分析] ページで、
を選択します。[検索と分析] パネルで、フィールドインデックスが構成されているかどうかを確認します。
一般的な検索例
予期される検索結果 | 検索文 | デバッグ |
成功した GET リクエストを記録するログ(状態コード:200 ~ 299) |
| |
GET リクエストを記録し、リクエストの送信元リージョンが中国 (杭州) リージョンではないログ |
| なし |
GET リクエストまたは POST リクエストを記録するログ |
| |
GET リクエストを記録しないログ |
| |
成功した GET リクエストまたは POST リクエストを記録するログ |
| |
失敗した GET リクエストまたは POST リクエストを記録するログ |
| |
成功した GET リクエスト(状態コード:200 ~ 299)を記録し、リクエスト時間が 60 秒未満のログ |
| |
リクエスト時間が 60 秒であるログ |
| |
| ||
詳細については、「クイックスタート: Azure App Service で PHP アプリを作成する - Azure App Service」をご参照ください。 |
| |
| ||
request_time フィールドが存在するかどうか |
| |
request_time フィールドが空であるか、フィールド値が無効な数値であるログ |
| |
request_time フィールドを含み、そのフィールド値が数値であるログ |
| |
and を含むログ |
説明 この検索ステートメントでは、and は一般的な文字列であり、演算子ではありません。 | |
リクエストメソッド フィールドの値が PUT であるログ |
重要 リクエストメソッド フィールドの名前にはスペースが含まれています。検索ステートメントでは、フィールド名を二重引用符("")で囲む必要があります。 | なし |
トピックが HTTPS または HTTP のログ |
| なし |
192.0.2.1 ホストから収集されたログ |
重要 データ変換機能または Logtail プラグインを使用してログが処理される場合、__tag__:__client_ip__ フィールドのキーは共通キーに変換されます。ログを検索する場合は、検索ステートメントで __tag__:__client_ip__ フィールドの名前を二重引用符("")で囲む必要があります。例: | なし |
IP アドレスが |
詳細については、「LIKE 句を使用してあいまい一致を実装する」をご参照ください。 | なし |
remote_user フィールドが空ではないログ |
| |
remote_user フィールドが空のログ |
| |
remote_user フィールドの値が null でないログ |
| |
remote_user フィールドを含まないログ |
| |
remote_user フィールドを含むログ |
| |
市 フィールドの値が 上海 でないログ |
説明 中国語の文字列をクエリする場合は、インデックスを構成するときに [中国語を含める] をオンにする必要があります。詳細については、「インデックスを作成する」をご参照ください。 | なし |
高度な検索例
あいまい検索
想定される検索結果
検索ステートメント
デバッグ
特定の単語を含むログ。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
です。[デリミタ] を空のままにすると、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
であるとします。[デリミタ] を空のままにすると、Simple Log Service はフィールド値を全体として扱います。この場合、
http_user_agent:Chrome
検索ステートメントを使用してログを検索することはできません。[デリミタ] を
, '";=()[]{}?@&<>/:\n\t\r
に設定すると、Simple Log Service はフィールド値をMozilla
、5.0
、Windows
、NT
、6.1
、AppleWebKit
、537.2
、KHTML
、like
、Gecko
、Chrome
、192.0.2.0
、Safari
、537.2
に分割します。この場合、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
やor
などの構文キーワードが含まれている場合は、フィールド名またはフィールド値を二重引用符(""
)で囲む必要があります。たとえば、"and"
は、単語 and を含むログを返します。この場合、and は演算子ではありません。Simple Log Service は、
sort
、asc
、desc
、group by
、avg
、sum
、min
、max
、limit
などの演算子をサポートしています。これらの演算子をキーワードとして使用するには、演算子を二重引用符(""
)で囲む必要があります。データ変換機能または Logtail プラグインを使用してログが処理される場合、__tag__:__client_ip__ フィールドのキーは共通キーに変換されます。ログを検索する場合は、検索文で __tag__:__client_ip__ フィールドの名前を二重引用符(
""
)で囲む必要があります。例:"__tag__:__client_ip__":192.0.2.1
。__tag__:__client_ip__
フィールドは、Simple Log Service の予約フィールドです。このフィールドは、ログが収集されるホストの IP アドレスを示します。詳細については、「予約フィールド」をご参照ください。
想定されるクエリ結果
検索文
request method
フィールド値にPUT
が含まれるログ。フィールド名にはスペースが含まれています。"request method":PUT
system error description
フィールド値にDB
が含まれるログ。フィールド名にはスペースが含まれています。"system error description":DB*
Authorization
フィールド値がスペースを含むBearer 12345
であるログ。"Authorization": "Bearer 12345"
errorContent
フィールド値にスペースを含むThe body is not valid json string
が含まれるログ。* | select * where errorContent like '%The body is not valid json string%'
192.0.2.1
ホストから収集されたログ。"__tag__:__client_ip__":192.0.2.1
分析文
フィールド名やテーブル名などの固有名詞に、スペース、中国語の文字、コロン(
:
)、ハイフン(-
)などの特殊文字、またはand
やor
などの構文キーワードが含まれている場合は、分析文で固有名詞を二重引用符(""
)で囲む必要があります。特定の文字が文字列を表す場合は、分析文で一重引用符(
''
)を使用して文字を囲む必要があります。たとえば、'status'
は status 文字列を示し、status
または"status"
は status ログフィールドを示します。
想定されるクエリ結果
クエリ文
IP アドレスが
192.168.XX.XX
と一致するログ。* | select * from log where key like '192.168.%.%'
詳細については、「クエリ文で引用符を使用する方法」をご参照ください。
JSON タイプ
サンプルログ
{
"timestamp": "2025-03-21T14:35:18Z", // タイムスタンプ
"level": "ERROR", // レベル
"service": {
"name": "payment-processor", // サービス名
"version": "v2.8.1", // バージョン
"environment": "production" // 環境
},
"error": {
"code": 5031, // エラーコード
"message": "Failed to connect to third-party API", // エラーメッセージ(サードパーティ API への接続に失敗しました)
"details": {
"endpoint": "https://api.paymentgateway.com/v3/verify", // エンドポイント
"attempts": 3, // 試行回数
"last_response": {
"status_code": 504, // ステータスコード
"headers": {
"Content-Type": "application/json", // Content-Type
"X-RateLimit-Limit": "100" // レート制限
}
}
}
},
"user": {
"id": "usr-9a2b3c4d", // ユーザーID
"session": {
"id": "sess-zxy987", // セッションID
"device": {
"type": "mobile", // デバイスタイプ
"os": "Android 14", // OS
"network": "4G" // ネットワーク
}
}
},
"trace": {
"correlation_id": "corr-6f5e4d3c", // 相関ID
"span_id": "span-00a1b2" // スパンID
}
}
インデックス構成
検索文を実行する前に、インデックスが構成されていることを確認してください。詳細については、「インデックスを作成する」をご参照ください。インデックス構成を確認するには、次の手順を実行します。
ログストアの [クエリと分析] ページで、
を選択します。[検索と分析] パネルで、フィールドインデックスが構成されているかどうかを確認します。
例
クエリと分析の例の詳細については、「JSON ログのクエリと分析」および「JSON ログのクエリと分析に関する FAQ」をご参照ください。
想定されるクエリ結果 | クエリ文 |
失敗したリクエストを記録するログ |
|
|
|
|
|
関連情報
分析関数と構文の詳細については、「分析関数と構文」をご参照ください。
トラブルシューティング
ログ クエリの例
フィールド値が JSON オブジェクトまたは JSON 配列である JSON ログをクエリできます。クエリと分析の例の詳細は、「JSON ログのクエリと分析」および「JSON ログのクエリと分析に関する FAQ」をご参照ください。