このトピックでは、値抽出関数の構文とパラメーターについて説明します。 このトピックでは、関数の使用方法の例も示します。
関数
カテゴリ | 関数 | 説明 |
正規表現に基づく抽出 | 正規表現に基づいてフィールドの値を抽出し、その値を他のフィールドに割り当てます。 この関数は、他の関数と一緒に使用できます。 詳細については、「Javaエラーログの解析」をご参照ください。 | |
JSONオブジェクトに基づく抽出 | 指定されたフィールドのJSONオブジェクトに対して操作を実行します。 パラメーターを設定して、JSONデータを展開したり、JMESPath式を使用してJSONデータを抽出したり、抽出されたJSONデータを展開したりできます。 この関数は、他の関数と一緒に使用できます。 詳細については、「複雑なJSONデータの変換」をご参照ください。 | |
区切り文字を使用した抽出 | 指定した区切り文字と定義済みのフィールド名を使用して、指定したフィールドから複数のフィールドを抽出します。
この関数は、他の関数と一緒に使用できます。 詳細については、「CSV形式のログファイルでのログの解析」をご参照ください。 | |
キーと値のペアの抽出 | 指定した引用符を使用して、複数の入力フィールドからキーと値のペアを抽出します。 この関数は、他の関数と一緒に使用できます。 詳細については、「文字列から動的キーと値のペアを抽出する」をご参照ください。 | |
指定された区切り文字を使用して、入力フィールドからキーと値のペアを抽出します。 | ||
syslogプロトコルに基づく抽出 | facilityフィールドとseverityフィールドの値を計算し、レベル情報を示すfacilitylabelフィールドの値を返します。 この関数は、priorityフィールドの値と指定されたsyslogプロトコルに基づいて値を計算します。 この関数は、他の関数と一緒に使用できます。 詳細については、「標準形式でのSyslogメッセージの解析」をご参照ください。 | |
指定されたルールに基づく抽出 | 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
パラメーターをfull、parent、またはrootに設定した場合、このパラメーターを設定する必要があります。 デフォルト値:.
expand_array
ブール値
課金されません
入力フィールドを配列に展開するかどうかを指定します。 デフォルト値:
True
。これは、入力フィールドが配列に展開されることを示します。fmt_array
String
課金されません
入力フィールドを配列に展開するために使用される書式設定方法。 形式は
{parent_rlist[0]}_{ index}
です。 入力フィールドを拡張するには、parent_list
、current
、sep
、prefix
、suffix
のうち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_path
とexclue_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パラメーターを設定するときは、デフォルトのスペースを削除します。
説明入力フィールドを指定する場合、接頭辞または接尾辞としてアスタリスク (*) を使用することはできません。
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