全部产品
Search
文档中心

Simple Log Service:Instruksi Transformasi Data (Versi Baru)

更新时间:Nov 09, 2025

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.

Penting
  • 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 test
    • Data masukan

      test1:123
      test2:456
      test3:789
    • Keluaran

      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 test
    • Data masukan

      test1:123
      test2:456
      test3:789
    • Keluaran

      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 content
    • Data masukan

      abcd@#%:123
      test:456
      abcd:789
    • Keluaran

      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 content
    • Data masukan

      abcd@#%:123
      test:456
      abcd:789
    • Keluaran

      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 name
    • Data masukan

      dict: x:123, y:456, z:789
    • Keluaran

      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.

Penting
  • 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 names dan labels diaktifkan.

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 "|", "#", atau "$". Jika ada, karakter tersebut diganti dengan garis bawah (_).

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, [mem, "mem:pct"] menghasilkan dua titik data bernama mem dan mem:pct.

Penting
  • Nama bidang masukan harus cocok dengan ekspresi reguler [a-zA-Z_:][a-zA-Z0-9_:]*. Jika tidak, tidak ada titik data yang dihasilkan untuk bidang tersebut.

  • Nilai bidang masukan harus memenuhi salah satu persyaratan berikut. Jika tidak, tidak ada titik data yang dihasilkan untuk bidang tersebut:

    • Bidang bertipe numerik: TINYINT, SMALLINT, INTEGER, BIGINT, HUGEINT, REAL, atau DOUBLE.

    • Bidang bertipe teks VARCHAR, dan nilainya dapat dikonversi ke tipe DOUBLE yang valid.

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, [host, ip] menambahkan dua label deret waktu, host dan ip, dengan nilai bidang aslinya.

Penting
  • Nama bidang masukan harus cocok dengan ekspresi reguler [a-zA-Z_][a-zA-Z0-9_]*. Jika tidak, label titik data yang dihasilkan tidak akan mencakup bidang ini.

  • Nilai bidang masukan tidak boleh berisi VERTICAL LINE (|). Jika tidak, label titik data yang dihasilkan tidak akan mencakup bidang ini.

  • Bidang masukan harus bertipe teks VARCHAR. Jika tidak, label yang sesuai tidak dihasilkan.

Untuk format data deret waktu, lihat Data deret waktu (metric).

time_field

String

Tidak

Bidang waktu untuk data deret waktu. Secara default, bidang __time__ dari log digunakan sebagai bidang waktu untuk data deret waktu.

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: 123
    • Output

      __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: myhost
    • Output

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • Contoh 3: Mengubah log dengan bidang rt dan qps menjadi 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: myhost
    • Output

      __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: myhost
    • Output

      __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 rt dan qps menjadi format data deret waktu, gunakan bidang host sebagai 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|myhost2
    • Output

      __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 rt dan qps menjadi format data deret waktu. Ganti nama bidang dengan max_rt dan total_qps, dan gunakan bidang host sebagai 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: myhost
    • Output

      __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 rt dan qps menjadi 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: myhost
    • Output

      __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:200
    • Output

      __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.

Penting
  • 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 {"host":"http://www.xxx.com", "ip":"127.0.0.1"} dan Anda memasukkan ["host", "ip"], |host#$#http://www.xxx.com|ip#$#127.0.0.1 akan ditambahkan ke label asli. Jika label asli sudah berisi bidang host, nilainya akan ditimpa.

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 host#$#http://www.xxx.com|ip#$#127.0.0.1 dan Anda memasukkan ["ip"], satu label deret waktu akan dihapus. Label asli diperbarui menjadi host#$#http://www.xxx.com. Jika label asli tidak berisi bidang ip, tidak ada operasi yang dilakukan.

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, {"host":"host_new", "ip":"ip_new"} mengubah nama "host" menjadi "host_new" dan "ip" menjadi "ip_new". Jika label asli tidak berisi bidang terkait, tidak ada operasi yang dilakukan.

format

Bool

Tidak

Menentukan apakah akan mengaktifkan pemformatan otomatis. Secara default, ini dinonaktifkan, dan data tidak valid dilewati selama transformasi.

Jika diaktifkan:

  • __labels__ diurutkan.

  • LabelKey dan LabelValue diformat.

    • LabelKey: Harus sesuai dengan ekspresi reguler "[a-zA-Z_][a-zA-Z0-9_]". Karakter tidak valid diganti dengan spasi (" ").

    • LabelValue: Tidak boleh berisi karakter seperti "|", "#", atau "$". Jika ada, karakter tersebut diganti dengan garis bawah (_).

  • Label dalam __labels__ dengan LabelValue berupa string kosong dihapus. Namun, entri data tetap dipertahankan.

  • Label duplikat dalam bidang __labels__ dihapus. Label dengan LabelValue leksikografis pertama dipertahankan.

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__:123
    • Keluaran

      __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__:123
    • Keluaran

      __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__:123
    • Keluaran

      __labels__:etl_host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • Contoh 4: Memformat data tidak valid.

    • Pernyataan SPL

      * | metric-to-metric -format
    • Data masukan

      __labels__:host#$#myhost|qps#$#10|asda$cc#$#j|ob|schema#$#|#$#|#$#xxxx
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • Keluaran

      __labels__:asda_cc#$#j|host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123