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

Simple Log Service:SPLの指示

最終更新日:Aug 30, 2024

このトピックでは、Simple Log Service Processing Language (SPL) の手順について説明します。

パラメータデータ型

次の表に、SPL命令でサポートされるパラメータのデータ型を示します。

パラメータデータ型

説明

Bool

このパラメータは、ブール値を指定します。 このタイプのパラメータは、SPL命令におけるスイッチである。

Char

このパラメータは、ASCII文字値を指定します。 値を単一引用符 ('') で囲む必要があります。 たとえば、「a」は文字aを示し、「 \t」はタブ文字を示し、「 \11」は、シリアル番号が8進数11に対応するASCII文字を示し、「 \x09」は、シリアル番号が16進数09に対応するASCII文字を示します。

Integer

パラメーターは整数値を指定します。

String

パラメーターは文字列値を指定します。 値を単一引用符 ('') で囲む必要があります。 例: 「this is a string」

RegExp

このパラメータは、RE2正規表現を指定します。 値を単一引用符 ('') で囲む必要があります。 例: '([\d.]+)'

RE2構文の詳細については、「構文」をご参照ください。

JSONPath

このパラメータは、JSONPath値を指定します。 値を単一引用符 ('') で囲む必要があります。 例: '$.body.values[0]'

JSONPath構文の詳細については、「JsonPath」をご参照ください。

フィールド

フィールド名を指定します。 例: | project level, content

フィールド名に英数字、アンダースコア (_) 以外の特殊文字が含まれている場合は、フィールド名を二重引用符 ("") で囲む必要があります。 例: | project "a:b:c"

説明

フィールド名の大文字と小文字の区別の詳細については、「SPL in different scenarios」をご参照ください。

フィールドパターン

フィールド名、またはフィールド名とワイルドカード文字の組み合わせを指定します。 アスタリスク (*) は、ゼロまたは複数の文字と一致するワイルドカード文字として使用できます。 値を二重引用符 ("") で囲む必要があります。 例: | project "__tag __: *"

説明

フィールド名の大文字と小文字の区別の詳細については、「SPL in different scenarios」をご参照ください。

SPLExp

このパラメータは、SPL式を指定します。

SQLExp

このパラメータは、SQL式を指定します。

フィールド処理命令

project

この命令は、指定されたパターンに一致するフィールドを保持し、指定されたフィールドの名前を変更します。 命令実行中、すべての保持関連式は、リネーム関連式の前に実行される。

重要

デフォルトでは、__time__および__time_ns_part__timeフィールドは保持され、名前を変更したり上書きしたりすることはできません。 詳細については、「時間フィールド」をご参照ください。

構文

| project -wildcard <field-pattern>, <output>=<field>, ...

パラメーター

パラメーター

データ型

必須

説明

ワイルドカード

Bool

課金されません

ワイルドカード一致モードを有効にするかどうかを指定します。 デフォルトでは、完全一致モードが使用されます。 ワイルドカード一致モードを有効にする場合は、このパラメーターを設定する必要があります。

フィールド-パターン

フィールドパターン

課金されます

保持するフィールドの名前、またはフィールドとワイルドカード文字の組み合わせ。 一致したフィールドはすべて処理されます。

アウトプット

フィールド

課金されます

名前を変更するフィールドの新しい名前。 複数のフィールドの名前を同じ名前に変更することはできません。

重要

新しい名前が入力データの既存のフィールド名と同じ場合、使用される名前が異なります。 詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

フィールド

フィールド

課金されます

名前を変更するフィールドの元の名前。

  • フィールドが入力データに存在しない場合、リネーム操作は実行されません。

  • フィールドの名前を複数回変更することはできません。

  • 例1: フィールドを保持します。

    * | project level, err_msg
  • 例2: フィールドの名前を変更します。

    * | project log_level=level, err_msg
  • 例3: 完全一致モードで __tag __: * に基づいてフィールドを保持します。

    * | project "__tag__:*"

プロジェクト-離れて

この命令は、指定されたパターンに一致するフィールドを削除し、他のすべてのフィールドをそのまま保持します。

重要

デフォルトでは、__time__および__time_ns_part__timeフィールドは保持されます。 詳細については、「時間フィールド」をご参照ください。

構文

| project-away -wildcard <field-pattern>, ...

パラメーター

パラメーター

データ型

必須

説明

ワイルドカード

Bool

課金されません

ワイルドカード一致モードを有効にするかどうかを指定します。 デフォルトでは、完全一致モードが使用されます。 ワイルドカード一致モードを有効にする場合は、このパラメーターを設定する必要があります。

フィールド-パターン

フィールドパターン

課金されます

削除するフィールドの名前、またはフィールドとワイルドカード文字の組み合わせ。 一致したフィールドはすべて処理されます。

project-rename

この命令は、指定されたフィールドの名前を変更し、他のすべてのフィールドをそのまま保持します。

重要

デフォルトでは、__time__および__time_ns_part__timeフィールドは保持され、名前を変更したり上書きしたりすることはできません。 詳細については、「時間フィールド」をご参照ください。

構文

| project-rename <output>=<field>, ...

パラメーター

パラメーター

データ型

必須

説明

アウトプット

フィールド

課金されます

名前を変更するフィールドの新しい名前。 複数のフィールドの名前を同じ名前に変更することはできません。

重要

新しい名前が入力データの既存のフィールド名と同じ場合、使用される名前が異なります。 詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

フィールド

フィールド

課金されます

名前を変更するフィールドの元の名前。

  • フィールドが入力データに存在しない場合、リネーム操作は実行されません。

  • フィールドの名前を複数回変更することはできません。

指定したフィールドの名前を変更します。

* | project-rename log_level=level, log_err_msg=err_msg

構造化データのSQL計算命令

伸ばす

この命令は、SQL式ベースのデータ計算の結果に基づいてフィールドを作成します。 SPLでサポートされているSQL関数の詳細については、「SPLでサポートされているSQL関数」をご参照ください。

構文

| extend <output>=<sql-expr>, ...

Parameters

パラメーター

データ型

必須

説明

アウトプット

フィールド

課金されます

作成するフィールドの名前。The name of the field to create. 複数の式の結果を格納するために同じフィールドを作成することはできません。

重要

新しいフィールド名が入力データの既存のフィールド名と同じ場合、新しいフィールドはデータ型と値に基づいて既存のフィールドを上書きします。

sql-expr

SQLExpr

課金されます

データ処理式。

重要

null値を処理する方法の詳細については、「SQL式のnull値の処理」をご参照ください。

  • 例1: 計算式の使用

    * | extend Duration = EndTime - StartTime
  • 例2: 正規表現を使用する。

    * | extend server_protocol_version=regexp_extract(server_protocol, '\d+')
  • 例3: JSONPathコンテンツを抽出し、フィールドのデータ型を変換します。

    • SPLステートメント

      *
      | extend a=json_extract(content, '$.body.a'), b=json_extract(content, '$.body.b')
      | extend b=cast(b as BIGINT)
    • 入力データ

      content: '{"body": {"a": 1, "b": 2}}'
    • 結果

      content: '{"body": {"a": 1, "b": 2}}'
      a: '1'
      b: 2

where

この命令は、SQL式ベースのデータ計算の結果に基づいてデータをフィルタリングします。 指定されたSQL式に一致するデータは保持されます。 where命令でサポートされているSQL関数の詳細については、「SPLでサポートされているSQL関数」をご参照ください。

構文

| where <sql-expr>

Parameters

パラメーター

データ型

必須

説明

sql-expr

SQLExp

課金されます

SQL式。 この式に一致するデータは保持されます。

重要

null値を処理する方法の詳細については、「SQL式のnull値の処理」をご参照ください。

  • 例1: フィールドコンテンツに基づいてデータをフィルタリングします。

    * | where userId='123'
  • 例2: フィールド名に基づいてデータと一致する正規表現を使用してデータをフィルタリングします。

    * | where regexp_like(server_protocol, '\d+')
  • 例3: サーバーエラーのすべてのデータに一致するようにフィールドのデータ型を変換します。

    * | where cast(status as BIGINT) >= 500

半構造化データの抽出手順

parse-regexp

この命令は、指定された正規表現のグループに一致する情報を指定されたフィールドから抽出します。

重要
  • 出力フィールドのデータ型はVARCHARです。 出力フィールド名が入力データの既存のフィールド名と同じである場合、使用される名前が異なります。 詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__および__time_ns_part__timeフィールドはサポートされていません。 詳細については、「時間フィールド」をご参照ください。

構文

| parse-regexp <field>, <pattern> as <output>, ...

パラメーター

パラメーター

データ型

必須

説明

フィールド

フィールド

課金されます

情報を抽出するフィールドの元の名前。

このフィールドが入力データに含まれ、フィールドタイプがVARCHARで、フィールド値がnull以外の値であることを確認します。 そうでなければ、抽出操作は実行されない。

pattern

Regexp

課金されます

正規表現を入力します。 RE2構文がサポートされています。

アウトプット

フィールド

課金されません

通常の抽出の抽出結果を格納するために使用する出力フィールドの名前。

  • 例1: 探索的一致モードを使用する。

    • SPLステートメント

      *
      | parse-regexp content, '(\S+)' as ip -- Generate the ip: 10.0.0.0 field. 
      | parse-regexp content, '\S+\s+(\w+)' as method -- Generate the method: GET field.

    • 入力データ

      content: '10.0.0.0 GET /index.html 15824 0.043'
    • 結果

      content: '10.0.0.0 GET /index.html 15824 0.043'
      ip: '10.0.0.0'
      method: 'GET'
  • 例2: 完全パターン一致モードを使用し、正規表現で名前のないキャプチャグループを使用します。

    • SPLステートメント

      * | parse-regexp content, '(\S+)\s+(\w+)' as ip, method
    • 入力データ

      content: '10.0.0.0 GET /index.html 15824 0.043'
    • 結果

      content: '10.0.0.0 GET /index.html 15824 0.043'
      ip: '10.0.0.0'
      method: 'GET'

parse-csv

指定されたフィールドからCSV形式の情報を抽出します。

重要
  • 出力フィールドのデータ型はVARCHARです。 出力フィールド名が入力データの既存のフィールド名と同じである場合、使用される名前が異なります。 詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__および__time_ns_part__timeフィールドはサポートされていません。 詳細については、「時間フィールド」をご参照ください。

構文

| parse-csv -delim=<delim> -quote=<quote> -strict <field> as <output>, ...

パラメーター

パラメーター

データ型

必須

説明

delim

String

課金されません

入力データの区切り文字。 1〜3つの有効なASCII文字を指定できます。

エスケープ文字を使用して特殊文字を示すことができます。 たとえば、\tはタブ文字を示し、\11はシリアル番号が8進数11に対応するASCII文字を示し、\x09はシリアル番号が16進数09に対応するASCII文字を示します。

$$$ や ^_^ など、複数の文字の組み合わせを区切り文字として使用することもできます。

デフォルト値はコンマ (,) です。

quote

Char

課金されません

入力データの引用符。 1つの有効なASCII文字を指定できます。 入力データに区切り文字が含まれている場合は、引用符を指定する必要があります。

たとえば、二重引用符 ("") 、一重引用符 (") 、または印刷できない文字 (0x01) を指定できます。

デフォルト値: 二重引用符 ("")

重要

このパラメーターは、delimパラメーターを1文字に設定した場合にのみ有効です。 quoteパラメーターとdelimパラメーターに異なる値を指定する必要があります。

strict

Bool

課金されません

入力データの値の数とoutputパラメーターで指定したフィールドの数が異なる場合に厳密ペアリングを有効にするかどうかを指定します。

  • 偽: 厳密でないペアリング。 最大ペアリングポリシーが使用されます。

    • 値の数がフィールドの数を超える場合、追加の値は返されません。

    • フィールドの数が値の数を超えると、余分なフィールドは空の文字列として返されます。

  • 真: 厳密なペアリング。 フィールドは返されません。

デフォルト値:False。 厳密なペアリングを有効にする場合は、このパラメーターを設定します。

フィールド

フィールド

課金されます

解析するフィールドの名前。

このフィールドが入力データに含まれ、フィールドタイプがVARCHARで、フィールド値がnull以外の値であることを確認します。 そうでなければ、抽出操作は実行されない。

アウトプット

フィールド

課金されます

入力データの解析結果を格納するために使用するフィールドの名前。

  • 例1: シンプルモードでデータを一致させる。

    • SPLステートメント

      * | parse-csv content as x, y, z
    • 入力データ

      content: 'a,b,c'
    • 結果

      content: 'a,b,c'
      x: 'a'
      y: 'b'
      z: 'c'
  • 例2: 引用符として二重引用符を使用して、特殊文字を含むデータを照合します。

    • SPLステートメント

      * | parse-csv content as ip, time, host
    • 入力データ

      content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com'
    • 結果

      content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com'
      ip: '192.168.0.100'
      time: '10/Jun/2019:11:32:16,127 +0800'
      host: 'example.aliyundoc.com'
  • 例3: 区切り文字として複数の文字の組み合わせを使用します。

    • SPLステートメント

      * | parse-csv -delim='||' content as time, ip, req
    • 入力データ

      content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2'
    • 結果

      content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2'
      time: '05/May/2022:13:30:28'
      ip: '127.0.0.1'
      req: 'POST /put?a=1&b=2'

parse-json

この命令は、指定されたフィールドから第1層のJSON情報を抽出します。

重要
  • 出力フィールドのデータ型はVARCHARです。 出力フィールド名が入力データの既存のフィールド名と同じである場合、使用される名前が異なります。 詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__および__time_ns_part__timeフィールドはサポートされていません。 詳細については、「時間フィールド」をご参照ください。

構文

| parse-json -mode=<mode> -path=<path> -prefix=<prefix> <field>

パラメーター

パラメーター

データ型

必須

説明

mode

String

課金されません

出力フィールドの名前が入力データの既存のフィールド名と同じである場合に情報を抽出するために使用されるモード。 デフォルト値はoverwriteです。

パス

JSONPath

課金されません

指定されたフィールドのJSONパス。 JSONパスは、抽出する情報を見つけるために使用されます。

デフォルト値は空の文字列です。 デフォルト値を使用すると、指定されたフィールドの完全なデータが抽出されます。

prefix

String

課金されません

JSON構造を拡張することによって生成されるフィールドのプレフィックス。 デフォルト値は空の文字列です。

フィールド

フィールド

課金されます

解析するフィールドの名前。

このフィールドが入力データに含まれており、フィールド値がnull以外の値で、次のいずれかの条件を満たしていることを確認してください。 そうでなければ、抽出操作は実行されない。

  • データ型はJSONです。

  • データ型はVARCHARで、フィールド値は有効なJSON文字列です。

  • 例1: yフィールドからすべてのキーと値を抽出します。

    • SPLステートメント

      * | parse-json y
    • 入力データ

      x: '0'
      y: '{"a": 1, "b": 2}'
    • 結果

      x: '0'
      y: '{"a": 1, "b": 2}'
      a: '1'
      b: '2'
  • 例2: コンテンツフィールドからbodyキーの値を別のフィールドとして抽出します。

    • SPLステートメント

      * | parse-json -path='$.body' content
    • 入力データ

      content: '{"body": {"a": 1, "b": 2}}'
    • 結果

      content: '{"body": {"a": 1, "b": 2}}'
      a: '1'
      b: '2'
  • 例3: 保存モードで情報を抽出する。 既存のフィールドの場合は、元の値を保持します。

    • SPLステートメント

      * | parse-json -mode='preserve' y
    • 入力データ

      a: 'xyz'
      x: '0'
      y: '{"a": 1, "b": 2}'
    • 結果

      x: '0'
      y: '{"a": 1, "b": 2}'
      a: 'xyz'
      b: '2'