Topik ini menjelaskan cara mendistribusikan data ke beberapa Logstore tujuan dalam berbagai skenario, termasuk distribusi dinamis, lintas akun, lintas akun dinamis, dan multi-sumber dinamis.
Informasi latar belakang
Fitur transformasi data dari Log Service memungkinkan Anda mendistribusikan hasil transformasi data ke beberapa Logstore tujuan. Saat menyimpan hasil transformasi data, Anda dapat mengonfigurasi pasangan AccessKey dari akun yang berbeda untuk mendistribusikan hasil tersebut ke Logstore-logstore milik akun-akun tersebut. Selain itu, Anda dapat menggunakan fungsi e_output atau e_coutput untuk menetapkan proyek dan Logstore tujuan secara dinamis.- Dalam skenario distribusi lintas akun, Anda dapat mendistribusikan hasil transformasi data ke maksimal 20 Logstore yang dimiliki oleh akun berbeda.
- Fungsi e_output digunakan untuk mengirim data log ke Logstore tertentu. Setelah data log dikirim, aturan transformasi selanjutnya tidak akan berlaku. Jika ingin menerapkan aturan transformasi lebih lanjut, gunakan fungsi e_coutput. Untuk informasi lebih lanjut, lihat e_output dan e_coutput. Fungsi e_output digunakan dalam contoh berikut untuk menjelaskan pendistribusian data log.
Skenario 1: distribusi lintas akun
Sebagai contoh, asumsikan semua entri log akses situs web disimpan dalam sebuah Logstore. Anda ingin mendistribusikan entri log tersebut ke Logstore-logstore dari akun berbeda berdasarkan nilai bidang http_status dalam entri log.
Gunakan fitur transformasi data untuk mendistribusikan entri log sesuai dengan persyaratan berikut:
- Entri log mentah:
http_host: example.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https http_host: example.org http_status: 301 request_method: POST request_uri: /data/data.php scheme: http http_host: example.net http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https http_host: aliyundoc.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https - Persyaratan distribusi
- Simpan entri log dengan nilai bidang http_status sebesar 2XX sebagai target0 di Logstore0 dan tetapkan topik entri log menjadi success_event.
- Simpan entri log dengan nilai bidang http_status sebesar 3XX sebagai target1 di Logstore1 dan tetapkan topik entri log menjadi redirection_event.
- Simpan entri log dengan nilai bidang http_status sebesar 4XX sebagai target2 di Logstore2 dan tetapkan topik entri log menjadi unauthorized_event.
- Simpan entri log dengan nilai bidang http_status sebesar 5XX sebagai target3 di Logstore3 dan tetapkan topik entri log menjadi internal_server_error_event.
Entri log yang disimpan sebagai target0 milik Akun A, sedangkan entri log yang disimpan sebagai target1, target2, dan target3 milik Akun B.
- Aturan transformasi:
e_switch(e_match("status", r"2\d+"), e_set("__topic__", "success_event"), e_match("status", r"3\d+"), e_compose(e_set("__topic__", "redirection_event"), e_output("target1")), e_match("status", r"4\d+"), e_compose(e_set("__topic__", "unauthorized_event"), e_output("target2")), e_match("status", r"5\d+"), e_compose(e_set("__topic__", "internal_server_error_event`"), e_output("target3")) ) - Tujuan penyimpananPada halaman Create Data Transformation Rule, konfigurasikan tujuan penyimpanan. Untuk detail parameter, lihat Buat Pekerjaan Transformasi Data.

Label Tujuan penyimpanan Proyek dan Logstore tujuan AccessKey 1 target0 Project0 dan Logstore0 Pasangan AccessKey dari Akun A 2 target1 Project1 dan Logstore1 Pasangan AccessKey dari Akun B 3 target2 Project2 dan Logstore2 Pasangan AccessKey dari Akun B 4 target3 Project3 dan Logstore3 Pasangan AccessKey dari Akun B - Hasil:
## Entri log yang memiliki nilai bidang http_status sebesar 2XX didistribusikan ke Logstore0 dari Akun A. __topic__: success_event http_host: example.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Entri log yang memiliki nilai bidang http_status sebesar 3XX didistribusikan ke Logstore1 dari Akun B. __topic__: redirection_event http_host: example.org http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Entri log yang memiliki nilai bidang http_status sebesar 4XX didistribusikan ke Logstore2 dari Akun B. __topic__: unauthorized_event http_host: example.net http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Entri log yang memiliki nilai bidang http_status sebesar 5XX didistribusikan ke Logstore3 dari Akun B. __topic__: internal_server_error_event http_host: aliyundoc.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
Skenario 2: distribusi dinamis
Sebagai contoh, asumsikan semua entri log akses situs web disimpan dalam sebuah Logstore. Anda ingin mendistribusikan entri log tersebut ke Logstore-logstore berbeda berdasarkan bidang proyek dan logstore dalam entri log.
Gunakan fitur transformasi data untuk mendistribusikan entri log sesuai dengan persyaratan berikut:
- Entri log mentah:
__tag__:type: dynamic_dispatch host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https __tag__:type: dynamic_dispatch host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http __tag__:type: dynamic_dispatch host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https __tag__:type: dynamic_dispatch host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https - Persyaratan distribusi
- Distribusikan entri log berdasarkan nilai-nilai dari bidang proyek dan logstore.
- Tambahkan bidang __tag:__type ke setiap entri log dan tetapkan nilainya menjadi dynamic_dispatch.
- Aturan transformasi:
e_output(project=v("project"), logstore=v("logstore"), tags={"type": "dynamic_dispatch"})Fungsi e_output mengekstrak nilai-nilai dari bidang proyek dan logstore dari setiap entri log dan mendistribusikan entri log berdasarkan nilai-nilai tersebut.
- Tujuan penyimpananPada halaman Create Data Transformation Rule, konfigurasikan tujuan penyimpanan.Catatan Proyek dan Logstore tujuan ditentukan berdasarkan pengaturan parameter proyek dan logstore dalam fungsi e_output. Proyek dan Logstore ini tidak terkait dengan konfigurasi tujuan penyimpanan default (berlabel 1) pada halaman Create Data Transformation Rule.

- Hasil:
## Entri log yang didistribusikan ke Logstore1 dari Project1. __tag__:type: dynamic_dispatch host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Entri log yang didistribusikan ke Logstore2 dari Project1. __tag__:type: dynamic_dispatch host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Entri log yang didistribusikan ke Logstore1 dari Project2. __tag__:type: dynamic_dispatch host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Entri log yang didistribusikan ke Logstore2 dari Project2. __tag__:type: dynamic_dispatch host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
Skenario 3: Distribusi lintas akun dinamis
Sebagai contoh, asumsikan semua entri log akses situs web disimpan dalam sebuah Logstore. Anda ingin mendistribusikan entri log tersebut ke Logstore-logstore dari akun berbeda berdasarkan bidang proyek dan logstore dalam entri log.
Gunakan fitur transformasi data untuk mendistribusikan entri log sesuai dengan persyaratan berikut:
- Entri log mentah:
host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https - Persyaratan distribusi
Distribusikan entri log ke proyek dan Logstore dari akun berbeda berdasarkan nilai-nilai dari bidang proyek dan logstore. Proyek tujuan mencakup Project1 dan Project2. Project1 mencakup dua Logstore bernama Logstore1 dan Logstore2 dan dimiliki oleh Akun A. Project2 mencakup dua Logstore bernama Logstore1 dan Logstore2 dan dimiliki oleh Akun B.
- Aturan transformasi:
e_switch(e_match(v("project"), "Project1"), e_output(name="target1", project=v("project"), logstore=v("logstore")), e_match(v("project"), "Project2"), e_output(name="target2", project=v("project"), logstore=v("logstore"))) - Tujuan penyimpananPada halaman Create Data Transformation Rule, konfigurasikan tujuan penyimpanan. Untuk detail parameter, lihat Buat Pekerjaan Transformasi Data.Catatan Proyek dan Logstore tujuan ditentukan berdasarkan pengaturan parameter proyek dan logstore dalam fungsi e_output. Proyek dan Logstore ini tidak terkait dengan konfigurasi tujuan penyimpanan default (berlabel 1) pada halaman Create Data Transformation Rule.

Label Tujuan penyimpanan Proyek dan Logstore tujuan AccessKey 1 target0 Project0 dan Logstore0 Tidak ada 2 target1 Dipilih secara acak oleh fungsi e_output Pasangan AccessKey dari Akun A 3 target2 Dipilih secara acak oleh fungsi e_output Pasangan AccessKey dari Akun B - Hasil:
## Entri log yang didistribusikan ke Logstore1 dari Project1 yang dimiliki oleh Akun A. host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Entri log yang didistribusikan ke Logstore2 dari Project1 yang dimiliki oleh Akun A. host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Entri log yang didistribusikan ke Logstore1 dari Project2 yang dimiliki oleh Akun B. host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Entri log yang didistribusikan ke Logstore2 dari Project2 yang dimiliki oleh Akun B. host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
Skenario 4: distribusi dinamis multi-sumber
Sebagai contoh, asumsikan Anda mengiklankan sebuah game dan menyimpan entri log dari semua permintaan API game tersebut dalam sebuah Logstore. Anda ingin mengurai header permintaan user-agent dan mendistribusikan entri log dari permintaan platform iOS, Android, dan Windows berdasarkan header permintaan user-agent. Anda juga ingin menganalisis tingkat konversi iklan berdasarkan bidang request_method.
Gunakan fitur transformasi data dan kueri untuk mendistribusikan entri log sesuai dengan persyaratan berikut:
- Entri log mentah:
__source__:127.0.0.0 __tag__:__receive_time__: 1589541467 ip:10.0.0.0 request_method: GET user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 - Persyaratan distribusi
- Simpan entri log dari permintaan pengguna Windows sebagai target1 di Logstore1.
- Simpan entri log dari permintaan pengguna iOS sebagai target2 di Logstore2.
- Simpan entri log dari permintaan pengguna Android sebagai target3 di Logstore3.
- Aturan transformasi:
Gunakan fungsi ua_parse_os untuk mengurai bidang user_agent dan fungsi dct_get untuk mengambil informasi sistem operasi dari header permintaan user-agent. Kemudian, gunakan fungsi e_set untuk menambahkan bidang os ke setiap entri log dan gunakan fungsi e_output dan e_if untuk mendistribusikan entri log. Nilai dari bidang os adalah informasi sistem operasi.
e_set("os", dct_get(ua_parse_os(v("user_agent")),"family")) e_if(e_search("os==Windows"),e_output(name="target1")) e_if(e_search("os=iOS"),e_output(name="target2")) e_if(e_search("os==Android"),e_output(name="target3")) - Tujuan penyimpanan
Pada halaman Create Data Transformation Rule, konfigurasikan tujuan penyimpanan. Untuk detail parameter, lihat Buat Pekerjaan Transformasi Data.

Label Tujuan penyimpanan Proyek dan Logstore tujuan 1 target0 Project0 dan Logstore0 2 target1 Project1 dan Logstore1 3 target2 Project2 dan Logstore2 4 target3 Project3 dan Logstore3 - Kueri Log dan Analisis
Anda dapat menanyakan data log di Logstore tujuan untuk mengambil tingkat konversi iklan. Hasil kueri berikut menunjukkan bahwa pengguna Android memiliki tingkat konversi iklan yang lebih tinggi. Untuk informasi lebih lanjut tentang cara menanyakan data log, lihat Panduan Kueri dan Analisis Log.
- Pada halaman Pencarian & Analisis Logstore2, jalankan pernyataan kueri berikut untuk mengambil rasio permintaan GET dan POST dari pengguna iOS:
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
- Pada halaman Pencarian & Analisis Logstore3, jalankan pernyataan kueri berikut untuk mengambil rasio permintaan GET dan POST dari pengguna Android:
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
- Pada halaman Pencarian & Analisis Logstore2, jalankan pernyataan kueri berikut untuk mengambil rasio permintaan GET dan POST dari pengguna iOS: