Topik ini menjelaskan sintaksis fungsi ekstraksi nilai bidang, termasuk parameter dan contohnya.
Daftar fungsi
Type | Function | Description |
Regular expression extraction | Ekstrak nilai dari suatu bidang menggunakan regular expression dan tetapkan ke bidang lain. Fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Parse Java error logs. | |
JSON extraction | Memproses objek JSON dalam bidang tertentu. Operasi mencakup memperluas objek, mengekstrak data dengan JMESPath, atau mengekstrak dan memperluas. Fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Transform complex JSON data. | |
Delimiter-based extraction | Mengekstrak nilai untuk beberapa bidang dari bidang sumber menggunakan delimiter dan nama bidang yang telah ditentukan.
Fungsi-fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Parse CSV-formatted logs. | |
Key-value extraction | Mengekstrak pasangan kunci-nilai dari satu atau beberapa bidang sumber menggunakan karakter quote tertentu. Fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Extract dynamic key-value pairs from a string. | |
Mengekstrak pasangan kunci-nilai dari bidang sumber menggunakan delimiter. | ||
Syslog standard extraction | Menghitung facility dan severity dari nilai priority berdasarkan protokol Syslog dan memetakannya ke level yang sesuai. Fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Parse standard Syslog format data. | |
Rule-based extraction | Mengekstrak string menggunakan aturan yang didefinisikan dalam anchor_rules. |
e_regex
Mengekstrak nilai dari suatu bidang berdasarkan ekspresi reguler dan menetapkannya ke bidang lain.
Sintaksis
e_regex(key, regex, fields_info, mode="fill-auto", pack_json=None)Parameter
Parameter
Type
Required
Description
key
Any
Yes
Bidang sumber. Jika bidang tidak ada, fungsi tidak melakukan apa pun. Untuk informasi tentang cara mengonfigurasi nama bidang khusus, lihat event types.
regex
String
Yes
Regular expression yang digunakan untuk mengekstrak nilai bidang. Mendukung grup capturing maupun non-capturing.
CatatanGrup non-capturing, yang memerlukan awalan
?:, kadang-kadang digunakan untuk pengelompokan. Contohnya,\w+@\w+\.\w(?:\.\cn)?. Untuk informasi lebih lanjut, lihat non-capturing groups.fields_info
String/List/Dict
No
Bidang target untuk nilai yang cocok. Parameter ini wajib jika Anda tidak menggunakan named capturing groups dalam regular expression.
mode
String
No
Mode overwrite untuk bidang. Nilai default adalah fill-auto. Untuk informasi lebih lanjut tentang nilai dan maknanya, lihat field extraction check and overwrite mode.
pack_json
String
No
Menyimpan semua hasil yang cocok dari regular expression ke bidang yang ditentukan oleh
pack_json. Nilai default adalahNone, yang menunjukkan bahwa penyimpanan dinonaktifkan.Tanggapan
Mengembalikan log yang telah diperbarui dengan bidang yang diekstrak beserta nilainya.
Contoh
Contoh 1: Ekstrak satu nilai
raw log
msg: 192.168.0.1 http://... 127.0.0.0aturan transformasi
# Ekstrak alamat IP pertama dari bidang msg. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")hasil transformasi
msg: 192.168.0.1 http://... 127.0.0.0 ip: 192.168.0.1
Contoh 2: Ekstrak beberapa nilai
raw log
msg: 192.168.0.1 http://... 127.0.0.0aturan transformasi
# Ekstrak dua alamat IP dari bidang msg dan tetapkan ke server_ip dan client_ip. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"])hasil transformasi
msg: 192.168.0.1 http://... 127.0.0.0 server_ip: 192.168.0.1 client_ip: 127.0.0.0
Contoh 3: Ekstrak nilai menggunakan capturing group
raw log
content: start sys version: deficience, err: 2aturan transformasi
# Gunakan regular expression untuk menangkap nilai version dan error dari bidang content. e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"])hasil transformasi
content: start sys version: deficience, err: 2 error: 2 version: deficience
Contoh 4: Ekstrak nilai menggunakan named capturing group
raw log
content: start sys version: deficience, err: 2aturan transformasi
e_regex("content",r"start sys version: (?P<version>\w+),\s*err: (?P<error>\d+)")hasil transformasi
content: start sys version: deficience, err: 2 error: 2 version: deficience
Contoh 5: Buat nama bidang dan nilai secara dinamis dari bidang dict
raw log
dict: verify:123aturan transformasi
e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"})hasil transformasi
dict: verify:123 k_verify: v_123
Contoh 6: Ekstrak dan simpan nilai ke bidang name
raw log
msg: 192.168.0.1 http://... 127.0.0.0aturan transformasi
e_regex("msg", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip", pack_json="name")hasil transformasi
msg:192.168.0.1 http://... 127.0.0.0 name:{"ip": "192.168.0.1"}
Contoh 7: Buat bidang secara dinamis dari bidang dict dan simpan ke bidang name
raw log
dict: x:123, y:456, z:789aturan transformasi
e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name")hasil transformasi
dict:x:123, y:456, z:789 name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
Contoh 8: Ekstrak dan simpan nilai dari capturing group ke bidang name
raw log
content: start sys version: deficience, err: 2aturan transformasi
e_regex( "content", r"start sys version: (\w+),\s*err: (\d+)", ["version", "error"],pack_json="name")hasil transformasi
content:start sys version: deficience, err: 2 name:{"version": "deficience", "error": "2"}
Referensi
Anda dapat menggabungkan fungsi ini dengan fungsi lain. Untuk contoh terkait, lihat Parse Java error logs.
e_json
Menjalankan operasi JSON pada objek JSON dalam bidang tertentu. Operasi tersebut mencakup memperluas data JSON, mengekstrak data dengan ekspresi JMESPath, atau mengekstrak lalu memperluas subset JSON.
Sintaksis
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' )CatatanJika string target bukan objek JSON yang valid, fungsi
e_jsonmengembalikan string asli tanpa menguraikannya.Parameter
Parameter
Type
Required
Description
key
String
Yes
Nama bidang input. Jika bidang tidak ada, fungsi tidak melakukan apa pun. Untuk informasi tentang cara mengonfigurasi nama bidang khusus, lihat Event types.
expand
Boolean
No
Menentukan apakah akan memperluas bidang.
Jika parameter jmes tidak dikonfigurasi, nilai default adalah True, yang memperluas bidang.
Jika parameter jmes dikonfigurasi, nilai default adalah False, yang tidak memperluas bidang.
depth
Number
No
Kedalaman hingga fungsi memperluas bidang. Nilai valid: 1 hingga 2000. Nilai default adalah 100. Nilai 1 hanya memperluas level pertama.
prefix
String
No
Awalan yang ditambahkan ke setiap nama bidang yang diperluas.
suffix
String
No
Akhiran yang ditambahkan ke setiap nama bidang yang diperluas.
fmt
String
No
Metode pemformatan untuk nama bidang yang diperluas. Nilai valid:
simple (default): Menggunakan nama node saat ini sebagai nama bidang. Formatnya adalah
{prefix}{current}{suffix}.full: Menggabungkan path lengkap dari bidang sumber ke node saat ini sebagai nama bidang. Formatnya adalah
{parent_list_str}{sep}{prefix}{current}{suffix}. Delimiter ditentukan oleh parametersep. Delimiter default adalah..parent: Menggabungkan nama node saat ini dengan nama node induk langsungnya. Formatnya adalah
{parent}{sep}{prefix}{current}{suffix}. Delimiter ditentukan oleh parametersep. Delimiter default adalah..root: Menggabungkan nama node saat ini dengan nama node root. Formatnya adalah
{parent_list[0]}{sep}{prefix}{current}{suffix}. Delimiter ditentukan oleh parametersep. Delimiter default adalah..
sep
String
No
Delimiter antara nama node induk dan anak. Parameter ini berlaku ketika
fmtdiatur ke full, parent, atau root. Nilai default adalah..expand_array
Boolean
No
Menentukan apakah akan memperluas array. Nilai default adalah
True.fmt_array
String
No
Metode pemformatan untuk perluasan array. Formatnya adalah
{parent_rlist[0]}_{index}. Anda juga dapat membuat string format kustom dengan menggunakan hingga lima placeholder:parent_list,current,sep,prefix, dansuffix.include_node
String/Number
No
Daftar putih node menentukan nama node yang disertakan untuk penyaringan. Secara default, hanya node yang namanya terdiri dari karakter Tionghoa, angka, huruf, dan
_.-yang secara otomatis diperluas.exclude_node
String
No
Ekspresi reguler yang mendefinisikan daftar hitam nama node untuk dikecualikan.
include_path
String
No
Ekspresi reguler yang mendefinisikan daftar putih path node untuk disertakan.
exclude_path
String
No
Ekspresi reguler yang mendefinisikan daftar hitam path node untuk dikecualikan.
jmes
String
No
Ekspresi JMESPath untuk mengekstrak data dari objek JSON.
output
String
No
Nama bidang output untuk nilai yang diekstrak menggunakan ekspresi JMESPath.
jmes_ignore_none
Boolean
No
Menentukan perilaku ketika ekspresi JMESPath tidak menemukan nilai. Jika True (default), ekstraksi diabaikan. Jika
False, string kosong dikembalikan.mode
String
No
Mode overwrite bidang. Nilai default adalah fill-auto. Untuk informasi lebih lanjut, lihat Field extraction check and overwrite modes.
Penyaringan perluasan JSON
Jika daftar putih node ditetapkan, hanya node dalam daftar putih yang disertakan dalam hasil. Contoh ekspresi reguler untuk daftar putih node:
e_json("json_data_filed", ...., include_node=r'key\d+').Jika daftar hitam node ditetapkan, node dalam daftar hitam dikecualikan dari hasil. Contoh ekspresi reguler untuk daftar hitam node:
e_json("json_data_filed", ...., exclude_node=r'key\d+').Untuk perluasan path node, ekspresi reguler
include_pathdanexclude_pathdicocokkan dengan awal path. Path node menggunakan.sebagai delimiter.
Penyaringan JMESPath
Gunakan JMESPath untuk memilih dan menghitung data.
Pilih daftar atribut elemen dari path JSON tertentu:
e_json(..., jmes="cve.vendors[*].product",output="product")Gabungkan atribut elemen dari path JSON tertentu dengan koma (,):
e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors")Hitung nilai atribut maksimum untuk elemen dalam path JSON tertentu:
e_json(..., jmes="max(words[*].score)",output="hot_word")Kembalikan string kosong jika path tertentu tidak ada atau kosong:
e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=False)
parent_list dan parent_rlist
Contoh berikut menunjukkan penggunaannya.
Raw log:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}parent_listmengatur node induk dari kiri ke kanan.e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')Hasil transformasi:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} data-k2#k3:200 data-k2#k5:300parent_rlistmengatur node induk dari kanan ke kiri.e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')Hasil transformasi:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} k2-data#k3:200 k4-k2#k5:300
Tanggapan
Mengembalikan log dengan bidang baru yang ditambahkan.
Contoh
Contoh 1: Memperluas bidang
Raw log
data: {"k1": 100, "k2": 200}Aturan transformasi
e_json("data",depth=1)Hasil transformasi
data: {"k1": 100, "k2": 200} k1: 100 k2: 200
Contoh 2: Menambahkan awalan dan akhiran ke nama bidang
Raw log
data: {"k1": 100, "k2": 200}Aturan transformasi
e_json("data", prefix="data_", suffix="_end")Hasil transformasi
data: {"k1": 100, "k2": 200} data_k1_end: 100 data_k2_end: 200
Contoh 3: Memperluas bidang menggunakan format berbeda
Raw log
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }fmt=full
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: 300fmt=parent
e_json("data", fmt='parent')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 k2.k3: 200 k4.k5: 300fmt=root
e_json("data", fmt='root')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k3: 200 data.k5: 300
Contoh 4: Mengekstrak data JSON dengan delimiter, awalan, dan akhiran tertentu
Raw log
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }Aturan transformasi
e_json("data", fmt='parent', sep="@", prefix="__", suffix="__")Hasil transformasi
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data@__k1__:100 k2@__k3__:200 k4@__k5__:300
Contoh 5: Menggunakan parameter fmt_array untuk mengekstrak data JSON sebagai array
Raw log
people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]Aturan transformasi
e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}")Hasil transformasi
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
Contoh 6: Menggunakan ekspresi JMESPath untuk mengekstrak objek JSON
Raw log
data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}Aturan transformasi
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')Hasil transformasi
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"]
Bacaan lanjutan
Untuk contoh menggabungkan fungsi ini dengan fungsi lain, lihat Complex JSON data transformation.
e_csv, e_psv, dan e_tsv
Fungsi-fungsi ini mengekstrak beberapa bidang dari bidang tertentu menggunakan delimiter kustom dan nama bidang yang telah ditentukan.
e_csv: Delimiter default adalah koma (,).
e_psv: Delimiter default adalah bar vertikal (|).
e_tsv: Delimiter default adalah karakter tab (
\t).
Sintaksis
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")Parameter
Parameter
Type
Required
Description
input field name
Any
Yes
Nama bidang input. Jika bidang yang ditentukan tidak ada, fungsi tidak melakukan apa pun. Untuk informasi tentang cara menentukan nama bidang khusus, lihat Event types.
output field list
Any
Yes
Nama bidang output yang menyimpan nilai yang diurai.
Anda dapat memberikan nama sebagai daftar string, seperti
["error", "message", "result"].Jika nama bidang tidak mengandung koma, Anda juga dapat memberikan string tunggal dengan nama dipisahkan koma, seperti
"error, message, result".Untuk informasi tentang cara menentukan nama bidang khusus, lihat Event types.
sep
String
No
Delimiter. Harus berupa satu karakter.
quote
String
No
Karakter yang digunakan untuk membungkus nilai. Gunakan ini ketika nilai mengandung delimiter.
restrict
Boolean
No
Menentukan apakah akan menggunakan mode terbatas. Nilai default adalah True, yang mengaktifkan mode terbatas. Parameter ini menentukan perilaku ketika jumlah nilai yang diurai tidak sesuai dengan jumlah bidang output:
Dalam mode terbatas (True), fungsi tidak melakukan apa pun.
Dalam mode tidak terbatas (False), fungsi menetapkan nilai ke bidang yang sesuai.
mode
String
No
Mode overwrite bidang. Nilai default adalah fill-auto. Untuk informasi lebih lanjut tentang nilai dan maknanya, lihat Field extraction check and overwrite modes.
Tanggapan
Mengembalikan log dengan bidang baru yang ditambahkan.
Contoh
Contoh berikut menggunakan
e_csv. Fungsie_psvdane_tsvberoperasi serupa.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=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,-Aturan transformasi
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")Hasil
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=how-to-make-noodles&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=how-to-make-noodles&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
Informasi lebih lanjut
Fungsi-fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Parse CSV-formatted logs.
e_kv
Mengekstrak pasangan kunci-nilai dari satu atau beberapa bidang input.
Sintaksis
e_kv(field_or_list, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto")Parameter
Parameter
Type
Required
Description
field_or_list
String or list of strings
Yes
Nama satu atau beberapa bidang input. Untuk informasi tentang cara menentukan nama bidang khusus, lihat Event types.
sep
String
No
Separator kunci-nilai, yang dapat berupa ekspresi reguler. Nilai default adalah
=.CatatanAnda dapat menggunakan grup non-capturing, tetapi tidak boleh menggunakan grup capturing. Untuk informasi lebih lanjut, lihat Grouping.
quote
String
No
Karakter yang digunakan untuk membungkus nilai. Nilai default adalah
".CatatanNilai pasangan kunci-nilai dinamis yang diekstrak biasanya dibungkus tanda kutip, misalnya,
a="abc"danb="xyz". Jika nilai tidak dibungkus tanda kutip, sistem hanya mengekstrak nilai yang terdiri dari karakter berikut:karakter Tionghoa, huruf, angka, dan simbol _-.%~. Misalnya, daria=ab12_-.%~|abc b=123, sistem mengekstraka: ab12_-.%~danb: 123.escape
Boolean
No
Mengontrol apakah akan menginterpretasikan karakter escape dalam nilai. Nilai default adalah
False. Misalnya, dari inputkey="abc\"xyz", secara default, fungsi mengekstrak nilaiabc\untuk bidangkey. Jika Anda mengaturescape=True, nilai yang diekstrak adalahabc"xyz.prefix
String
No
Awalan yang ditambahkan ke nama bidang yang diekstrak.
suffix
String
No
Akhiran yang ditambahkan ke nama bidang yang diekstrak.
mode
String
No
Mode overwrite bidang. Nilai default adalah fill-auto. Untuk informasi lebih lanjut tentang mode yang tersedia, lihat Field extraction check and overwrite modes.
Tanggapan
Menambahkan pasangan kunci-nilai yang diekstrak ke log sebagai bidang baru.
Contoh
Contoh 1: Ekstrak pasangan kunci-nilai menggunakan delimiter default =.
Raw log
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2CatatanJika raw log adalah
request_uri: a1=1&a2=&a3=3dan nilai a2 kosong, fungsi e_kv() tidak dapat mengekstrak a2. Anda dapat menggunakan fungsi e_regex() untuk mengekstraknya, misalnya, e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"},mode="overwrite").Aturan transformasi
e_kv("http_refer")Hasil
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2 q: asd a: 1 b: 2
Contoh 2: Tambahkan awalan dan akhiran ke nama bidang.
Raw log
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2Aturan transformasi
e_kv( "http_refer", sep="=", quote='"', escape=False, prefix="data_", suffix="_end", mode="fill-auto", )Hasil
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
Contoh 3: Ekstrak pasangan kunci-nilai dari bidang
content2dan interpretasikan karakter escape menggunakan parameterescape.Raw log
content2: k1:"v1\"abc", k2:"v2", k3: "v3"Aturan transformasi
e_kv("content2", sep=":", escape=True)Hasil
content2: k1:"v1\"abc", k2:"v2", k3: "v3" k1: v1"abc k2: v2 k3: v3
Bacaan lanjutan
Untuk contoh menggabungkan fungsi ini dengan fungsi lain, lihat Extract dynamic key-value pairs from a string.
e_kv_delimit
Mengekstrak pasangan kunci-nilai dari bidang input menggunakan delimiter.
Sintaksis
e_kv_delimit(field_or_list, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")Parameter
Parameter
Type
Required
Description
field_or_list
string or list of strings
Yes
Nama satu atau beberapa bidang input. Untuk informasi tentang cara menentukan nama bidang khusus, lihat event type.
pair_sep
string
No
Ekspresi reguler yang memisahkan pasangan kunci-nilai. Nilai default adalah
\s. Contoh lain termasuk\s\wdanabc\s.CatatanUntuk menggunakan string literal sebagai separator, kami sarankan terlebih dahulu menggantinya dengan delimiter karakter tunggal menggunakan fungsi str_replace atau regex_replace. Anda kemudian dapat menggunakan fungsi ini untuk mengurai bidang tersebut.
kv_sep
string
No
Ekspresi reguler yang memisahkan kunci dari nilainya. Nilai default adalah
=. Ekspresi ini tidak terbatas pada satu karakter.CatatanAnda dapat menggunakan grup non-capturing, tetapi tidak boleh menggunakan grup capturing. Untuk informasi lebih lanjut, lihat Grouping.
prefix
string
No
Awalan yang ditambahkan ke nama bidang yang diekstrak.
suffix
string
No
Akhiran yang ditambahkan ke nama bidang yang diekstrak.
mode
string
No
Mode overwrite bidang. Nilai default adalah fill-auto. Untuk detail tentang nilai-nilai tersebut, lihat Field extraction check and overwrite modes.
Tanggapan
Mengembalikan log dengan pasangan kunci-nilai yang diekstrak ditambahkan sebagai bidang baru.
Contoh
Contoh 1: Mengekstrak pasangan kunci-nilai menggunakan delimiter default
=.Raw log
data: i=c1 k1=v1 k2=v2 k3=v3CatatanJika raw log adalah
request_uri: a1=1&a2=&a3=3, fungsi e_kv_delimit() tidak dapat mengekstraka2karena nilainya kosong. Untuk mengekstrak pasangan dengan nilai kosong, gunakan fungsi e_regex(). Misalnya: e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"}, mode="overwrite").Aturan transformasi
e_kv_delimit("data")Hasil
data: i=c1 k1=v1 k2=v2 k3=v3 i: c1 k2: v2 k1: v1 k3: v3
Contoh 2: Ekstrak pasangan kunci-nilai menggunakan delimiter
&?.Raw log
data: k1=v1&k2=v2?k3=v3Aturan transformasi
e_kv_delimit("data",pair_sep=r"&?")Hasil
data: k1=v1&k2=v2?k3=v3 k2: v2 k1: v1 k3: v3
Contoh 3: Ekstrak pasangan kunci-nilai menggunakan ekspresi reguler sebagai separator kunci-nilai.
Raw log
data: k1=v1 k2:v2 k3=v3Aturan transformasi
e_kv_delimit("data", kv_sep=r"(?:=|:)")Hasil
data: k1=v1 k2:v2 k3=v3 k2: v2 k1: v1 k3: v3
e_syslogrfc
Menghitung facility dan severity dari nilai priority sesuai protokol syslog dan menambahkan label yang sesuai.
Sintaksis
e_syslogrfc(key, rfc, fields_info=None, mode='overwrite')Parameter
Parameter
Type
Required
Description
key
Any
Yes
Nama bidang yang berisi nilai
priority.rfc
String
Yes
Protokol syslog yang digunakan. Nilai valid: SYSLOGRFC3164 dan SYSLOGRFC5424.
fields_info
Dict
No
Kamus yang memetakan nama bidang output default (kunci) ke nama kustom (nilai). Bidang berikut dapat diganti namanya:
{"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}mode
String
No
Mode overwrite untuk bidang output. Nilai default adalah overwrite. Untuk informasi lebih lanjut, lihat Field extraction check and overwrite modes.
Tanggapan
Mengembalikan log dengan bidang facility, severity, dan label baru.
Contoh
Contoh 1: Ekstrak informasi facility, severity, dan label menggunakan protokol SYSLOGRFC5424
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_: twishaturan transformasi
e_syslogrfc("_priority_","SYSLOGRFC5424")Hasil
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
Contoh 2: Ekstrak informasi facility, severity, dan label menggunakan protokol SYSLOGRFC5424 dan ganti nama bidang output
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_: twishaturan transformasi
e_syslogrfc( "_priority_", "SYSLOGRFC5424", { "_facility_": "fac", "_severity_": "sev", "_facilitylabel_": "_facility_label_", "_severitylabel_": "_severity_label_", }, )Hasil
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 fac: 1 sev: 5 _severity_label_: Notice: normal but significant condition _facility_label_: user-level messages
Referensi
Fungsi ini dapat dikombinasikan dengan fungsi lain. Untuk contoh terkait, lihat Parse standard Syslog format data.
e_anchor
Mengekstrak string dari bidang input menggunakan aturan yang Anda definisikan dalam parameter anchor_rules.
Sintaksis
e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite")Parameter
Parameter
Type
Required
Description
key
Any
Yes
Nama bidang input.
anchor_rules
String
Yes
Menentukan pola untuk mengekstrak string, di mana tanda bintang (*) mewakili konten yang akan diekstrak. Contohnya:
User = *; Severity = *;.Log yang ditampilkan di konsol berformat Key : Value dengan spasi default antara titik dua dan nilai. Saat menentukan anchor_rules, jangan sertakan spasi ini. Dalam entri log contoh, bidang
contentadalah bidang target yang akan diekstrak._source_: bin-hangzhou-oss _tag_:_object_: test001/test001-or20190906155735.perf _tag_:_receive_time_: 1582768681 _topic_: content: "Download": 4001792CatatanTanda bintang (*) tidak dapat digunakan sebagai awalan atau akhiran dalam nilai bidang input.
fields
Any
Yes
Nama bidang output untuk nilai yang diekstrak. Anda dapat menentukan nama sebagai daftar string, seperti
["user", "job", "result"]. Jika nama bidang tidak mengandung koma (,), Anda juga dapat menentukannya sebagai string tunggal dengan nama dipisahkan koma, seperti"user, job, result". Untuk detail tentang penentuan nama bidang khusus, yang dapat mengandung karakter khusus tetapi tidak tanda bintang (*), lihat event type.Anda dapat melewati nama bidang dengan menggunakan tanda bintang (*). Misalnya, jika Anda menentukan
"user,*,result", hanya bidanguserdanresultyang dibuat. Untuk informasi lebih lanjut, lihat Contoh 10.restrict
Boolean
No
Menentukan apakah akan menggunakan mode terbatas. Default adalah
False(mode tidak terbatas). Parameter ini menentukan perilaku ketika jumlah nilai yang diekstrak tidak sesuai dengan jumlah bidang output:Dalam mode terbatas (
True), fungsi tidak melakukan apa pun.Dalam mode tidak terbatas (
False), fungsi menetapkan nilai ke bidang yang sesuai secara berurutan.
mode
String
No
Nilai default adalah
overwrite. Lihat field extraction check and overwrite mode untuk informasi lebih lanjut.Tanggapan
Mengembalikan log asli dengan bidang yang diekstrak beserta nilainya ditambahkan.
Contoh
Contoh 1: Ekstrak beberapa nilai
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."Aturan transformasi
e_anchor("content","User=*: severity=*:",["user_field","severity_field"])Hasil
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
Contoh 2: Ekstrak beberapa nilai array JSON
Raw log
content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'Aturan transformasi
e_anchor("content",'name_list":*,"university":*},', ["name_list","universities"])Hasil
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"]
Contoh 3: Ekstrak dari log yang mengandung karakter khusus
Raw log
content : (+2019) June 24 "I am iron man"Aturan transformasi
e_anchor("content", "(+*) * \"*\"",["Year","Date","Msg"])Hasil
content : (+2019) June 24 "I am iron man" Year : 2019 Date : June 24 Msg : I am iron man
Contoh 4: Ekstrak dari log yang mengandung karakter kontrol tak terlihat (
\x09)Raw log
content : \x09\x09\x09Chrome/55.0 Safari/537.36Aturan transformasi
e_anchor("content", "\x09\x09\x09*/55.0 */537.36",["Google", "Apple"])Hasil
content : \x09\x09\x09Chrome/55.0 Safari/537.36 Google : Chrome Apple : Safari
Contoh 5: Ekstrak bidang content yang berisi nilai dengan karakter khusus. Nilai bidang tersebut adalah
To...Subject, yang mengikutiMESSAGE:.Raw log
content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: To: example@aliyun.com Subject: New line Breaks in MessageAturan transformasi
e_anchor("content","* INFO *: \n To: *\n Subject: *",["time","message","email","subject"])Hasil
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
Contoh 6: Ekstrak bidang content yang berisi nilai dengan karakter khusus tak terlihat
\t.Raw log
content : I'm tabbed inAturan transformasi
e_anchor("content","\tI'm * in","word") # Anda juga dapat menyalin nilai persis dari bidang content untuk membuat pola. # Jangan salin spasi default setelah titik dua dalam nama bidang. e_anchor("content"," I'm * in","word")Hasil
content : I'm tabbed in word : tabbed
Contoh 7: Ekstrak bidang content yang berisi nilai karakter khusus, yang ditampilkan sebagai
\t.Raw log
content : \tI'm tabbed inAturan transformasi
e_anchor("content","\tI'm * in","word") # Anda juga dapat menggunakan aturan berikut: e_anchor("content"," I'm * in","word")Hasil
content : \tI'm tabbed in word : tabbed
Contoh 8: Ekstrak log dalam mode terbatas
Raw log
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhoodAturan transformasi
e_anchor("content","I * to * having",["v_word", "n_word","asd"],restrict=True)Hasil
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
Contoh 9: Ekstrak log dalam mode tidak terbatas
Raw log
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhoodAturan transformasi
e_anchor("content","love * fight with my * and",["test1","test2","test13"],restrict=False)Hasil
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
Contoh 10: Ekstrak satu nilai dan lewati yang lain
Raw log
content: Could you compare the severity of natural disasters to man-made disastersAturan transformasi
e_anchor('content', 'compare the * of natural disasters to man-made *', 'n-word,*')Hasil
content : Could you compare the severity of natural disasters to man-made disasters n-word : severity