Topik ini menjelaskan cara menggunakan instruksi transformasi data (versi baru) dan memberikan contoh.
pack-fields
Instruksi ini mengemas beberapa bidang menjadi bidang baru sebagai string JSON yang diserialisasi. Ini berguna untuk skenario yang memerlukan transmisi terstruktur, seperti membangun badan permintaan API.
Secara default, bidang yang bukan bertipe Varchar tidak diproses. Ini mencakup bidang
__time__dan__time_ns_part__.Secara default, data sumber tidak dipertahankan.
Sintaksis
| pack-fields -keep -ltrim -include=<include> -exclude=<exclude> as <output>Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
output | String | Ya | Nama bidang keluaran setelah pengemasan. Nilai bidang dalam format JSON. |
include | RegExp | Tidak | Konfigurasi daftar putih. Bidang yang cocok dengan ekspresi reguler akan dikemas. Nilai default adalah ".*", yang cocok dengan semua bidang. Untuk informasi lebih lanjut, lihat Ekspresi reguler. |
exclude | RegExp | Tidak | Konfigurasi blacklist, yang memiliki prioritas lebih tinggi daripada whitelist. Bidang yang cocok dengan ekspresi reguler tidak dikemas. Nilai defaultnya kosong, yang berarti tidak ada pencocokan yang dilakukan. Untuk informasi lebih lanjut, lihat Ekspresi reguler. |
ltrim | String | Tidak | Menghapus awalan dari nama bidang keluaran. |
keep | Bool | Tidak | Menentukan apakah akan mempertahankan data sumber setelah pengemasan. True: Mempertahankan data sumber yang dikemas di dalam keluaran. False (default): Tidak mempertahankan data sumber yang dikemas di dalam keluaran. |
Contoh
Contoh 1: Kemas semua field log ke dalam bidang test. Secara default, bidang yang dikemas semula dihapus.
Pernyataan SPL
* | pack-fields -include='\w+' as testData masukan
test1:123 test2:456 test3:789Keluaran
test:{"test1": "123", "test2": "456", "test3": "789"}
Contoh 2: Kemas semua field log ke dalam bidang test tanpa menghapus bidang yang dikemas semula.
Pernyataan SPL
* | pack-fields -keep -include='\w+' as testData masukan
test1:123 test2:456 test3:789Keluaran
test:{"test1": "123", "test2": "456", "test3": "789"} test1:123 test2:456 test3:789
Contoh 3: Kemas bidang test dan abcd ke dalam bidang content dan pertahankan bidang aslinya.
Pernyataan SPL
* | pack-fields -keep -include='\w+' as contentData masukan
abcd@#%:123 test:456 abcd:789Keluaran
abcd:789 abcd@#%:123 content:{"test": "456", "abcd": "789"} test:456
Contoh 4: Kemas semua bidang kecuali bidang test dan abcd ke dalam bidang content dan hapus bidang yang dikemas semula.
Pernyataan SPL
* | pack-fields -exclude='\w+' as contentData masukan
abcd@#%:123 test:456 abcd:789Keluaran
abcd:789 content:{"abcd@#%": "123"} test:456
Contoh 5: Ekstrak semua pasangan kunci-nilai yang cocok dengan ekspresi reguler yang ditentukan dari nilai bidang, lalu kemas mereka ke dalam bidang name.
Pernyataan SPL
* | parse-kv -prefix='k_' -regexp dict, '(\w+):(\w+)' | pack-fields -include='k_.*' -ltrim = 'k_' as nameData masukan
dict: x:123, y:456, z:789Keluaran
dict:x:123, y:456, z:789 name:{"x": "123", "y": "456", "z": "789"}
log-to-metric
Instruksi ini mengubah log menjadi format yang diperlukan untuk menyimpan data deret waktu.
Secara default, data log yang tidak memenuhi persyaratan untuk data deret waktu (metric) akan diabaikan.
Satuan waktu dari bidang timestamp dalam data log mentah dideteksi secara otomatis. Satuan yang didukung meliputi detik, milidetik, mikrodetik, dan nanodetik.
Penulisan berbasis hash digunakan secara default.
Sintaksis
| log-to-metric -wildcard -format -names=<names> -labels=<labels> -time_field=<time_field> -buckets=<buckets>Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
wildcard | Bool | Tidak | Menentukan apakah pencocokan wildcard untuk nama bidang yang ditentukan oleh Secara default, pencocokan bidang eksak digunakan. Untuk mengaktifkan pencocokan wildcard, tambahkan parameter ini. |
format | Bool | Tidak | Menentukan apakah pemformatan otomatis diaktifkan. Secara default, ini dinonaktifkan, dan data label yang tidak valid dilewati selama transformasi. Jika diaktifkan, data label yang tidak valid diformat. Nilai label tidak boleh berisi karakter seperti |
names | FieldList | Ya | Daftar bidang log yang digunakan untuk menghasilkan titik data metric yang sesuai. Jika sebuah bidang dalam data masukan cocok dengan setidaknya satu dari nama bidang atau pola wildcard yang ditentukan, titik data metric dihasilkan untuk bidang tersebut. Nama metric adalah nama bidang, dan nilai metric adalah nilai bidang. Sebagai contoh, Penting
Untuk format data deret waktu, lihat Data deret waktu (metric). |
labels | FieldList | Tidak | Daftar bidang log yang digunakan untuk membangun informasi label deret waktu yang sesuai. Jika sebuah bidang dalam data masukan cocok dengan setidaknya satu dari nama bidang atau pola wildcard yang ditentukan, bidang tersebut ditambahkan ke label titik data. Nama label adalah nama bidang, dan nilai label adalah nilai bidang. Sebagai contoh, Penting
Untuk format data deret waktu, lihat Data deret waktu (metric). |
time_field | String | Tidak | Bidang waktu untuk data deret waktu. Secara default, bidang Penting Bidang masukan harus berupa timestamp. Tipe data yang sesuai harus BIGINT atau VARCHAR. Jika bidang tersebut bertipe teks VARCHAR, nilainya harus dapat dikonversi ke tipe BIGINT yang valid. |
buckets | Integer | Tidak | Nilai default adalah 32. Atur parameter ini ke jumlah shard target. Ini menyesuaikan rentang hash untuk mengoptimalkan kinerja penulisan operator log-to-metric. Parameter ini mengontrol jumlah bucket hash, yang memengaruhi distribusi data dan kinerja kueri di MetricStore. |
Contoh
Contoh 1: Mengubah log yang berisi bidang rt menjadi format data deret waktu.
Pernyataan SPL
* | log-to-metric -names='["rt"]'Data masukan
__time__: 1614739608 rt: 123Output
__labels__: __name__:rt __time_nano__:1614739608 __value__:123
Contoh 2: Mengubah log yang berisi bidang rt menjadi format data deret waktu, dan menggunakan bidang host sebagai label baru.
Pernyataan SPL
* | log-to-metric -names='["rt"]' -labels='["host"]'Data masukan
__time__: 1614739608 rt: 123 host: myhostOutput
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608 __value__:123
Contoh 3: Mengubah log dengan bidang
rtdanqpsmenjadi format data deret waktu dan menggunakan bidang host sebagai label.Pernyataan SPL
* | log-to-metric -names='["rt", "qps"]' -labels='["host"]'Data masukan
__time__: 1614739608 rt: 123 qps: 10 host: myhostOutput
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608 __value__:123 __labels__:host#$#myhost __name__:qps __time_nano__:1614739608 __value__:10
Contoh 4: Gunakan pencocokan wildcard untuk mengubah log yang berisi bidang rt1 dan rt2 menjadi format data deret waktu, dan gunakan bidang host sebagai label baru.
Pernyataan SPL
* | log-to-metric -wildcard -names='["rt*"]' -labels='["host"]'Data masukan
__time__: 1614739608 rt1: 123 rt2: 10 host: myhostOutput
__labels__:host#$#myhost __name__:rt1 __time_nano__:1614739608 __value__:123 __labels__:host#$#myhost __name__:rt2 __time_nano__:1614739608 __value__:10
Contoh 5: Mengubah log yang berisi bidang
rtdanqpsmenjadi format data deret waktu, gunakan bidanghostsebagai label baru, dan format ulang nilai label baru secara otomatis.Pernyataan SPL
* | log-to-metric -format -names='["rt", "qps"]' -labels='["host"]'Data masukan
__time__: 1614739608 rt: 123 qps: 10 host: myhost1|myhost2Output
__labels__:host#$#myhost1_myhost2 __name__:rt __time_nano__:1614739608 __value__:123 __labels__:host#$#myhost1_myhost2 __name__:qps __time_nano__:1614739608 __value__:10
Contoh 6: Mengubah log yang berisi bidang
rtdanqpsmenjadi format data deret waktu. Ganti nama bidang denganmax_rtdantotal_qps, dan gunakan bidanghostsebagai label baru.Pernyataan SPL
* | project-rename max_rt = rt, total_qps = qps| log-to-metric -names='["max_rt", "total_qps"]' -labels='["host"]'Data masukan
__time__: 1614739608 rt: 123 qps: 10 host: myhostOutput
__labels__:host#$#myhost __name__:max_rt __time_nano__:1614739608 __value__:123 __labels__:host#$#myhost __name__:total_qps __time_nano__:1614739608 __value__:10
Contoh 7: Mengubah log yang berisi bidang
rtdanqpsmenjadi format data deret waktu. Bidang tersebut diganti namanya menjadi max_rt dan total_qps, dan bidang host diganti namanya menjadi hostname untuk dijadikan label baru.Pernyataan SPL
* | project-rename max_rt = rt, total_qps = qps, hostname=host| log-to-metric -names='["max_rt", "total_qps"]' -labels='["hostname"]'Data masukan
__time__: 1614739608 rt: 123 qps: 10 host: myhostOutput
__labels__:hostname#$#myhost __name__:max_rt __time_nano__:1614739608 __value__:123 __labels__:hostname#$#myhost __name__:total_qps __time_nano__:1614739608 __value__:10
Contoh 8: Mengubah log yang berisi bidang remote_user menjadi format data deret waktu. Gunakan bidang status sebagai label baru dan bidang time sebagai timestamp untuk data deret waktu.
Pernyataan SPL
* | log-to-metric -names='["remote_user"]' -labels='["status"]' -time_field='time'Data masukan
time:1652943594 remote_user:89 request_length:4264 request_method:GET status:200Output
__labels__:status#$#200 __name__:remote_user __time_nano__:1652943594 __value__:89
metric-to-metric
Instruksi ini mentransformasi lebih lanjut data deret waktu yang ada dengan menambahkan, memodifikasi, atau menghapus label.
Nama bidang input harus sesuai dengan ekspresi reguler
[a-zA-Z_][a-zA-Z0-9_]*. Jika tidak, label titik deret waktu yang dihasilkan tidak akan mencakup bidang ini.Jika tiga parameter opsional berisi bidang yang sama, prioritasnya adalah sebagai berikut: add_labels > del_labels > rename_labels.
Untuk informasi lebih lanjut tentang format data deret waktu keluaran, lihat Data deret waktu (metric).
Sintaksis
| metric-to-metric -format -add_labels=<add_labels> -del_labels=<del_labels> -rename_labels=<rename_labels> -buckets=<buckets>Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
add_labels | Array | Tidak | Daftar bidang label untuk ditambahkan. Ini digunakan untuk membangun informasi label deret waktu baru. Menambahkan data mentah ke label titik deret waktu. Hanya tipe VARCHAR yang didukung. Sebagai contoh, jika data mentah adalah |
del_labels | Array | Tidak | Daftar bidang label untuk dihapus. Ini digunakan untuk membangun informasi label deret waktu baru. Jika nama bidang dalam input cocok dengan nama bidang dalam label asli, bidang terkait akan dihapus dari label asli. Sebagai contoh, jika nilai label asli adalah |
rename_labels | Map | Tidak | Daftar bidang label untuk diubah namanya. Ini digunakan untuk membangun informasi label deret waktu baru. Memperbarui label titik deret waktu asli berdasarkan informasi peta. Kunci adalah nama bidang asli, dan nilainya adalah nama bidang baru. Sebagai contoh, |
format | Bool | Tidak | Menentukan apakah akan mengaktifkan pemformatan otomatis. Secara default, ini dinonaktifkan, dan data tidak valid dilewati selama transformasi. Jika diaktifkan:
|
buckets | Integer | Tidak | Nilai defaultnya adalah 32. Atur parameter ini ke jumlah shard target. Ini menyesuaikan rentang hash untuk mengoptimalkan kinerja penulisan operator metric-to-metric. Parameter ini mengontrol jumlah bucket hash, yang memengaruhi distribusi data dan kinerja kueri di MetricStore. |
Contoh
Contoh 1: Menambahkan label.
Pernyataan SPL
* | extend qps = '10'|metric-to-metric -add_labels='["qps"]'Data masukan
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608 __value__:123Keluaran
__labels__:host#$#myhost|qps#$#10 __name__:rt __time_nano__:1614739608 __value__:123
Contoh 2: Menghapus label.
Pernyataan SPL
* | metric-to-metric -del_labels='["qps"]'Data masukan
__labels__:host#$#myhost|qps#$#10 __name__:rt __time_nano__:1614739608 __value__:123Keluaran
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608 __value__:123
Contoh 3: Mengubah nama label.
Pernyataan SPL
* | metric-to-metric -rename_labels='{"host":"etl_host"}'Data masukan
__labels__:host#$#myhost|qps#$#10 __name__:rt __time_nano__:1614739608 __value__:123Keluaran
__labels__:etl_host#$#myhost|qps#$#10 __name__:rt __time_nano__:1614739608 __value__:123
Contoh 4: Memformat data tidak valid.
Pernyataan SPL
* | metric-to-metric -formatData masukan
__labels__:host#$#myhost|qps#$#10|asda$cc#$#j|ob|schema#$#|#$#|#$#xxxx __name__:rt __time_nano__:1614739608 __value__:123Keluaran
__labels__:asda_cc#$#j|host#$#myhost|qps#$#10 __name__:rt __time_nano__:1614739608 __value__:123