クエリ構文

最終更新日: Oct 11, 2017

ログサービスは、クエリ条件を表現するために使用される一連のクエリ構文を提供し、ログを簡単に検索するのに役立ちます。ログサービスAPIの GetLogs および GetHistogramsインターフェイスまたはログサービスコンソールのクエリページでクエリ条件を指定できます。このセクションでは、クエリ条件の構文について詳しく説明します。

フルテキストインデックスとキー/値インデックス

2つのモードでログストアのインデックスを作成できます。

  • フルテキストインデックス:キーと値(キー、値)を区別することなく、ログの行全体が全体として照会されます。
  • キー/値インデックス:Keyが指定されたときにクエリが実行されます。たとえば、 FILE:app, Type:actionなどです。このキーに含まれるすべての文字列がヒットします。

構文キーワード

ログサービスのクエリ条件では、次のキーワードがサポートされています。

名前 意味
and バイナリ演算子 query1 and query2の形式で、 query1query2のクエリ結果の共通部分を示します。単語の間に構文キーワードがない場合、単語間の関係はデフォルトでは and です。
or query1query2のクエリ結果の和集合を示すquery1 or query2の形式の二項演算子。
not query1 not query2の形式で、query1 を満たし、query2を満たさない結果、すなわち query1–query2を示すバイナリ演算子です。 not query1 だけが存在する場合、query1 のクエリ結果を含まないログが選択されていることを示します。
(,) 左右の角かっこは、1つまたは複数のサブクエリを1つのクエリにマージして、角括弧内のクエリ優先度を向上させるために使用されます。
: キーと値のペアを照会するために使用されます。 term1:term2 は、キーと値のペアを形成します。キーまたは値にスペースが含まれている場合は、キーまたは値全体を含めるために引用符を使用する必要があります。
キーワードを共通のクエリ文字に変換します。左右の引用符で囲まれた語はすべて照会され、構文キーワードとしては使用されません。または、左と右の引用符のすべての用語は、キーと値のクエリで全体と見なされます。
\ エスケープ文字。引用符をエスケープするために使用されます。エスケープ後の引用符はシンボル自体を示し、 "\""のようにエスケープ文字と見なされません。
| パイプライン演算子。前の計算に基づいてより多くの計算を示します。例:query1 | timeslice 1h | count.
timeslice タイムスライス演算子は、データが計算のために全体として見なされる時間の長さを示す。使用方法は、全体として1時間、1分、1秒をそれぞれ示すタイムスライス1h、タイムスライス1m、タイムスライス1sである。たとえば、query1 | timeslice 1h | countはクエリ条件のクエリを示し、時間スパイスとして1時間の合計時間が返されます。
count ログの数を示すCount演算子。
* あいまいクエリーキーワード。0または複数の文字を置き換えるために使用されます。たとえば、que*; que で始まるすべてのヒットワードが返されます。
? 1つの文字を置き換えるために使用されるあいまいクエリキーワード。例えば、 qu?ry; 全てのヒットワードは quで始まり、ryで終わり、中間の文字で始まります。
__topic__ 特定のトピックの下でデータを照会します。新しい構文では、クエリ内で0個以上のトピックのデータをクエリできます。例えば、 __topic__:mytopicname
__tag__ タグキーの下のタグ値をクエリします。たとえば、 __tag__:tagkey:tagvalueのようになります。
source たとえば、source:127.0.0.1のように、IPのデータを照会してください。
source たとえば、 source:127.0.0.1のように、IPのデータを照会してください。
> latency > 100のように、特定の数値より大きいフィールドの値でログを照会します。
>= latency >= 100のように、特定の数値以上のフィールドの値でログを照会します。
< 特定の番号よりも小さいフィールドの値を持つログを照会します。例えば、 latency < 100.
<= latency <= 100のように、特定の数値以下のフィールドの値でログを照会します。
= latency = 100のように、特定の数値に等しいフィールドの値でログを照会します。
in 特定の範囲内のフィールドでログを照会します。角かっこ([])は閉じた間隔を示し、かっこ(()) は開いた間隔を示し、2つの数字はスペースで区切られています。たとえば、latency in [100 200] or latency in (100 200]のレイテンシや(100 200)のレイテンシ。

注意:

  • 構文キーワードは大文字と小文字を区別しません。
  • 構文キーワードの優先順位は、: > " > ( ) > and not > orで降順でソートされます。
  • ログサービスは、以下のキーワードを使用する権利を有します: sort asc desc group by avg sum min max limit。次のキーワードを使用する必要がある場合は、引用符で囲みます。
  • 全文索引とキー/値索引が構成されているときに異なる単語区切り文字を持つ場合、全文問合せ方式を使用してデータを照会することはできません。
  • 数値問合せを実行するには、問合せ列のデータ型をdoubleまたはlongとして設定する必要があります。データ型が設定されていないか、数値範囲クエリに使用される構文が正しくない場合、ログサービスはクエリ条件をフルテキストインデックスとして変換し、予期しない結果につながります。
  • 列のデータ型をテキストから数値に変更すると、変更前のデータに対しては=クエリのみがサポートされます。

クエリの例

  1. a と b を同時に含むログ: a and b or a b.
  2. a または bを含むログ: a or b.
  3. a を含むが bを含まないログ: a not b.
  4. aを含まないすべてのログ: not a.
  5. a と bを含むが、cを含まないログ: a and b not c.
  6. a または bを含み、cを含むログ: (a or b ) and c.
  7. a または bを含み、cを含まないログ: (a or b ) not c.
  8. a と bを含み、またはcを含むログ: a and b or c.
  9. FILEフィールドにapsaraが含まれているログ: FILE:apsara.
  10. FILEフィールドにapsaraとshennongが含まれているログ: FILE:"apsara shennong" or FILE:apsara FILE: shennong or FILE:apsara and FILE:shennong.
  11. aを含むログ: and.
  12. apsaraまたはshennongを含むFILEフィールドのログ: FILE:apsara or FILE:shennong.
  13. 情報フィールドにapsaraを含むログ: "file info":apsara.
  14. 引用符を含むログ: \".
  15. shenで始まるログ: shen*.
  16. FILEフィールドの下にあるshenで始まるすべてのログ: FILE:shen*.
  17. shenで始まり、ongで終わるログ: shen?ong.
  18. shenとapsで始まるすべてのログ: shen* and aps*.
  19. shenで始まり、20分のタイムスライスのログ: shen*| timeslice 20m | count.
  20. topic1とtopic2の下のすべてのデータ: __topic__:topic1 or __topic__ : topic2.
  21. tagkey1の下のtagvalue2のすべてのデータ: __tag__ : tagkey1 : tagvalue2.
  22. レイテンシが100以上200未満のすべてのデータのクエリは、 latency >=100 and latency < 200 または latency in [100 200)のいずれかの方法で記述できます。
  23. レイテンシが100より大きいすべての要求のクエリは、latency > 100のように記述する必要があります。

その他のクエリの種類

指定されたトピックまたはクロストピックのクエリ

トピックごとに、各ログストアを1つまたは複数の部分空間に分けることができます。クエリ中に、指定したトピックのクエリ範囲を制限して速度を上げることができます。つまり、ログストアのレベル2分類要件を持つユーザーは、ログストアを分割するためにトピックを使用することをお勧めします。

クエリを実行するために1つまたは複数のトピックが指定されている場合、クエリは条件を満たすトピックでのみ実装されます。ただし、トピックが入力されていない場合は、デフォルトですべてのトピックの下のデータが照会されます。

トピックを使用して異なるドメイン名でログを分類する例

topic

トピックのクエリの例:

  • すべてのトピックの下のデータを照会することができます。クエリの構文とパラメータにトピックが指定されていない場合は、すべてのトピックのデータがクエリされます。
  • トピック内のクエリを照会することができます。クエリ構文は __topic__:topicNameです。古いモードは引き続きサポートされています。トピックはURLパラメーターで指定されます。
  • 複数のトピックを照会することができます。たとえば、 __topic__:topic1 or __topic__:topic2 は、topic1とtopic2の下のデータの和集合を示します。

ヒストグラムクエリ

ログサービスの構文が追加され、カスタム間隔関数が提供されます。クエリの構文は次のとおりです。

  1. where_condition | timeslice 1[hms] |count
  2. h stands for the unit of hour
  3. m stands for the unit of minute
  4. s stands for the unit of second

インターバルサイズは、タイムスライスパラメータを変更することで調整できます。たとえば、2時間のデータをクエリするには、異なるタイムスライスパラメータの対応する結果が次のようになります。

タイムスライスパラメータ ヒストグラム間隔の数 各間隔のサイズ
1h 2 1 hour
30m 4 30 minutes
2m 60 2 minutes
30s 240 30 seconds