クエリ文字列は、Simple Log Serviceのドメイン固有言語 (DSL) で使用され、ログデータを効率的にフィルタリングし、条件マッチングを簡素化します。 このトピックでは、クエリ文字列を指定するルールについて説明します。
関数
次の表に、クエリ文字列を使用する関数を示します。
カテゴリ | 関数 | シナリオ |
イベントチェック関数 | クエリ文字列は、イベントのフィールドの値が指定された条件を満たすかどうかを確認するために使用されます。 | |
リソース関数 | クエリ文字列を使用して、フィールドブラックリストまたはフィールドホワイトリストを設定し、Logstoreからデータをフィルタリングしてテーブルを返します。 | |
クエリ文字列を使用して、フィールドブラックリストまたはフィールドホワイトリストを設定し、ApsaraDB RDS for MySQLデータベースの指定されたテーブルからデータをフィルタリングしてテーブルを返します。 |
特徴
フィールド検索と全文検索をサポートする検索機能を次の表に示します。
機能 | フィールド検索 | フルテキスト検索 |
サブ文字列の検索 | 対応 | 対応 |
アスタリスク ( | 対応 | 対応 |
完全一致 | 対応 | 非対応 |
正規表現を使用した文字列の検索 | 対応 | 非対応 |
数値範囲を比較して文字列を検索する | 対応 | 非対応 |
数値を比較して文字列を検索する | 対応 | 非対応 |
論理演算子 (AND、OR、NOT) 、またはこれらの演算子の組み合わせを使用して文字列を検索します。 | 対応 | 対応 |
特殊文字のエスケープ
アスタリスク (*) やバックスラッシュ (\) などの特殊文字は、クエリ文字列でエスケープする必要があります。
フィールド名における特殊文字のエスケープ
フィールド名は二重引用符 ("") で囲むことはできません。 フィールド名の特殊文字は、バックスラッシュ (\) を使用してエスケープする必要があります。 例:
\*\(1 + 1\)\?: abc
特殊文字はバックスラッシュ (\) を使用してエスケープされます。__tag __\:__ container_name __: abc
特殊文字はバックスラッシュ (\) を使用してエスケープされます。"content": abc
この例では、フィールド名は無効です。 フィールド名を二重引用符 ("") で囲むことはできません。
フィールド値における特殊文字のエスケープ
引用符 (") やバックスラッシュ (\) などの特殊文字を含むフィールド値をクエリするには、バックスラッシュ (\) を使用して特殊文字をエスケープする必要があります。 例:
content: "abc\" xy\\z "
説明フィールド値は二重引用符 ("") で囲む必要があります。 一重引用符 ('') を使用して文字列を囲み、二重引用符 (" ") を使用してフィールド値を囲むことができます。 たとえば、
e_search("domain: '/url/test.jsp'")
は無効であり、e_search('domain: "/url/test.jsp"')
は有効です。アスタリスク (*) や疑問符 (?) などの特殊文字を含むフィールド値をクエリするには、バックスラッシュ (\) を使用して特殊文字をエスケープする必要があります。 バックスラッシュ (\) を使用して特殊文字をエスケープしない場合、特殊文字はワイルドカード文字として使用されます。
文字、数字、アンダースコア (_) 、ハイフン (-) 、アスタリスク (*) 、および疑問符 (?) のみを含むフィールド値をクエリする場合、フィールド値を二重引用符 ("") で囲む必要はありません。 他の文字を使用する場合は、フィールド値を二重引用符 ("") で囲む必要があります。 例:
status: "\*\?()[]:="
フィールド値は二重引用符 ("") で囲まれています。 アスタリスク (*) と疑問符 (?) は、バックスラッシュ (\) を使用してエスケープされます。 アスタリスク (*) および疑問符 (?) 以外の文字は、フィールド値にエスケープされません。content: ()[]:=
フィールド値が無効です。 フィールド値は二重引用符 ("") で囲む必要があります。status: active\* test
およびstatus: active\?test
フィールド値には、文字、アスタリスク (*) 、および疑問符 (?) のみが含まれます。 フィールド値は二重引用符 ("") で囲む必要はありません。 フィールド値のアスタリスク (*) と疑問符 (?) は、バックスラッシュ (\) を使用してエスケープされます。
サブ文字列の検索
全文検索
すべてのフィールドで部分文字列を検索します。
構文
e_search('substring')
例
e_search('"error"')
: 部分文字列を検索します。e_search('"active error"')
: スペースを含む部分文字列を検索します。e_search('active error')
: 複数の部分文字列を検索します。 論理演算子ORはデフォルトで使用されます。
フィールド検索
特定のフィールドの部分文字列を検索します。
構文
e_search('...')
例
e_search('status: active')
: 部分文字列を検索します。e_search('author: "john smith" ')
: スペースを含む部分文字列を検索します。
説明e_search('field: active error')
: fieldフィールドでアクティブを検索するか、すべてのフィールドでエラーを検索します。 この例では、クエリ文字列はfield:active OR "error"
に相当します。
ワイルドカード文字を使用した文字列の検索
アスタリスク (*) は、0文字または複数文字を指定します。 疑問符 (?) は、1つの文字または1つのワイド文字を指定します。
全文検索
すべてのフィールドで部分文字列を検索します。
構文
e_search('substring')
例
e_search('active * test')
。 アスタリスク (*) は、ゼロまたは複数の文字を一致させるために使用されます。 クエリ文字列には文字とアスタリスク (*) のみが含まれているため、クエリ文字列を二重引用符 ("") で囲む必要はありません。e_search('* error occurs')
。 アスタリスク (*) は、ゼロまたは複数の文字を一致させるために使用されます。 たとえば、エラー発生
とクリティカルエラー発生
の文字列を一致させることができます。e_search('active?good')
。 疑問符 (?) は1つの文字を一致させるために使用されます。 クエリ文字列には文字と疑問符 (?) のみが含まれているため、クエリ文字列を二重引用符 ("") で囲む必要はありません。e_search('ac * tive?good')
。 クエリ文字列は、アスタリスク (*) と疑問符 (?) を使用して完全一致を実行するために使用されます。e_search('ac * tive??go * od')
。 クエリ文字列は、複数のアスタリスク (*) と疑問符 (?) を使用して完全一致を実行するために使用されます。
フィールド検索
特定のフィールドの部分文字列を検索します。
構文
e_search('field name: substring')
例
e_search('status: active * test')
。 アスタリスク (*) は、ゼロまたは複数の文字を一致させるために使用されます。e_search('status: active?good')
: 疑問符 (?) は1文字を一致させるために使用されます。
完全一致
完全一致では、フィールド値全体が一致します。
構文
e_search('field name==string that must be exactly matched')
例
e_search('author== "john smith" ')
。 authorフィールドの値はjohn smithでなければなりません。e_search('status== ac * tive?good')
。 クエリ文字列にはワイルドカード文字が含まれ、完全一致に使用されます。
正規表現を使用した文字列の検索
正規表現は、マッチングにおいてワイルドカード文字よりも効率的です。
構文
e_search('field name~=regular expression')
説明正規表現は、バックスラッシュ (\) を含むことができる。
r
を使用して、システムがバックスラッシュ (\) をエスケープしないようにすることを推奨します。デフォルトでは、Simple Log Serviceはファジー一致を実行します。 完全一致を有効にするには、プレフィックスとしてキャレット (
^
) 、サフィックスとしてドル記号 ($
) を含む正規表現を指定する必要があります。
例
e_search('status ~= "\d +" ')
。 statusフィールドの値には数字が含まれます。e_search('status ~= "^\d +$" ')
。 statusフィールドの値は数値です。
数値または数値範囲を比較して文字列を検索する
フィールド値を検索するには、フィールド値を指定した数値または数値範囲と比較します。
数値比較
次の演算子を使用して、フィールド値と指定した数値を比較できます。 演算子は、greater-than (
>
) 、greater-than-or-equal-to (>=
) 、equal-to (=
) 、less-than (<
) 、およびless-than-or-equal-to (<=
) です。e_search('age >= 18') # >=18 e_search('age > 18') # > 18 e_search('age = 18') # = 18 e_search('age <= 18') # <=18 e_search('age < 18') # < 18
数値範囲の比較
閉じた間隔内にあるフィールド値を検索できます。 アスタリスク (*) を使用して、無限の間隔を指定できます。
e_search('count: [100, 200]') # >=100 and <=200 e_search('count: [*, 200]') # <=200 e_search('count: [200, *]') # >=200
論理的関係を判断して文字列を検索する
論理演算子は、複数の検索条件間で使用できます。 ()
は検索条件をネストするために使用されます。
論理演算子 | キーワード |
AND |
|
OR |
|
NOT |
|
例:
e_search('abc OR xyz') # The logical operator is not case-sensitive.
e_search('abc and (xyz or zzz)')
e_search('abc and not (xyz and not zzz)')
e_search('abc && xyz') # and
e_search('abc || xyz') # or
e_search('abc || !xyz') # or not
ローカル演算子を使用して部分文字列を照合することもできます。
e_search('field: (abc OR xyz)') # The field value contains abc or xyz.
e_search('field: (abc OR not xyz)') # The field value contains abc or does not contain xyz.
e_search('field: (abc && !xyz)') # The field value contains abc and does not contain xyz.
フィールドのチェック
クエリ文字列を使用してフィールドをチェックすることができます。
e_search('field: * ')
: フィールドが存在するかどうかを確認します。e_search('not field:* ')
: フィールドが存在しないかどうかを確認します。e_search('not field:"" ')
: フィールドが存在しないかどうかを確認します。e_search('field: "?" ')
: フィールドが存在するかどうか、およびフィールドが空でないかどうかを確認します。e_search('field=="" ')
: フィールドが存在するかどうか、およびフィールドが空かどうかを確認します。e_search('field ~=".+" ')
: フィールドが存在するかどうか、およびフィールドが空でないかどうかを確認します。e_search('not field ~=".+" ')
: フィールドが存在しないかどうか、またはフィールドが空かどうかを確認します。e_search('not field=="" ')
: フィールドが存在しないかどうか、またはフィールドが空でないかどうかを確認します。