Topik ini menjelaskan sintaksis dan parameter fungsi ekstraksi nilai serta memberikan contoh penggunaannya.
Fungsi
Kategori | Fungsi | Deskripsi |
Ekstraksi berdasarkan ekspresi reguler | Mengekstrak nilai suatu bidang berdasarkan ekspresi reguler dan menetapkan nilai tersebut ke bidang lain. Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Parsing log kesalahan Java. | |
Ekstraksi berdasarkan objek JSON | Menjalankan operasi pada objek JSON dalam bidang tertentu. Anda dapat mengonfigurasi parameter untuk memperluas data JSON, mengekstrak data JSON menggunakan ekspresi JMESPath, atau memperluas data JSON yang diekstrak. Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Transformasi data JSON kompleks. | |
Ekstraksi menggunakan pemisah | Mengekstrak beberapa bidang dari bidang tertentu menggunakan pemisah tertentu dan nama bidang yang telah ditentukan.
Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Parsing log dalam format file CSV. | |
Ekstraksi pasangan kunci-nilai | Mengekstrak pasangan kunci-nilai dari beberapa bidang input menggunakan tanda kutip tertentu. Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Ekstraksi pasangan kunci-nilai dinamis dari string. | |
Mengekstrak pasangan kunci-nilai dari bidang input menggunakan pemisah tertentu. | ||
Ekstraksi berdasarkan protokol syslog | Menghitung nilai bidang facility dan severity serta mengembalikan nilai bidang facilitylabel yang menunjukkan informasi level. Fungsi ini menghitung nilai berdasarkan nilai bidang priority dan protokol syslog yang ditentukan. Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Parsing pesan Syslog dalam format standar. | |
Ekstraksi berdasarkan aturan tertentu | Mengekstrak string menggunakan aturan yang ditentukan oleh anchor_rules. |
e_regex
Fungsi e_regex mengekstrak nilai dari suatu bidang berdasarkan ekspresi reguler dan menetapkannya ke bidang lain.
e_regex(key,Regular expression,fields_info,mode="fill-auto",pack_json=None)Parameter
Tipe
Diperlukan
Deskripsi
key
Sembarang
Ya
Nama bidang input. Jika bidang yang Anda tentukan tidak ada, tidak ada operasi yang dilakukan. Untuk informasi lebih lanjut tentang cara menentukan nama bidang khusus, lihat Jenis-jenis acara.
Ekspresi reguler
String
Ya
Ekspresi reguler yang digunakan untuk mengekstrak nilai bidang. Ekspresi reguler yang berisi grup penangkap dan grup non-penangkap didukung.
CatatanEkspresi reguler yang berisi grup non-penangkap digunakan dalam beberapa skenario. Grup non-penangkap menggunakan awalan yang terdiri dari tanda tanya dan titik dua (
?:). Contoh:\w+@\w+\.\w(?:\.\cn)?. Untuk informasi lebih lanjut tentang grup non-penangkap, lihat Grup non-penangkap.fields_info
String/ Daftar/ Dict
Tidak
Nama bidang tempat nilai yang diekstrak akan ditetapkan. Jika Anda tidak menentukan grup penangkap bernama dalam ekspresi reguler, Anda harus mengonfigurasi parameter ini.
mode
String
Tidak
Mode penimpaan bidang. Nilai default: fill-auto. Untuk informasi lebih lanjut tentang nilai lain dari parameter ini, lihat Mode pemeriksaan dan penimpaan ekstraksi bidang.
pack_json
String
Tidak
Bidang tempat bidang yang ditentukan oleh fields_info dikemas. Nilai default: None, yang menunjukkan bahwa tidak ada bidang yang dikemas.
Log yang berisi nilai bidang baru dikembalikan.
Contoh 1: Mengekstrak nilai yang cocok dengan ekspresi reguler tertentu dari bidang.
Log mentah:
msg: 192.168.0.1 http://... 127.0.0.0Aturan transformasi:
# Mengekstrak alamat IP pertama dari bidang msg. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")Hasil:
msg: 192.168.0.1 http://... 127.0.0.0 ip: 192.168.0.1
Contoh 2: Mengekstrak beberapa nilai yang cocok dengan ekspresi reguler tertentu dari bidang.
Log mentah:
msg: 192.168.0.1 http://... 127.0.0.0Aturan transformasi:
# Mengekstrak dua alamat IP dari bidang msg dan menetapkan satu alamat IP ke server_ip dan alamat IP lainnya ke client_ip. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"])Hasil:
msg: 192.168.0.1 http://... 127.0.0.0 server_ip: 192.168.0.1 client_ip: 127.0.0.0
Contoh 3: Gunakan grup penangkap untuk mengekstrak beberapa nilai yang cocok dengan ekspresi reguler tertentu dari bidang.
Log mentah:
content: start sys version: deficience, err: 2Aturan transformasi:
# Mengekstrak nilai untuk versi dan error dari bidang content dengan menyertakan grup penangkap dalam ekspresi reguler. e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"])Hasil:
content: start sys version: deficience, err: 2 error: 2 version: deficience
Contoh 4: Gunakan grup penangkap bernama untuk mengekstrak beberapa nilai dari bidang.
Log mentah:
content: start sys version: deficience, err: 2Aturan transformasi:
e_regex("content",r"start sys version: (?P<version>\w+),\s*err: (?P<error>\d+)")Hasil:
content: start sys version: deficience, err: 2 error: 2 version: deficience
Contoh 5: Gunakan grup penangkap dalam ekspresi reguler yang ditentukan untuk mengekstrak nilai bidang dict, secara dinamis menghasilkan nama bidang untuk nilai tersebut, dan memformat ulang nilai tersebut.
Log mentah:
dict: verify:123Aturan transformasi:
e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"})Hasil:
dict: verify:123 k_verify: v_123
Contoh 6: Mengekstrak nilai yang cocok dengan ekspresi reguler tertentu dari bidang dan mengemas hasilnya ke dalam bidang name.
Log mentah:
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:
msg:192.168.0.1 http://... 127.0.0.0 name:{"ip": "192.168.0.1"}
Contoh 7: Gunakan ekspresi reguler yang ditentukan untuk mengekstrak nilai bidang dict, secara dinamis menghasilkan nama bidang untuk nilai tersebut, memformat ulang nilai tersebut, lalu mengemas hasilnya ke dalam bidang name.
Log mentah:
dict: x:123, y:456, z:789Aturan transformasi:
e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name")Hasil:
dict:x:123, y:456, z:789 name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
Contoh 8: Gunakan grup penangkap untuk mengekstrak beberapa nilai yang cocok dengan ekspresi reguler tertentu dan mengemas hasilnya ke dalam bidang name.
Log mentah:
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:
content:start sys version: deficience, err: 2 name:{"version": "deficience", "error": "2"}
Referensi
Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Parsing log kesalahan Java.
e_json
Fungsi e_json melakukan operasi pada objek JSON dalam bidang tertentu. Anda dapat mengonfigurasi parameter untuk memperluas data JSON, mengekstrak data JSON menggunakan ekspresi JMESPath, atau memperluas data JSON yang diekstrak.
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 Anda menggunakan fungsi e_json untuk mengurai string yang tidak sesuai dengan sintaksis JSON, fungsi tersebut tidak akan memproses string dan akan mengembalikan string aslinya.
Parameter
Tipe
Diperlukan
Deskripsi
key
String
Ya
Nama bidang input. Jika bidang yang Anda tentukan tidak ada, tidak ada operasi yang dilakukan. Untuk informasi lebih lanjut tentang cara menentukan nama bidang khusus, lihat Jenis-jenis acara.
expand
Boolean
Tidak
Menentukan apakah akan memperluas bidang input.
Jika Anda tidak mengonfigurasi parameter jmes, nilai True digunakan secara default untuk parameter expand. Nilai True menunjukkan bahwa bidang input diperluas.
Jika Anda mengonfigurasi parameter jmes, nilai False digunakan secara default untuk parameter expand. Nilai False menunjukkan bahwa bidang input tidak diperluas.
depth
Nomor
Tidak
Kedalaman hingga mana fungsi memperluas bidang input. Nilai valid: 1 hingga 2000. Nilai default: 100. Nilai 1 menunjukkan bahwa hanya tingkat pertama dari bidang yang diperluas.
prefix
String
Tidak
Awalan yang ingin Anda tambahkan ke bidang yang diperluas.
suffix
String
Tidak
Akhiran yang ingin Anda tambahkan ke bidang yang diperluas.
fmt
String
Tidak
Metode pemformatan bidang yang diperluas. Nilai valid:
simple: Nama node saat ini digunakan sebagai nama bidang. Ini adalah nilai default. Formatnya adalah
{prefix}{current}{suffix}.full: Nama node saat ini dan semua nama node induk digabungkan dan digunakan sebagai nama bidang. Formatnya adalah
{parent_list_str}{sep}{prefix}{current}{suffix}. Pemisah ditentukan oleh parametersep. Pemisah default adalah titik (.).parent: Nama node saat ini dan nama node induk terdekat digabungkan dan digunakan sebagai nama bidang. Formatnya adalah
{parent}{sep}{prefix}{current}{suffix}. Pemisah ditentukan oleh parametersep. Pemisah default adalah titik (.).root: Nama node saat ini dan nama node root digabungkan dan digunakan sebagai nama bidang. Formatnya adalah
{parent_list[0]}{sep}{prefix}{current}{suffix}. Pemisah ditentukan oleh parametersep. Pemisah default adalah titik (.).
sep
String
Tidak
Pemisah yang digunakan untuk memisahkan node induk dan anak saat fungsi memformat data. Jika Anda mengatur parameter
fmtke full, parent, atau root, Anda harus mengonfigurasi parameter ini. Nilai default:..expand_array
Boolean
Tidak
Menentukan apakah akan memperluas bidang input menjadi array. Nilai default:
True, yang menunjukkan bahwa bidang input diperluas menjadi array.fmt_array
String
Tidak
Metode pemformatan yang digunakan untuk memperluas bidang input menjadi array. Formatnya adalah
{parent_rlist[0]}_{index}. Anda juga dapat menggunakan hingga lima placeholder berikut untuk memperluas bidang input:parent_list,current,sep,prefix, dansuffix.include_node
String/ Nomor
Tidak
Daftar putih nama node berdasarkan mana penyaringan dilakukan. Secara default, nama node yang berisi angka, huruf,
garis bawah (_), titik (.), dan tanda hubung (-)secara otomatis diperluas.exclude_node
String
Tidak
Daftar hitam nama node berdasarkan mana penyaringan dilakukan.
include_path
String
Tidak
Daftar putih jalur node berdasarkan mana penyaringan dilakukan.
exclude_path
String
Tidak
Daftar hitam jalur node berdasarkan mana penyaringan dilakukan.
jmes
String
Tidak
Ekspresi JMESPath yang digunakan untuk mengonversi nilai bidang menjadi objek JSON dan mengekstrak nilai tertentu.
output
String
Tidak
Nama bidang yang dikembalikan untuk nilai yang diekstrak menggunakan ekspresi JMESPath.
jmes_ignore_none
Boolean
Tidak
Menentukan apakah akan melewati bidang jika nilai bidang tidak dapat diekstrak menggunakan ekspresi JMESPath. Nilai default: True, yang menunjukkan bahwa bidang dilewati jika nilai bidang tidak dapat diekstrak menggunakan ekspresi JMESPath. Jika Anda menentukan False untuk parameter jmes_ignore_none, string kosong dikembalikan dalam situasi yang sama.
mode
String
Tidak
Mode penimpaan bidang. Nilai default: fill-auto. Untuk informasi lebih lanjut tentang nilai lain dari parameter ini, lihat Mode pemeriksaan dan penimpaan ekstraksi bidang.
Pengembangan dan Penyaringan Bidang JSON
Jika daftar putih nama node ditentukan, hanya nama node dalam daftar putih yang akan dikembalikan. Contoh:
e_json("json_data_filed", ...., include_node=r'key\d+')menentukan daftar putih nama node menggunakan ekspresi reguler.Jika daftar hitam nama node ditentukan, nama node dalam daftar hitam tidak akan dikembalikan. Contoh:
e_json("json_data_filed", ...., exclude_node=r'key\d+')menentukan daftar hitam nama node menggunakan ekspresi reguler.Ekspresi reguler
include_pathdanexclue_pathdigunakan untuk mencocokkan jalur node dari awal. Titik (.) digunakan sebagai pemisah jalur yang sesuai dengan ekspresi reguler.
Penyaringan Berbasis JMESPath
Ekspresi JMESPath digunakan untuk memilih dan menghitung data.
Pilih daftar atribut elemen dari jalur JSON tertentu:
e_json(..., jmes="cve.vendors[*].product",output="product").Gabungkan atribut elemen dari jalur JSON tertentu menggunakan koma (,):
e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors").Hitung nilai maksimum setiap atribut untuk setiap elemen dalam jalur JSON tertentu:
e_json(..., jmes="max(words[*].score)",output="hot_word").Kembalikan string kosong jika jalur JSON 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 cara menggunakan parent_list dan parent_rlist:
Log mentah:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}parent_list mengurutkan node induk dari kiri ke kanan.
e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')Hasil:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} data-k2#k3:200 data-k2#k5:300parent_rlist mengurutkan node induk dari kanan ke kiri.
e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')Hasil:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} k2-data#k3:200 k4-k2#k5:300
Log yang berisi nilai bidang baru dikembalikan.
Contoh 1: Perluas bidang.
Log mentah:
data: {"k1": 100, "k2": 200}Aturan transformasi:
e_json("data",depth=1)Hasil:
data: {"k1": 100, "k2": 200} k1: 100 k2: 200
Contoh 2: Tambahkan awalan dan akhiran ke bidang yang diperluas.
Log mentah:
data: {"k1": 100, "k2": 200}Aturan transformasi:
e_json("data", prefix="data_", suffix="_end")Hasil:
data: {"k1": 100, "k2": 200} data_k1_end: 100 data_k2_end: 200
Contoh 3: Perluas bidang dalam format yang berbeda.
Log mentah:
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }Perluas bidang dalam format lengkap.
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: 300Perluas bidang dalam format induk.
e_json("data", fmt='parent')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 k2.k3: 200 k4.k5: 3000Perluas bidang dalam format 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: Konfigurasikan parameter sep, prefix, dan suffix untuk mengekstrak data JSON.
Log mentah:
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }Aturan transformasi:
e_json("data", fmt='parent', sep="@", prefix="__", suffix="__")Hasil:
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data@__k1__: 100 k2@__k3__: 200 k4@__k5__: 300
Contoh 5: Konfigurasikan parameter fmt_array untuk mengekstrak data JSON sebagai array.
Log mentah:
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:
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: Ekstrak objek JSON menggunakan ekspresi JMESPath.
Log mentah:
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:
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"]
Referensi
Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Transformasi data JSON kompleks.
e_csv, e_psv, dan e_tsv
Fungsi e_csv, e_psv, dan e_tsv mengekstrak beberapa bidang dari bidang input tertentu menggunakan pemisah tertentu dan nama bidang yang telah ditentukan.
e_csv: menggunakan koma (,) sebagai pemisah default.
e_psv: menggunakan garis vertikal (|) sebagai pemisah default.
e_tsv: menggunakan tab (
\t) sebagai pemisah default.
e_csv(Nama bidang input, Daftar bidang output, sep=",", quote='"', restrict=True, mode="fill-auto") e_psv(Nama bidang input, Daftar bidang output, sep="|", quote='"', restrict=True, mode="fill-auto") e_tsv(Nama bidang input, Daftar bidang output, sep="\t", quote='"', restrict=True, mode="fill-auto")Parameter
Tipe
Diperlukan
Deskripsi
Nama bidang input
Sembarang
Ya
Nama bidang input. Jika bidang yang Anda tentukan tidak ada, tidak ada operasi yang dilakukan. Untuk informasi lebih lanjut tentang cara menentukan nama bidang khusus, lihat Jenis-jenis acara.
Daftar bidang output
Sembarang
Ya
Nama bidang yang dikembalikan setelah nilai bidang input dipisahkan menggunakan pemisah yang ditentukan.
Nama bidang dapat berupa daftar string. Contoh:
["error", "message", "result"].Jika nama bidang tidak mengandung koma (,), Anda dapat menggunakan koma (,) sebagai pemisah untuk memisahkan string. Contoh:
"error, message, result".Untuk informasi lebih lanjut tentang cara menentukan nama bidang khusus, lihat Jenis-jenis acara.
sep
String
Tidak
Pemisah yang digunakan untuk memisahkan nilai bidang input. Anda harus menentukan satu karakter sebagai pemisah.
quote
String
Tidak
Tanda kutip yang digunakan untuk mengapit nilai. Jika nilai mengandung pemisah, Anda harus mengonfigurasi parameter ini.
restrict
Boolean
Tidak
Menentukan apakah akan mengaktifkan mode terbatas. Nilai default: False, yang menunjukkan bahwa mode terbatas dinonaktifkan. Jika jumlah nilai yang dipisahkan dengan pemisah dalam nilai bidang input berbeda dari jumlah nama bidang output, operasi yang dilakukan oleh fungsi bervariasi berdasarkan mode.
Jika mode terbatas diaktifkan, fungsi tidak melakukan operasi.
Jika mode terbatas dinonaktifkan, fungsi mencocokkan bidang yang ditentukan dengan nilai dan menetapkan nilai tertentu ke bidang tersebut.
mode
String
Tidak
Mode penimpaan bidang. Nilai default: fill-auto. Untuk informasi lebih lanjut tentang nilai lain dari parameter ini, lihat Mode pemeriksaan dan penimpaan ekstraksi bidang.
Log yang berisi nilai bidang baru dikembalikan.
Dalam contoh ini, fungsi
e_csvdigunakan. Fungsie_psvdane_tsvbekerja dengan cara yang serupa dengan fungsi e_csv.Log mentah:
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,-,-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=%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,-,- 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
Referensi
Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Parse logs in a CSV-format log file.
e_kv
Fungsi e_kv mengekstrak pasangan kunci-nilai dari beberapa bidang input dengan menggunakan tanda kutip tertentu.
e_kv(Nama bidang input atau daftar bidang input, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto")Parameter
Tipe
Diperlukan
Deskripsi
Nama bidang input atau daftar bidang input
String atau daftar string
Ya
Nama bidang input atau nama beberapa bidang input. Untuk informasi lebih lanjut tentang cara menentukan nama bidang khusus, lihat Tipe Event.
sep
String
Tidak
Pemisah yang digunakan untuk memisahkan kunci dan nilai kunci dalam ekspresi reguler. Nilai default:
=. Anda dapat menentukan satu atau lebih karakter sebagai pemisah.CatatanAnda dapat menggunakan grup non-penangkap dalam ekspresi reguler, tetapi Anda tidak dapat menggunakan grup penangkap dalam ekspresi reguler. Untuk informasi lebih lanjut tentang pengelompokan, lihat Grup.
quote
String
Tidak
Kutipan yang digunakan untuk mengapit nilai. Nilai default:
".CatatanKami merekomendasikan Anda mengonfigurasi parameter kutipan untuk mengapit nilai yang diekstraksi dari pasangan kunci-nilai dinamis. Contoh:
a="abc"danb="xyz". Jika Anda tidak mengonfigurasi parameter kutipan, nilai yang diekstraksi hanya dapat berisi karakter berikut:huruf, angka, garis bawah (_), tanda hubung (-), titik (.), tanda persen (%), dan tilde (~). Sebagai contoh, Anda dapat mengekstraka: ab12_-.%~danb: 123daria=ab12_-.%~|abc b=123.escape
Boolean
Tidak
Menentukan apakah akan mengekstrak karakter escape di nilai bidang input. Nilai default:
False, yang menunjukkan bahwa karakter escape di nilai bidang input tidak diekstraksi. Sebagai contoh, nilaiabc\dari bidangkeydiekstraksi dari ekspresikey="abc\"xyz"secara default. Jika parameterescapedisetel ke True, nilai yang diekstraksi adalahabc"xyz.prefix
String
Tidak
Awalan yang ditambahkan ke bidang yang diekstraksi.
suffix
String
Tidak
Akhiran yang ditambahkan ke bidang yang diekstraksi.
mode
String
Tidak
Mode penimpaan bidang. Nilai default: fill-auto. Untuk informasi lebih lanjut tentang nilai lain dari parameter ini, lihat Pemeriksaan ekstraksi bidang dan mode penimpaan.
Log yang berisi nilai-nilai bidang baru dikembalikan.
Contoh 1: Ekstrak pasangan kunci-nilai menggunakan pemisah default =.
Log mentah:
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2CatatanJika log mentah adalah
request_uri: a1=1&a2=&a3=3dan nilai a2 kosong, fungsi e_kv() tidak dapat mengekstrak nilai a2. Anda dapat menggunakan fungsi e_regex() untuk mengekstrak nilai a2. Contoh: 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 bidang yang diekstraksi.
Log mentah:
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 content2 dan ekstrak karakter escape menggunakan parameter escape.
Log mentah:
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
Referensi
Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Ekstrak pasangan kunci-nilai dinamis dari string.
e_kv_delimit
Fungsi e_kv_delimit mengekstrak pasangan kunci-nilai dari bidang input dengan menggunakan pemisah yang ditentukan.
e_kv_delimit(Nama bidang input atau daftar bidang input, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")Parameter
Tipe
Diperlukan
Deskripsi
Nama bidang input atau daftar bidang input
String atau daftar string
Ya
Nama bidang input atau nama beberapa bidang input. Untuk informasi lebih lanjut tentang cara menentukan nama bidang khusus, lihat Tipe Event.
pair_sep
String
Tidak
Ekspresi reguler yang digunakan untuk memisahkan pasangan kunci-nilai. Nilai default:
\s. Anda juga dapat menentukan\s\watauabc\s.CatatanJika Anda ingin menggunakan string untuk memisahkan pasangan kunci-nilai, kami sarankan Anda menggunakan str_replace atau regex_replace untuk mengonversi string menjadi karakter. Kemudian, Anda dapat menggunakan fungsi e_kv_delimit dengan menentukan karakter sebagai nilai parameter pair_sep untuk memisahkan pasangan kunci-nilai.
kv_sep
String
Tidak
Ekspresi reguler yang digunakan untuk memisahkan pasangan kunci-nilai. Nilai default:
=. Ekspresi reguler dapat berisi satu atau lebih karakter.CatatanAnda dapat menggunakan grup non-penangkap dalam ekspresi reguler, tetapi Anda tidak dapat menggunakan grup penangkap dalam ekspresi reguler. Untuk informasi lebih lanjut tentang pengelompokan, lihat Grup.
prefix
String
Tidak
Awalan yang ditambahkan ke bidang yang diekstraksi.
suffix
String
Tidak
Akhiran yang ditambahkan ke bidang yang diekstraksi.
mode
String
Tidak
Mode penimpaan bidang. Nilai default: fill-auto. Untuk informasi lebih lanjut tentang nilai lain dari parameter ini, lihat Mode pemeriksaan dan penimpaan ekstraksi bidang.
Log yang berisi nilai bidang baru dikembalikan.
Contoh 1: Ekstrak pasangan kunci-nilai menggunakan pemisah default
=.Log mentah:
data: i=c1 k1=v1 k2=v2 k3=v3CatatanJika log mentah adalah
request_uri: a1=1&a2=&a3=3dan nilai a2 kosong, fungsi e_kv_delimit() tidak dapat mengekstrak nilai a2. Anda dapat menggunakan fungsi e_regex() untuk mengekstrak nilai a2. Contoh: 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 pemisah
&?.Log mentah:
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.
Log mentah:
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
Fungsi e_syslogrfc menghitung nilai dari bidang facility dan severity serta mengembalikan nilai dari bidang facilitylabel yang menunjukkan informasi tingkat. Fungsi ini menghitung nilai berdasarkan nilai dari bidang priority dan protokol syslog yang ditentukan.
e_syslogrfc(key, rfc, fields_info=None, mode='overwrite')Parameter
Tipe
Diperlukan
Deskripsi
key
Sembarang
Ya
Nama dari bidang input. Anda harus memasukkan bidang yang menunjukkan
priority.rfc
String
Ya
Protokol syslog yang digunakan. Protokol syslog didefinisikan dalam RFC. Nilai valid: SYSLOGRFC3164 dan SYSLOGRFC5424.
fields_info
Dict
Tidak
key menunjukkan nama dari bidang input, dan value menunjukkan nama dari bidang baru. Bidang berikut dapat diubah namanya. Nama baru dapat dimodifikasi.
{"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}mode
String
Tidak
Mode penimpaan bidang. Nilai default: overwrite. Untuk informasi lebih lanjut tentang nilai lain dari parameter ini, lihat Pengecekan ekstraksi bidang dan mode penimpaan.
Log yang berisi bidang dan nilai baru dikembalikan.
Contoh 1: Ekstrak nilai dari bidang facility dan severity dan kembalikan informasi tingkat berdasarkan protokol syslog yang didefinisikan dalam RFC 5424.
Log mentah:
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_: twantAturan 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_: twant _facility_: 1 _severity_: 5 _severitylabel_: Pemberitahuan: kondisi normal tetapi signifikan _facilitylabel_: pesan tingkat pengguna
Contoh 2: Ekstrak nilai dari bidang facility dan severity dan kembalikan informasi tingkat berdasarkan protokol syslog yang didefinisikan dalam RFC 5424. Kemudian, ubah nama bidang dengan mengonfigurasi parameter fields_info.
Log mentah:
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_: twantAturan 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_: twant _facility_: 1 _severity_: 5 _severity_label_: Pemberitahuan: kondisi normal tetapi signifikan _facility_label_: pesan tingkat pengguna
Referensi
Fungsi ini dapat digunakan bersama dengan fungsi lainnya. Untuk informasi lebih lanjut, lihat Mengurai pesan Syslog dalam format standar.
e_anchor
Fungsi e_anchor mengekstrak string dengan menggunakan aturan yang ditentukan oleh anchor_rules.
e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite")Parameter
Tipe
Diperlukan
Deskripsi
key
Arbitrary
Ya
Nama dari field.
anchor_rules
String
Ya
Aturan yang digunakan untuk mengekstrak string. Contoh:
User = *; Severity = *;,. Tanda bintang (*) menunjukkan konten yang ingin Anda ekstrak.Secara default, spasi ditentukan sebelum Value dalam log yang ditampilkan dalam format Key : Value di konsol Log Service. Saat mengonfigurasi parameter anchor_rules, hapus spasi default tersebut.
CatatanSaat menentukan field input, Anda tidak dapat menggunakan tanda bintang (*) sebagai awalan atau akhiran.
fields
Arbitrary
Ya
Nama dari field output yang nilainya diekstraksi dari nilai field input. Nama field dapat berupa daftar string. Contoh:
["user", "job", "result"]. Jika nama field tidak mengandung koma (,), Anda dapat menggunakan koma (,) untuk memisahkan string. Contoh:"user, job, result". Untuk informasi lebih lanjut tentang cara menentukan nama field khusus, lihat Tipe Event. Nama field khusus dapat mengandung karakter khusus kecuali tanda bintang (*).Anda dapat menggunakan tanda bintang (*) untuk melewati sebuah field. Sebagai contoh, hanya user dan result yang diekstraksi dari
"user,*,result". Untuk informasi lebih lanjut, lihat Contoh 10.restrict
Boolean
Tidak
Menentukan apakah akan mengaktifkan mode terbatas. Nilai default: False, yang menunjukkan bahwa mode terbatas dinonaktifkan. Jika jumlah nilai yang diekstraksi dari nilai field input berbeda dari jumlah nama field output, operasi yang dilakukan oleh fungsi bervariasi berdasarkan mode.
Jika mode terbatas diaktifkan, fungsi tidak melakukan operasi.
Jika mode terbatas dinonaktifkan, fungsi mencocokkan field yang ditentukan dengan nilai-nilai dan memberikan nilai tertentu kepada field-field tersebut.
mode
String
Tidak
Nilai default: overwrite. Untuk informasi lebih lanjut, lihat Mode pengecekan dan penimpaan ekstraksi field.
Data yang diekstraksi dikembalikan.
Contoh 1: Ekstrak nilai untuk field yang ditentukan dari sebuah log.
Log mentah:
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 dalam format array JSON.
Log mentah:
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 log yang mengandung karakter khusus.
Log mentah:
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 log yang mengandung karakter kontrol
\x09.Log mentah:
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 field content yang mengandung karakter khusus.
To...Subjectyang datang setelahMESSAGE:adalah konten sebenarnya dari field content.Log mentah:
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 field content yang mengandung karakter khusus dan kembalikan nilai yang tidak menampilkan karakter kontrol
\t.Log mentah:
content : I'm tabbed inAturan transformasi:
e_anchor("content","\tI'm * in","word") # Anda juga dapat menggunakan aturan transformasi berikut untuk menyalin nilai dari field content. Hapus spasi default dari nilai. e_anchor("content"," I'm * in","word")Hasil:
content : I'm tabbed in word : tabbed
Contoh 7: Ekstrak field content yang mengandung karakter khusus dan kembalikan nilai yang menampilkan karakter kontrol
\t.Log mentah:
content : \tI'm tabbed inAturan transformasi:
e_anchor("content","\tI'm * in","word") # Anda juga dapat menggunakan aturan transformasi berikut: e_anchor("content"," I'm * in","word")Hasil:
content : \tI'm tabbed in word : tabbed
Contoh 8: Ekstrak log dalam mode terbatas.
Log mentah:
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 non-terbatas.
Log mentah:
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 nilai dari sebuah field dan tetapkan nilai yang diekstraksi ke field lain.
Log mentah:
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