このトピックでは、Simple Log Service Processing Language (SPL) の手順について説明します。
パラメータデータ型
次の表に、SPL命令でサポートされるパラメータのデータ型を示します。
パラメータデータ型 | 説明 |
Bool | このパラメータは、ブール値を指定します。 このタイプのパラメータは、SPL命令におけるスイッチである。 |
Char | このパラメータは、ASCII文字値を指定します。 値を単一引用符 ('') で囲む必要があります。 たとえば、 |
Integer | パラメーターは整数値を指定します。 |
String | パラメーターは文字列値を指定します。 値を単一引用符 ('') で囲む必要があります。 例: |
RegExp | このパラメータは、RE2正規表現を指定します。 値を単一引用符 ('') で囲む必要があります。 例: RE2構文の詳細については、「構文」をご参照ください。 |
JSONPath | このパラメータは、JSONPath値を指定します。 値を単一引用符 ('') で囲む必要があります。 例: JSONPath構文の詳細については、「JsonPath」をご参照ください。 |
フィールド | フィールド名を指定します。 例: フィールド名に英数字、アンダースコア (_) 以外の特殊文字が含まれている場合は、フィールド名を二重引用符 ("") で囲む必要があります。 例: 説明 フィールド名の大文字と小文字の区別の詳細については、「SPL in different scenarios」をご参照ください。 |
フィールドパターン | フィールド名、またはフィールド名とワイルドカード文字の組み合わせを指定します。 アスタリスク (*) は、ゼロまたは複数の文字と一致するワイルドカード文字として使用できます。 値を二重引用符 ("") で囲む必要があります。 例: 説明 フィールド名の大文字と小文字の区別の詳細については、「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>, ...
パラメーター
パラメーター | データ型 | 必須 | 説明 |
フィールド | フィールド | 課金されます | 情報を抽出するフィールドの元の名前。 このフィールドが入力データに含まれ、フィールドタイプが |
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 | 課金されません | 入力データの値の数と
デフォルト値:False。 厳密なペアリングを有効にする場合は、このパラメーターを設定します。 |
フィールド | フィールド | 課金されます | 解析するフィールドの名前。 このフィールドが入力データに含まれ、フィールドタイプが |
アウトプット | フィールド | 課金されます | 入力データの解析結果を格納するために使用するフィールドの名前。 |
例
例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以外の値で、次のいずれかの条件を満たしていることを確認してください。 そうでなければ、抽出操作は実行されない。
|
例
例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'