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

Simple Log Service:値抽出関数

最終更新日:Aug 27, 2024

このトピックでは、値抽出関数の構文とパラメーターについて説明します。 このトピックでは、関数の使用方法の例も示します。

関数

カテゴリ

関数

説明

正規表現に基づく抽出

e_regex

正規表現に基づいてフィールドの値を抽出し、その値を他のフィールドに割り当てます。

この関数は、他の関数と一緒に使用できます。 詳細については、「Javaエラーログの解析」をご参照ください。

JSONオブジェクトに基づく抽出

e_json

指定されたフィールドのJSONオブジェクトに対して操作を実行します。 パラメーターを設定して、JSONデータを展開したり、JMESPath式を使用してJSONデータを抽出したり、抽出されたJSONデータを展開したりできます。

この関数は、他の関数と一緒に使用できます。 詳細については、「複雑なJSONデータの変換」をご参照ください。

区切り文字を使用した抽出

e_csv、e_psv、およびe_tsv

指定した区切り文字と定義済みのフィールド名を使用して、指定したフィールドから複数のフィールドを抽出します。

  • e_csv: デフォルトの区切り文字としてコンマ (,) を使用します。

  • e_psv: デフォルトの区切り文字として垂直バー (|) を使用します。

  • e_tsv: デフォルトの区切り文字としてタブ (\t) を使用します。

この関数は、他の関数と一緒に使用できます。 詳細については、「CSV形式のログファイルでのログの解析」をご参照ください。

キーと値のペアの抽出

e_kv

指定した引用符を使用して、複数の入力フィールドからキーと値のペアを抽出します。

この関数は、他の関数と一緒に使用できます。 詳細については、「文字列から動的キーと値のペアを抽出する」をご参照ください。

e_kv_delimit

指定された区切り文字を使用して、入力フィールドからキーと値のペアを抽出します。

syslogプロトコルに基づく抽出

e_syslogrfc

facilityフィールドとseverityフィールドの値を計算し、レベル情報を示すfacilitylabelフィールドの値を返します。 この関数は、priorityフィールドの値と指定されたsyslogプロトコルに基づいて値を計算します。

この関数は、他の関数と一緒に使用できます。 詳細については、「標準形式でのSyslogメッセージの解析」をご参照ください。

指定されたルールに基づく抽出

e_anchor

anchor_rulesで指定されたルールを使用して文字列を抽出します。

e_regex

e_regex関数は、正規表現に基づいてフィールドの値を抽出し、その値を他のフィールドに割り当てます。

  • e_regex(key,Regular expression,fields_info,mode="fill-auto",pack_json=None)
  • パラメーター

    データ型

    必須

    説明

    キー

    任意

    課金されます

    入力フィールドの名前。 指定したフィールドが存在しない場合、操作は実行されません。 特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。

    正規表現

    String

    課金されます

    フィールドの値を抽出するために使用される正規表現。 キャプチャグループと非キャプチャグループを含む正規表現がサポートされています。

    説明

    一部のシナリオでは、キャプチャしないグループを含む正規表現が使用されます。 非キャプチャグループは、疑問符とコロン (?:) で構成されるプレフィックスを使用します。 例: \w + @\w +\.\w(?:\.\cn)? 非キャプチャグループの詳細については、「非キャプチャグループ」をご参照ください。

    fields_info

    文字列 /リスト /ディクト

    課金されません

    抽出された値が割り当てられるフィールドの名前。 正規表現で名前付きキャプチャグループを指定しない場合は、このパラメーターを設定する必要があります。

    mode

    String

    課金されません

    フィールドの上書きモード。 デフォルト値: fill-auto このパラメーターの他の値の詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

    pack_json

    String

    課金されません

    fields_infoで指定されたフィールドがパックされるフィールド。 デフォルト値: なし。フィールドがパックされていないことを示します。

  • 新しいフィールド値を含むログが返されます。

    • 例1: 指定された正規表現に一致する値をフィールドから抽出します。

      • Raw log:

        msg: 192.168.0.1 http://... 127.0.0.0
      • 変換ルール:

        # Extract the first IP address from the msg field.  
        e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
      • 結果:

        msg: 192.168.0.1 http://... 127.0.0.0
        ip: 192.168.0.1
    • 例2: 指定された正規表現に一致する複数の値をフィールドから抽出します。

      • Raw log:

        msg: 192.168.0.1 http://... 127.0.0.0
      • 変換ルール:

        # Extract two IP addresses from the msg field and assign one IP address to server_ip and the other IP address to client_ip. 
        e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"])
      • 結果:

        msg: 192.168.0.1 http://... 127.0.0.0
        server_ip: 192.168.0.1
        client_ip: 127.0.0.0
    • 例3: キャプチャグループを使用して、指定された正規表現に一致する複数の値をフィールドから抽出します。

      • Raw log:

        content: start sys version: deficience, err: 2
      • 変換ルール:

        # Extract the values for version and error from the content field by including a capturing group in the regular expression. 
        e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"])
      • 結果:

        content: start sys version: deficience, err: 2
        error: 2
        version: deficience
    • 例4: 名前付きキャプチャグループを使用して、フィールドから複数の値を抽出します。

      • Raw log:

        content:  start sys version: deficience, err: 2
      • 変換ルール:

        e_regex("content",r"start sys version: (?P<version>\w+),\s*err: (?P<error>\d+)")
      • 結果:

        content:  start sys version: deficience, err: 2
        error:  2
        version:  deficience
    • 例5: 指定された正規表現でキャプチャグループを使用してdictフィールドの値を抽出し、その値のフィールド名を動的に生成して、値を再フォーマットします。

      • Raw log:

        dict: verify:123
      • 変換ルール:

        e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"})
      • 結果:

        dict: verify:123
        k_verify: v_123
    • 例6: 指定された正規表現に一致する値をフィールドから抽出し、結果をnameフィールドにパックします。

      • Raw log:

        msg: 192.168.0.1 http://... 127.0.0.0
      • 変換ルール:

        e_regex("msg", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip", pack_json="name")
      • 結果:

        msg:192.168.0.1 http://... 127.0.0.0
        name:{"ip": "192.168.0.1"}
    • 例7: 指定された正規表現を使用してdictフィールドの値を抽出し、値のフィールド名を動的に生成して値を再フォーマットし、結果をnameフィールドにパックします。

      • Raw log:

        dict: x:123, y:456, z:789
      • 変換ルール:

        e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name")
      • 結果:

        dict:x:123, y:456, z:789
        name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
    • 例8: キャプチャグループを使用して、指定された正規表現に一致する複数の値を抽出し、結果をnameフィールドにパックします。

      • Raw log:

        content: start sys version: deficience, err: 2
      • 変換ルール:

        e_regex( "content", r"start sys version: (\w+),\s*err: (\d+)", ["version", "error"],pack_json="name")
      • 結果:

        content:start sys version: deficience, err: 2
        name:{"version": "deficience", "error": "2"}
  • 関連ドキュメント

    この関数は、他の関数と一緒に使用できます。 詳細については、「Javaエラーログの解析」をご参照ください。

e_json

e_json関数は、指定されたフィールドのJSONオブジェクトに対して操作を実行します。 パラメーターを設定して、JSONデータを展開したり、JMESPath式を使用してJSONデータを抽出したり、抽出されたJSONデータを展開したりできます。

  • e_json(key, expand=None, depth=100, prefix="__", suffix="__", fmt="simple", sep=".", 
         expand_array=True, fmt_array="{parent}_{index}", 
         include_node=r"[\u4e00-\u9fa5\u0800-\u4e00a-zA-Z][\w\-\.]*",  
         exclude_node="", include_path="", exclude_path="",
         jmes="", output="", jmes_ignore_none=False, mode='fill-auto'
    )
    説明

    e_json関数を使用してJSON構文に従わない文字列を解析する場合、関数は文字列を解析せず、元の文字列を返します。

  • パラメーター

    データ型

    必須

    説明

    キー

    String

    課金されます

    入力フィールドの名前。 指定したフィールドが存在しない場合、操作は実行されません。 特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。

    展開

    ブール値

    課金されません

    入力フィールドを展開するかどうかを指定します。

    • jmesパラメーターを設定しない場合、デフォルトでは、expandパラメーターに値Trueが使用されます。 値Trueは、入力フィールドが拡張されていることを示します。

    • jmesパラメーターを設定した場合、デフォルトでFalse値がexpandパラメーターに使用されます。 値Falseは、入力フィールドが拡張されていないことを示します。

    深さ

    課金されません

    関数が入力フィールドを拡張する深さ。 有効な値: 1 ~ 2000 デフォルト値:100 値1は、フィールドの最初のレベルのみが拡張されることを示します。

    prefix

    String

    課金されません

    拡張されたフィールドに追加するプレフィックス。

    suffix

    String

    課金されません

    拡張されたフィールドに追加するサフィックス。

    fmt

    String

    課金されません

    展開されたフィールドの書式設定方法。 有効な値:

    • simple: 現在のノードの名前がフィールド名として使用されます。 デフォルト値です。 形式は {prefix}{current}{suffix} です。

    • full: 現在のノードの名前とすべての親ノードの名前が結合され、フィールド名として使用されます。 形式は {parent_list_str}{sep}{prefix}{current}{suffix} です。 区切り文字はsepパラメーターで指定します。 デフォルトの区切り文字はピリオド (.) です。

    • parent: 現在のノードの名前と最も近い親ノードの名前を組み合わせて、フィールド名として使用します。 形式は {parent}{sep}{prefix}{current}{suffix} です。 区切り文字はsepパラメーターで指定します。 デフォルトの区切り文字はピリオド (.) です。

    • root: 現在のノードの名前とルートノードの名前を組み合わせて、フィールド名として使用します。 形式は {parent_list[0]}{sep}{prefix}{current}{suffix} です。 区切り文字はsepパラメーターで指定します。 デフォルトの区切り文字はピリオド (.) です。

    sep

    String

    課金されません

    関数がデータをフォーマットするときに親ノードと子ノードを区切るために使用される区切り文字。 fmtパラメーターをfullparent、またはrootに設定した場合、このパラメーターを設定する必要があります。 デフォルト値:.

    expand_array

    ブール値

    課金されません

    入力フィールドを配列に展開するかどうかを指定します。 デフォルト値: True。これは、入力フィールドが配列に展開されることを示します。

    fmt_array

    String

    課金されません

    入力フィールドを配列に展開するために使用される書式設定方法。 形式は {parent_rlist[0]}_{ index} です。 入力フィールドを拡張するには、parent_listcurrentsepprefixsuffixのうち5つまでのプレースホルダーを使用することもできます。

    include_node

    文字列 /番号

    課金されません

    フィルタリングが実行されるノード名のホワイトリスト。 デフォルトでは、数字、文字、アンダースコア (_) 、ピリオド (.) 、およびハイフン (-) を含むノード名は自動的に展開されます。

    exclude_node

    String

    課金されません

    フィルタリングが実行されるノード名のブラックリスト。

    include_path

    String

    課金されません

    フィルタリングが実行されるノードパスのホワイトリスト。

    exclude_path

    String

    課金されません

    フィルタリングが実行されるノードパスのブラックリスト。

    jmes

    String

    課金されません

    フィールド値をJSONオブジェクトに変換し、特定の値を抽出するために使用されるJMESPath式。

    アウトプット

    String

    課金されません

    JMESPath式を使用して抽出された値に対して返されるフィールド名。

    jmes_ignore_none

    ブール値

    課金されません

    JMESPath式を使用してフィールドの値を抽出できない場合に、フィールドをスキップするかどうかを指定します。 デフォルト値: True。これは、JMESPath式を使用してフィールドの値を抽出できない場合、フィールドがスキップされることを示します。 jmes_ignore_noneパラメーターにFalseを指定した場合、同じ状況で空の文字列が返されます。

    mode

    String

    課金されません

    フィールドの上書きモード。 デフォルト値: fill-auto このパラメーターの他の値の詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

    • JSONフィールドの拡張とフィルタリング

      • ノード名のホワイトリストが指定されている場合、ホワイトリストに含まれるノード名のみが返されます。 たとえば、e_json("json_data_filed", ...., include_node=r'key\d + ') は、正規表現内のノード名のホワイトリストを指定します。

      • ノード名のブラックリストが指定されている場合、ブラックリストに含まれるノード名のみが返されません。 たとえば、e_json("json_data_filed", ...., exclude_node=r'key\d + ') は、正規表現内のノード名のブラックリストを指定します。

      • 正規表現includ_pathexclue_pathは、最初からノードパスを照合するために使用されます。 ピリオド (.) は、正規表現に一致するパスを区切るために使用されます。

    • JMESPathベースのフィルタリング

      JMESPath式は、データの選択と計算に使用されます。

      • 指定されたJSONパスから要素属性のリストを選択します。e_json(..., jmes="cve.vendors[*].product",output="product")

      • e_json(..., jmes="join(',',', cve.vendors[*].name)",output="vendors") を使用して、指定したJSONパスの要素属性を連結します。

      • 指定したJSONパスの各要素の各属性の最大値を計算します。e_json(..., jmes="max(words[*].score)",output="hot_word")

      • 指定されたJSONパスが存在しない、または空の場合は、e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=False) を返します。

    • parent_listとparent_rlist

      次の例は、parent_listとparent_rlistの使用方法を示しています。

      Raw log:

      data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
      • parent_listは親ノードを左から右にソートします。

        e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')

        結果:

        data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
        data-k2#k3:200
        data-k2#k5:300
      • parent_rlistは親ノードを右から左にソートします。

        e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')

        結果:

        data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
        k2-data#k3:200
        k4-k2#k5:300
  • 新しいフィールド値を含むログが返されます。

    • 例1: フィールドを展開します。

      • Raw log:

        data: {"k1": 100, "k2": 200}
      • 変換ルール:

        e_json("data",depth=1)
      • 結果:

        data: {"k1": 100, "k2": 200}
        k1: 100
        k2: 200
    • 例2: 拡張フィールドにプレフィックスとサフィックスを追加します。

      • Raw log:

        data: {"k1": 100, "k2": 200}
      • 変換ルール:

        e_json("data", prefix="data_", suffix="_end")
      • 結果:

        data: {"k1": 100, "k2": 200}
        data_k1_end: 100
        data_k2_end: 200
    • 例3: フィールドをさまざまな形式で展開します。

      • Raw log:

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
      • フルフォーマットでフィールドを展開します。

        e_json("data", fmt='full')

         data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
         data.k1: 100
         data.k2.k3: 200
         data.k2.k4.k5: 300
      • 親形式でフィールドを展開します。

        e_json("data", fmt='parent')

         data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
         data.k1: 100
         k2.k3: 200
         k4.k5: 3000
      • ルート形式でフィールドを展開します。

        e_json("data", fmt='root')

         data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
         data.k1: 100
         data.k3: 200
         data.k5: 300
    • 例4: sepパラメーター、prefixパラメーター、およびsuffixパラメーターを設定して、JSONデータを抽出します。

      • Raw log:

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
      • 変換ルール:

        e_json("data", fmt='parent', sep="@", prefix="__", suffix="__")
      • 結果:

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
        data@__k1__: 100
        k2@__k3__: 200
        k4@__k5__: 300
    • 例5: fmt_arrayパラメーターを設定して、JSONデータを配列として抽出します。

      • Raw log:

        people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
      • 変換ルール:

        e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}")
      • 結果:

        people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
        people-0.name: xm
        people-0.sex: boy
        people-1.name: xz
        people-1.sex: boy
        people-2.name: xt
        people-2.sex: girl
    • 例6: JMESPath式を使用してJSONオブジェクトを抽出します。

      • Raw log:

        data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
      • 変換ルール:

        e_json("data", jmes='foo', output='jmes_output0')
        e_json("data", jmes='foo.bar', output='jmes_output1')
        e_json("data", jmes='people[0].last', output='jmes_output2')
        e_json("data", jmes='people[*].first', output='jmes_output3')
      • 結果:

        data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
        jmes_output0: {"bar": "baz"}
        jmes_output1: baz
        jmes_output2: d
        jmes_output3: ["james", "jacob"]
  • 関連ドキュメント

    この関数は、他の関数と一緒に使用できます。 詳細については、「複雑なJSONデータの変換」をご参照ください。

e_csv、e_psv、およびe_tsv

e_csv関数、e_psv関数、およびe_tsv関数は、指定された区切り文字と定義済みのフィールド名を使用して、指定された入力フィールドから複数のフィールドを抽出します。

  • e_csv: デフォルトの区切り文字としてコンマ (,) を使用します。

  • e_psv: デフォルトの区切り文字として垂直バー (|) を使用します。

  • e_tsv: デフォルトの区切り文字としてタブ (\t) を使用します。

  • e_csv(Input field name, Output field list, sep=",", quote='"', restrict=True, mode="fill-auto")
    e_psv(Input field name, Output field list, sep="|", quote='"', restrict=True, mode="fill-auto")
    e_tsv(Input field name, Output field list, sep="\t", quote='"', restrict=True, mode="fill-auto")
  • パラメーター

    データ型

    必須

    説明

    入力フィールド名

    任意

    課金されます

    入力フィールドの名前。 指定したフィールドが存在しない場合、操作は実行されません。 特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。

    出力フィールドリスト

    任意

    課金されます

    入力フィールドの値の後に返されるフィールドの名前は、指定された区切り文字を使用して区切ります。

    フィールド名は文字列リストに含めることができます。 例: ["error", "message", "result"]

    フィールド名にコンマ (,) が含まれていない場合は、区切り文字としてコンマ (,) を使用して文字列を区切ることができます。 例: "error, message, result"

    特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。

    sep

    String

    課金されません

    入力フィールドの値を区切るために使用される区切り文字。 区切り文字として1文字を指定する必要があります。

    quote

    String

    課金されません

    値を囲むために使用される引用符。 値に区切り文字が含まれている場合は、このパラメーターを設定する必要があります。

    制限する

    ブール値

    課金されません

    制限モードを有効にするかどうかを指定します。 デフォルト値: False。制限モードが無効になっていることを示します。 入力フィールドの値で区切り文字で区切られた値の数と出力フィールド名の数が異なる場合、モードによって関数が実行する操作が異なります。

    • 制限モードが有効になっている場合、機能は操作を実行しません。

    • 制限モードが無効になっている場合、関数は指定されたフィールドを値に照合し、フィールドに特定の値を割り当てます。

    mode

    String

    課金されません

    フィールドの上書きモード。 デフォルト値: fill-auto このパラメーターの他の値の詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

  • 新しいフィールド値を含むログが返されます。

  • この例では、e_csv関数が使用されています。 e_psv関数とe_tsv関数は、e_csv関数と同様に機能します。

    • Raw log:

      content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,-
    • 変換ルール:

      e_csv("content", "remote_addr, time_local,host,request,status,request_time,body_bytes_sent,upstream_addr,upstream_status, upstream_response_time,http_referer,http_x_forwarded_for,http_user_agent,session_id,guid")
    • 結果:

      content:  192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36,-,-
        body_bytes_sent:  6404
      guid:  -
      host:  example.aliyundoc.com
      http_referer:  https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei
      http_user_agent:  Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36
      http_x_forwarded_for:  -
      remote_addr:  192.168.0.100
      request:  GET /zf/11874.html HTTP/1.1
      request_time:  0.077
      session_id:  -
      status:  200
      time_local:  10/Jun/2019:11:32:16 +0800
      topic:  syslog-forwarder
      upstream_addr:  192.168.0.100:8001
      upstream_response_time:  0.060
      upstream_status:  200
  • 関連ドキュメント

    この関数は、他の関数と一緒に使用できます。 詳細については、「CSV形式のログファイルでのログの解析」をご参照ください。

e_kv

e_kv関数は、指定された引用符を使用して、複数の入力フィールドからキーと値のペアを抽出します。

  • e_kv(Input field name or input field list, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto")
  • パラメーター

    データ型

    必須

    説明

    入力フィールド名または入力フィールドリスト

    String or string list

    課金されます

    入力フィールドの名前または複数の入力フィールドの名前。 特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。

    sep

    String

    課金されません

    正規表現でキーとキーの値を区切るために使用される区切り文字。 デフォルト値:= 区切り文字として1つ以上の文字を指定できます。

    説明

    正規表現では非キャプチャグループを使用できますが、正規表現ではキャプチャグループを使用できません。 グループ化の詳細については、「グループ化」をご参照ください。

    quote

    String

    課金されません

    値を囲むために使用される引用符。 デフォルト値:"

    説明

    動的キーと値のペアから抽出された値を囲むようにquoteパラメーターを設定することをお勧めします。 例: a="abc" およびb="xyz" 。 quoteパラメーターを設定しない場合、抽出された値には、文字、数字、アンダースコア (_) 、ハイフン (-) 、ピリオド (.) 、パーセント記号 (%) 、およびチルダ (~) のみを含めることができます。 たとえば、a=ab12_-.% ~ | abc b=123からa: ab12_-.% ~b: 123を抽出できます。

    脱出

    ブール値

    課金されません

    入力フィールドの値にエスケープ文字を抽出するかどうかを指定します。 デフォルト値: False。これは、入力フィールドの値のエスケープ文字が抽出されないことを示します。 たとえば、keyフィールドの値abc\ は、デフォルトでkey="abc\" xyz "から抽出されます。 escapeパラメーターがTrueに設定されている場合、抽出された値はabc "xyzです。

    prefix

    String

    課金されません

    抽出されたフィールドに追加されるプレフィックス。

    suffix

    String

    課金されません

    抽出されたフィールドに追加されるサフィックス。

    mode

    String

    課金されません

    フィールドの上書きモード。 デフォルト値: fill-auto このパラメーターの他の値の詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

  • 新しいフィールド値を含むログが返されます。

    • 例1: デフォルトの区切り文字=を使用してキーと値のペアを抽出します。

      • Raw log:

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        説明

        生ログがrequest_uri: a1=1&a2=&a3=3で、a2の値が空の場合、e_kv() 関数はa2の値を抽出できません。 e_regex() 関数を使用して、a2の値を抽出できます。 例: e_regex("request_uri",r'(\w +)=([^=&]*)',{r "\1":r "\2"},mode="overwrite")

      • 変換ルール:

        e_kv("http_refer")
      • 結果:

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        q: asd
        a: 1
        b: 2
    • 例2: 抽出されたフィールドにプレフィックスとサフィックスを追加します。

      • Raw log:

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
      • 変換ルール:

        e_kv(
            "http_refer",
            sep="=",
            quote='"',
            escape=False,
            prefix="data_",
            suffix="_end",
            mode="fill-auto",
        )
      • 結果:

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        data_q_end: asd
        data_a_end: 1
        data_b_end: 2
    • 例3: content2フィールドからキーと値のペアを抽出し、escapeパラメーターを使用してエスケープ文字を抽出します。

      • Raw log:

        content2: k1:"v1\"abc", k2:"v2", k3: "v3"
      • 変換ルール:

        e_kv("content2", sep=":", escape=True)
      • 結果:

        content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
        k1: v1"abc
        k2: v2
        k3: v3
  • 関連ドキュメント

    この関数は、他の関数と一緒に使用できます。 詳細については、「文字列から動的キーと値のペアを抽出する」をご参照ください。

e_kv_delimit

e_kv_delimit関数は、指定された区切り文字を使用して、入力フィールドからキーと値のペアを抽出します。

  • e_kv_delimit(Input field name or input field list, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")
  • パラメーター

    データ型

    必須

    説明

    入力フィールド名または入力フィールドリスト

    String or string list

    課金されます

    入力フィールドの名前または複数の入力フィールドの名前。 特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。

    pair_sep

    String

    課金されません

    キーと値のペアを区切るために使用される正規表現。 デフォルト値: \s \s\wまたはabc\sを指定することもできます。

    説明

    文字列を使用してキーと値のペアを区切りたい場合は、str_replaceまたはregex_replaceを使用して文字に変換することを推奨します。 次に、キーと値のペアを区切るためにpair_sepパラメーターの値として文字を指定することにより、e_kv_delimit関数を使用できます。

    kv_sep

    String

    課金されません

    キーと値のペアを区切るために使用される正規表現。 デフォルト値:= 正規表現には1つ以上の文字を含めることができます。

    説明

    正規表現では非キャプチャグループを使用できますが、正規表現ではキャプチャグループを使用できません。 グループ化の詳細については、「グループ化」をご参照ください。

    prefix

    String

    課金されません

    抽出されたフィールドに追加されるプレフィックス。

    suffix

    String

    課金されません

    抽出されたフィールドに追加されるサフィックス。

    mode

    String

    課金されません

    フィールドの上書きモード。 デフォルト値: fill-auto このパラメーターの他の値の詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

  • 新しいフィールド値を含むログが返されます。

    • 例1: デフォルトの区切り文字=を使用してキーと値のペアを抽出します。

      • Raw log:

        data: i=c1 k1=v1 k2=v2 k3=v3
        説明

        生ログがrequest_uri: a1=1&a2=&a3=3で、a2の値が空の場合、e_kv_delimit() 関数はa2の値を抽出できません。 e_regex() 関数を使用して、a2の値を抽出できます。 例: e_regex("request_uri",r'(\w +)=([^=&]*)',{r "\1":r "\2"}, mode="overwrite")

      • 変換ルール:

        e_kv_delimit("data")
      • 結果:

        data: i=c1 k1=v1 k2=v2 k3=v3
        i: c1
        k2: v2
        k1: v1
        k3: v3
    • 例2: 区切り文字 &? を使用してキーと値のペアを抽出します。

      • Raw log:

        data: k1=v1&k2=v2?k3=v3
      • 変換ルール:

        e_kv_delimit("data",pair_sep=r"&?")
      • 結果:

        data: k1=v1&k2=v2?k3=v3
        k2: v2
        k1: v1
        k3: v3
    • 例3: 正規表現を使用してキーと値のペアを抽出します。

      • Raw log:

        data: k1=v1 k2:v2 k3=v3
      • 変換ルール:

        e_kv_delimit("data", kv_sep=r"(?:=|:)")
      • 結果:

        data: k1=v1 k2:v2 k3=v3
        k2: v2
        k1: v1
        k3: v3

e_syslogrfc

e_syslogrfc関数は、facilityフィールドとseverityフィールドの値を計算し、レベル情報を示すfacilitylabelフィールドの値を返します。 この関数は、priorityフィールドの値と指定されたsyslogプロトコルに基づいて値を計算します。

  • e_syslogrfc(key, rfc, fields_info=None, mode='overwrite')
  • パラメーター

    データ型

    必須

    説明

    キー

    任意

    課金されます

    入力フィールドの名前。 優先度を示すフィールドを入力する必要があります。

    rfc

    String

    課金されます

    使用されるsyslogプロトコル。 syslogプロトコルはRFCで定義されています。 有効な値: SYSLOGRFC3164およびSYSLOGRFC5424

    fields_info

    ディクト

    課金されません

    keyは入力フィールドの名前を示し、valueは新しいフィールドの名前を示します。 次のフィールドの名前を変更できます。 新しい名前は変更できます。 {"_severity_":"sev" 、"_facility_":"fac" 、"_severitylabel_":"sevlabel" 、"_facilitylabel_":"faclabel"}

    mode

    String

    課金されません

    フィールドの上書きモード。 デフォルト値: overwrite このパラメーターの他の値の詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

  • 新しいフィールドと値を含むログが返されます。

    • 例1: RFC 5424で定義されているsyslogプロトコルに基づいて、ファシリティフィールドと重大度フィールドの値を抽出し、レベル情報を返します。

      • Raw log:

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
      • 変換ルール:

        e_syslogrfc("_priority_","SYSLOGRFC5424")
      • 結果:

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
        _facility_: 1
        _severity_: 5
        _severitylabel_: Notice: normal but significant condition
        _facilitylabel_: user-level messages
    • 例2: RFC 5424で定義されているsyslogプロトコルに基づいて、ファシリティフィールドと重大度フィールドの値を抽出し、レベル情報を返します。 次に、fields_infoパラメーターを設定してフィールドの名前を変更します。

      • Raw log:

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
      • 変換ルール:

        e_syslogrfc(
            "_priority_",
            "SYSLOGRFC5424",
            {
                "_facility_": "fac",
                "_severity_": "sev",
                "_facilitylabel_": "_facility_label_",
                "_severitylabel_": "_severity_label_",
            },
        )
      • 結果:

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
        _facility_: 1
        _severity_: 5
        _severity_label_: Notice: normal but significant condition
        _facility_label_: user-level messages
  • 関連ドキュメント

    この関数は、他の関数と一緒に使用できます。 詳細については、「標準形式でのSyslogメッセージの解析」をご参照ください。

e_anchor

e_anchor関数は、anchor_rulesで指定されたルールを使用して文字列を抽出します。

  • e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite")
  • パラメーター

    データ型

    必須

    説明

    キー

    任意

    課金されます

    フィールドの名前を設定します。

    anchor_rules

    String

    課金されます

    文字列の抽出に使用されるルール。 例: User = *; Severity = *; アスタリスク (*) は、抽出するコンテンツを示します。

    デフォルトでは、Log ServiceコンソールのKey : Value形式で表示されるログのValueの前にスペースが指定されます。 anchor_rulesパラメーターを設定するときは、デフォルトのスペースを削除します。 e_anchor

    説明

    入力フィールドを指定する場合、接頭辞または接尾辞としてアスタリスク (*) を使用することはできません。

    fields

    任意

    課金されます

    入力フィールドの値から値が抽出される出力フィールドの名前。 フィールド名は文字列リストに含めることができます。 例: ["user", "job", "result"] フィールド名にコンマ (,) が含まれていない場合は、コンマ (,) を使用して文字列を区切ることができます。 例: "user, job, result" 特別なフィールド名を指定する方法の詳細については、「イベントタイプ」をご参照ください。 特殊フィールド名には、アスタリスク (*) 以外の特殊文字を含めることができます。

    アスタリスク (*) を使用して、フィールドをスキップできます。 たとえば、ユーザーと結果のみが「user,*,result」から抽出されます。 詳細については、例10を参照してください。

    制限する

    ブール値

    課金されません

    制限モードを有効にするかどうかを指定します。 デフォルト値: False。制限モードが無効になっていることを示します。 入力フィールドの値から抽出される値の数と出力フィールド名の数が異なる場合、関数が実行する操作はモードによって異なります。

    • 制限モードが有効になっている場合、機能は操作を実行しません。

    • 制限モードが無効になっている場合、関数は指定されたフィールドを値に照合し、フィールドに特定の値を割り当てます。

    mode

    String

    課金されません

    デフォルト値: overwrite。 詳細については、「フィールド抽出のチェックモードと上書きモード」をご参照ください。

  • 抽出されたデータが返されます。

    • 例1: ログから指定されたフィールドの値を抽出します。

      • Raw log:

        content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
      • 変換ルール:

        e_anchor("content","User=*: severity=*:",["user_field","severity_field"])
      • 結果:

        content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
        user_field : jsmith@example.com
        severity_field : warning
    • 例2: JSON配列形式で複数の値を抽出します。

      • Raw log:

        content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
      • 変換ルール:

        e_anchor("content",'name_list":*,"university":*},', ["name_list","universities"])
      • 結果:

        content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
        name_list : ["Twiss","Evan","Wind","like"]
        universities : ["UCL","Stanford University","CMU"]
    • 例3: 特殊文字を含むログを抽出します。

      • Raw log:

        content : (+2019) June 24 "I am iron man"
      • 変換ルール:

        e_anchor("content", "(+*) * \"*\"",["Year","Date","Msg"])
      • 結果:

        content : (+2019) June 24 "I am iron man"
        Year : 2019
        Date : June 24
        Msg : I am iron man

        です

    • 例4: コントロール文字 \x09を含むログを抽出します。

      • Raw log:

        content : \x09\x09\x09Chrome/55.0 Safari/537.36
      • 変換ルール:

        e_anchor("content", "\x09\x09\x09*/55.0 */537.36",["Google", "Apple"])
      • 結果:

        content : \x09\x09\x09Chrome/55.0 Safari/537.36
        Google : Chrome
        Apple : Safari
    • 例5: 特殊文字を含むフィールドコンテンツを抽出します。 MESSAGE: の後に来るTo...Subjectは、コンテンツフィールドの実際のコンテンツです。

      • Raw log:

        content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: 
        To: example@aliyun.com
        Subject: New line Breaks in Message

        で中断

      • 変換ルール:

        e_anchor("content","* INFO *: \n    To: *\n    Subject: *",["time","message","email","subject"])
      • 結果:

        content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: 
        To: example@aliyun.com
        Subject: New line Breaks in Message
        
        time : 12:08:10,651
        message : sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE
        email : example@aliyun.com
        subject : New line Breaks in Message

        で中断

    • 例6: 特殊文字を含むフィールドcontentを抽出し、コントロール文字 \tを表示しない値を返します。

      • Raw log:

        content :   I'm tabbed in
      • 変換ルール:

        e_anchor("content","\tI'm * in","word")
        # You can also use the following transformation rule to copy the value of the content field. Remove the default space from the value.
        e_anchor("content","    I'm * in","word")
      • 結果:

        content :   I'm tabbed in
        word : tabbed
    • 例7: 特殊文字を含むフィールドcontentを抽出し、コントロール文字 \tを表示する値を返します。

      • Raw log:

        content : \tI'm tabbed in
      • 変換ルール:

        e_anchor("content","\tI'm * in","word")
        # You can also use the following transformation rule:
        e_anchor("content","    I'm * in","word")
      • 結果:

        content : \tI'm tabbed in
        word : tabbed
    • 例8: 制限モードでログを抽出します。

      • Raw log:

        content :  I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
      • 変換ルール:

        e_anchor("content","I * to * having",["v_word", "n_word","asd"],restrict=True)
      • 結果:

        content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
    • 例9: 非制限モードでログを抽出します。

      • Raw log:

        content :  I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
      • 変換ルール:

        e_anchor("content","love * fight with my * and",["test1","test2","test13"],restrict=False)
      • 結果:

        content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
        test1 : having snowball
        test2 : friends
    • 例10: フィールドの値を抽出し、抽出した値を別のフィールドに割り当てます。

      • Raw log:

        content: Could you compare the severity of natural disasters to man-made disasters
      • 変換ルール:

        e_anchor('content', 'compare the * of natural disasters to man-made *', 'n-word,*')
      • 結果:

        content : Could you compare the severity of natural disasters to man-made disasters
        n-word : severity