Sumber data LogHub (SLS) menyediakan sinkronisasi data dua arah antara Simple Log Service (SLS) dan sumber data lainnya di DataWorks.
Fitur
Simple Log Service (SLS) mendukung skenario sinkronisasi data berikut:
Sinkronisasi data antara LogHub dan sumber data seperti MaxCompute di wilayah berbeda.
Sinkronisasi data antara LogHub dan sumber data seperti MaxCompute di akun Alibaba Cloud berbeda.
Sinkronisasi data antara LogHub dan sumber data seperti MaxCompute dalam akun Alibaba Cloud yang sama.
Sinkronisasi data antara LogHub dan sumber data seperti MaxCompute antara akun public cloud dan akun China Finance Cloud.
Batasan
Ketika Data Integration melakukan penulisan offline ke LogHub (SLS), duplikasi data dapat terjadi jika tugas dijalankan ulang setelah failover karena LogHub (SLS) tidak idempoten.
Tipe bidang yang didukung
Data Integration mendukung tipe bidang LogHub (SLS) berikut untuk pembacaan dan penulisan.
Field type | Offline read (LogHub (SLS) Reader) | Offline write (LogHub (SLS) Writer) | Real-time read |
STRING | Supported | Supported | Supported |
Detail:
Saat menulis data ke LogHub (SLS) dalam mode offline
Semua tipe data dikonversi ke STRING sebelum ditulis ke LogHub (SLS). Tabel berikut mencantumkan konversi tipe data yang dilakukan oleh LogHub (SLS) Writer.
Supported Data Integration internal type
Data type when written to LogHub (SLS)
LONG
STRING
DOUBLE
STRING
STRING
STRING
DATE
STRING
BOOLEAN
STRING
BYTES
STRING
Saat membaca data dari LogHub (SLS) dalam mode real-time
Bidang metadata berikut secara otomatis disertakan.
LogHub (SLS) real-time synchronization field
Data type
Description
__time__
STRING
Bidang terpesan SLS: __time__ menentukan waktu log saat data log ditulis. Nilainya adalah stempel waktu UNIX dalam satuan detik.
__source__
STRING
Bidang terpesan SLS: __source__ menentukan perangkat sumber log.
__topic__
STRING
Bidang terpesan SLS: __topic__ menentukan nama topik.
__tag__:__receive_time__
STRING
Waktu saat log tiba di server. Setelah Anda mengaktifkan fitur pencatatan alamat IP publik, server menambahkan bidang ini ke log mentah saat menerima log. Nilainya adalah stempel waktu UNIX dalam satuan detik.
__tag__:__client_ip__
STRING
Alamat IP publik perangkat sumber log. Setelah Anda mengaktifkan fitur pencatatan alamat IP publik, server menambahkan bidang ini ke log mentah saat menerima log.
__tag__:__path__
STRING
Jalur file log yang dikumpulkan oleh Logtail. Logtail secara otomatis menambahkan bidang ini ke log.
__tag__:__hostname__
STRING
Hostname mesin sumber tempat Logtail mengumpulkan data. Logtail secara otomatis menambahkan bidang ini ke log.
Buat sumber data
Konfigurasikan sumber data
Sebelum mengembangkan tugas sinkronisasi data, Anda harus membuat sumber data yang sesuai di DataWorks. Untuk prosedurnya, lihat Buat sumber data. Untuk deskripsi detail parameter konfigurasi, lihat tooltip yang ditampilkan pada halaman konfigurasi.
Buat sumber data lintas akun Alibaba Cloud
Contoh berikut menjelaskan cara menggunakan Akun B untuk mengonfigurasi tugas sinkronisasi di Data Integration guna menyinkronkan data LogHub dari Akun A ke MaxCompute milik Akun B. Catatan khusus untuk skenario lintas akun adalah sebagai berikut:
Buat sumber data LogHub menggunakan AccessKey ID dan AccessKey Secret Akun A.
Dalam kasus ini, Akun B dapat menyinkronkan data dari semua proyek SLS di bawah Akun A.
Buat sumber data LogHub menggunakan AccessKey ID dan AccessKey Secret Pengguna RAM A1 di bawah Akun A.
Akun A memberikan izin umum kepada Pengguna RAM A1 pada SLS, yaitu kebijakan
AliyunLogFullAccessdanAliyunLogReadOnlyAccess. Untuk informasi selengkapnya, lihat Buat pengguna RAM dan berikan izin.CatatanSetelah Anda melampirkan kebijakan sistem
AliyunLogFullAccessdanAliyunLogReadOnlyAccesske pengguna RAM, pengguna RAM tersebut dapat mengkueri semua resource SLS di bawah akun Alibaba Cloud.Akun A memberikan izin kustom kepada Pengguna RAM A1 pada SLS.
Masuk ke halaman menggunakan Akun A, lalu klik Create Permission Policy.
Untuk informasi tentang otorisasi terkait, lihat Ikhtisar kontrol akses dan Contoh otorisasi kustom RAM.
Setelah Anda memberikan otorisasi kepada Pengguna RAM A1 berdasarkan kebijakan berikut, Akun B hanya dapat menyinkronkan data dari proyek SLS project_name1 dan project_name2 melalui Pengguna RAM A1.
{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*", "log:CreateConsumerGroup", "log:UpdateConsumerGroup", "log:DeleteConsumerGroup", "log:ListConsumerGroup", "log:ConsumerGroupUpdateCheckPoint", "log:ConsumerGroupHeartBeat", "log:GetConsumerGroupCheckPoint" ], "Resource": [ "acs:log:*:*:project/project_name1", "acs:log:*:*:project/project_name1/*", "acs:log:*:*:project/project_name2", "acs:log:*:*:project/project_name2/*" ], "Effect": "Allow" } ] }
Pengembangan tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Saat sumber data LogHub digunakan sebagai sumber, Anda dapat menyaring data di LogHub menggunakan sintaks kueri LogHub atau pernyataan SPL (SLS Processing Language, sintaks yang digunakan SLS untuk memproses log) selama konfigurasi tugas. Untuk detail sintaks, lihat Lampiran: Penyaringan data LogHub.
Panduan konfigurasi tugas sinkronisasi offline tabel tunggal
Untuk prosedurnya, lihat Konfigurasikan tugas sinkronisasi offline tabel tunggal di antarmuka tanpa kode dan Konfigurasikan tugas sinkronisasi offline tabel tunggal menggunakan skrip.
CatatanSaat Anda mengonfigurasi node sinkronisasi dalam mode antarmuka tanpa kode, format parameter harus konsisten dengan format konfigurasi parameter dalam mode skrip.
Untuk parameter lengkap dan demo skrip dalam mode skrip, lihat Parameter mode skrip di bawah ini.
Panduan konfigurasi tugas sinkronisasi real-time tabel tunggal
Untuk prosedurnya, lihat Konfigurasikan tugas sinkronisasi real-time tabel tunggal.
Panduan konfigurasi sinkronisasi real-time basis data penuh dan sinkronisasi tingkat basis data lainnya
Untuk prosedurnya, lihat Konfigurasikan tugas sinkronisasi real-time basis data penuh.
FAQ
Suatu bidang berisi data di LogHub tetapi tampak kosong setelah sinkronisasi
Bidang yang diambil selama pemetaan bidang dari LogHub tidak sesuai harapan
Untuk isu umum lainnya tentang Data Integration, lihat FAQ Data Integration.
Lampiran 1: Demo skrip dan deskripsi parameter
Konfigurasikan tugas sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi selengkapnya, lihat Konfigurasi mode skrip. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Demo skrip Reader
Baca dari demo Logstore
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"LogHub",// Nama plug-in.
"parameter":{
"datasource":"",// Sumber data.
"column":[// Kolom.
"col0",
"col1",
"col2",
"col3",
"col4",
"__category__",
"__source__",
"__topic__", // Topik log.
"__machineUUID__", // Pengidentifikasi unik mesin koleksi.
"__tag__:__hostname__", // Hostname.
"__tag__:__path__", // Jalur.
"__time__" // Waktu event.
],
"beginDateTime":"",// Waktu mulai konsumsi data.
"batchSize":"",// Jumlah entri data yang dikueri dari SLS sekaligus.
"endDateTime":"",// Waktu akhir konsumsi data.
"fieldDelimiter":",",// Pemisah kolom.
"logstore":""// Nama Logstore tujuan.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku, artinya pembatasan kecepatan dinonaktifkan. Jika throttle diatur ke true, pembatasan kecepatan diaktifkan.
"concurrent":1 // Jumlah thread konkuren.
"mbps":"12",// Laju pembatasan. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Baca dari Logstore setelah pemrosesan data dengan demo SPL
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"LogHub",// Nama plug-in.
"parameter":{
"datasource":"",// Sumber data.
"column":[// Kolom.
"col100",
"col1"
],
"beginDateTime":"",// Waktu mulai konsumsi data.
"batchSize":"",// Jumlah entri data yang dikueri dari SLS sekaligus.
"endDateTime":"",// Waktu akhir konsumsi data.
"fieldDelimiter":",",// Pemisah kolom.
"logstore":"",// Nama Logstore tujuan.
"query":"* | where regexp_like(col0, '[0-9]+') | project col100=col0, col1 " // SPL
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku, artinya pembatasan kecepatan dinonaktifkan. Jika throttle diatur ke true, pembatasan kecepatan diaktifkan.
"concurrent":1 // Jumlah thread konkuren.
"mbps":"12",// Laju pembatasan. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Baca dari Logstore setelah memperluas bidang dengan demo SPL
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"LogHub",// Nama plug-in.
"parameter":{
"datasource":"",// Sumber data.
"column":[// Kolom.
"col0",
"col1",
"col2",
"col3",
"col4",
"__category__",
"__source__",
"__topic__", // Topik log.
"__machineUUID__", // Pengidentifikasi unik mesin koleksi.
"__tag__:__hostname__", // Hostname.
"__tag__:__path__", // Jalur.
"__time__", // Waktu event.
"col100",
"col101"
],
"beginDateTime":"",// Waktu mulai konsumsi data.
"batchSize":"",// Jumlah entri data yang dikueri dari SLS sekaligus.
"endDateTime":"",// Waktu akhir konsumsi data.
"fieldDelimiter":",",// Pemisah kolom.
"logstore":"",// Nama Logstore tujuan.
"query":"* | where regexp_like(col0, '[0-9]+') | extend col100=cast(col2 as BIGINT), extend col101=date_parse(col3, '%Y-%m-%d %H:%i') ",// SPL
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku, artinya pembatasan kecepatan dinonaktifkan. Jika throttle diatur ke true, pembatasan kecepatan diaktifkan.
"concurrent":1 // Jumlah thread konkuren.
"mbps":"12",// Laju pembatasan. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Parameter skrip Reader
Parameter | Description | Required | Default value |
endPoint | Titik akhir Simple Log Service adalah URL yang digunakan untuk mengakses proyek dan data lognya. Titik akhir ini terkait dengan wilayah Alibaba Cloud tempat proyek berada dan nama proyek tersebut. Untuk titik akhir layanan setiap wilayah, lihat Endpoints. | Yes | None |
accessId | ID AccessKey yang digunakan untuk mengakses Simple Log Service, yang mengidentifikasi pengguna. | Yes | None |
accessKey | AccessKey yang digunakan untuk mengakses Simple Log Service guna otentikasi pengguna. | Yes | None |
project | Nama proyek Simple Log Service tujuan. Proyek adalah unit manajemen sumber daya di Simple Log Service dan digunakan untuk mengisolasi serta mengelola sumber daya. | Yes | None |
logstore | Nama Logstore tujuan. Logstore adalah unit di Simple Log Service untuk mengumpulkan, menyimpan, dan mengkueri data log. | Yes | None |
batchSize | Jumlah entri data yang diambil dari Simple Log Service dalam satu kueri. | No | 128 |
column | Nama kolom dalam setiap entri data. Anda dapat mengonfigurasi bidang metadata Simple Log Service sebagai kolom sinkronisasi. Simple Log Service mendukung metadata seperti topik log, pengidentifikasi unik mesin koleksi, hostname, jalur, dan waktu log. Catatan Nama kolom bersifat case-sensitive. Untuk informasi selengkapnya, lihat bagian nilai kolom yang dapat dikonfigurasi di bawah ini. | Yes | None |
beginDateTime | Waktu mulai konsumsi data, yaitu waktu saat data log tiba di LogHub (SLS). Parameter ini menentukan batas kiri (inklusif) rentang waktu. Atur parameter ini ke string waktu dalam format yyyyMMddHHmmss (misalnya, 20180111013000). Anda dapat menggunakan parameter ini bersama parameter penjadwalan DataWorks. Sebagai contoh, di Scheduling Settings di sisi kanan halaman pengeditan node, atur Catatan
| Yes | None |
endDateTime | Waktu akhir konsumsi data, yaitu batas kanan (eksklusif) rentang waktu. Atur parameter ini ke string waktu dalam format yyyyMMddHHmmss (misalnya, 20180111013010). Anda dapat menggunakan parameter ini bersama parameter penjadwalan DataWorks. Sebagai contoh, di Scheduling Settings di sisi kanan halaman pengeditan node, atur endDateTime=${yyyymmdd} di Parameter, lalu atur Log End Time ke ${endDateTime}000000. Ini menunjukkan bahwa waktu akhir log adalah pukul 00:00:00 pada hari setelah tanggal bisnis. Untuk informasi selengkapnya, lihat Parameter penjadwalan. Penting
| Yes | None |
query | Menyaring data di LogHub menggunakan sintaks kueri LogHub atau pernyataan SPL (SLS Processing Language adalah sintaks yang digunakan SLS untuk memproses log). | Yes | None |
Jika data hilang saat Anda membaca dari LogHub, periksa di konsol LogHub apakah bidang metadata receive_time berada dalam rentang waktu yang dikonfigurasi untuk tugas tersebut.
Partisi berdasarkan bidang bisnis kustom
Filter waktu untuk tugas sinkronisasi offline LogHub (SLS) selalu berdasarkan __tag__:__receive_time__. Penyaringan atau partisi langsung berdasarkan bidang bisnis kustom seperti start_time tidak didukung. Untuk mempartisi data ke MaxCompute berdasarkan bidang bisnis kustom, gunakan solusi berikut:
Konfigurasikan tugas sinkronisasi offline untuk menyinkronkan semua data LogHub (SLS) ke tabel staging MaxCompute (tanpa menentukan bidang partisi).
Buat node SQL MaxCompute dan jalankan pernyataan berikut untuk menulis data ke tabel partisi tujuan berdasarkan bidang bisnis kustom (seperti
start_time):INSERT OVERWRITE TABLE target_table PARTITION(start_time) SELECT col1, col2, start_time FROM temp_table;Gunakan parameter penjadwalan untuk meneruskan nilai partisi secara dinamis dan menerapkan partisi otomatis per hari atau per jam.
Demo skrip Writer
{
"type": "job",
"version": "2.0",// Nomor versi.
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "LogHub",// Nama plug-in.
"parameter": {
"datasource": "",// Sumber data.
"column": [// Kolom.
"col0",
"col1",
"col2",
"col3",
"col4",
"col5"
],
"topic": "",// Topik yang dipilih.
"batchSize": "1024",// Jumlah catatan yang dikirim sekaligus.
"logstore": ""// Nama Logstore LogService tujuan.
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""// Jumlah catatan error.
},
"speed": {
"throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku dan bandwidth tidak dibatasi. Jika throttle diatur ke true, bandwidth dibatasi.
"concurrent":3, // Jumlah thread konkuren.
"mbps":"12"// Laju pembatasan. 1 mbps = 1 MB/s.
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}Parameter skrip Writer
LogHub (SLS) Writer memperoleh data yang dihasilkan oleh Reader melalui kerangka kerja Data Integration, lalu mengonversi semua tipe data yang didukung ke STRING satu per satu. Saat batchSize yang ditentukan tercapai, data didorong ke LogHub (SLS) dalam satu batch menggunakan LogService Java SDK.
Parameter | Description | Required | Default value |
endpoint | Titik akhir Layanan Log adalah URL yang digunakan untuk mengakses proyek dan data lognya. Titik akhir ini ditentukan oleh wilayah Alibaba Cloud dan nama proyek. Untuk titik akhir setiap wilayah, lihat Titik akhir layanan. | Yes | None |
accessKeyId | AccessKeyId yang digunakan untuk mengakses Layanan Log. | Yes | None |
accessKeySecret | AccessKeySecret yang digunakan untuk mengakses Layanan Log. | Yes | None |
project | Nama proyek Layanan Log tujuan. | Yes | None |
logstore | Nama Logstore tujuan. Logstore adalah unit di Layanan Log untuk mengumpulkan, menyimpan, dan mengkueri data log. | Yes | None |
topic | Nama topic di SLS tujuan. | No | Empty string |
batchSize | Jumlah catatan data yang disinkronkan ke LogHub (SLS) sekaligus. Nilai default: 1.024. Nilai maksimum: 4.096. Catatan Ukuran data untuk satu penulisan batch ke LogHub (SLS) tidak boleh melebihi 5 MB. Sesuaikan jumlah catatan yang didorong per batch berdasarkan ukuran catatan individual Anda. | No | 1.024 |
column | Nama kolom dalam setiap catatan data. | Yes | None |
Lampiran 2: Penyaringan sintaks SPL LogHub
Saat LogHub digunakan sebagai sumber data, Anda dapat menggunakan sintaks kueri LogHub atau pernyataan SPL (SLS Processing Language) untuk menyaring data di LogHub selama konfigurasi tugas. Sintaks tersebut dijelaskan sebagai berikut:
Untuk informasi selengkapnya tentang SPL, lihat Ikhtisar SPL.
Scenario | SQL statement | SPL statement |
Data filtering | |
|
Pemrosesan dan pemilihan bidang | Pilih bidang tertentu dan ubah namanya: |
|
Transformasi data (panggil fungsi SQL) | Konversi tipe data, uraikan stempel waktu, dan lainnya: | Konversi tipe data, uraikan stempel waktu, dan lainnya: |
Ekstraksi bidang | Ekstraksi ekspresi reguler: Ekstraksi JSON: |
|
Lampiran 3: Nilai kolom yang dapat dikonfigurasi
Logika pembacaan semua bidang hanya dipicu ketika column berisi tepat satu elemen yang berupa * atau "*". Jika tidak, setiap elemen column diproses dalam urutan pencocokan normal. Sebagai contoh, jika Anda mengonfigurasi ["*", "__time__"], * tidak memicu logika pembacaan semua bidang. Sebaliknya, elemen tersebut dicocokkan sebagai nama bidang biasa, yang biasanya menghasilkan null.
Urutan pencocokan normal adalah: bidang konten log biasa → pemetaan bidang meta bawaan Reader → konstanta dalam tanda kutip tunggal → __tag__:<tagKey> → null. Jika bidang konten log biasa memiliki nama yang sama dengan bidang meta atau kunci LogTag, bidang konten log biasa memiliki prioritas lebih tinggi.
Tabel berikut mencantumkan bidang yang umum digunakan dan direkomendasikan untuk konfigurasi yang dihadapkan pengguna dalam pengaturan column LogHub Reader, berdasarkan definisi bidang bidang terpesan SLS. Apakah suatu bidang memiliki nilai tergantung pada konten log aktual, metadata LogGroup, dan LogTags yang diambil.
Configuration | Behavior |
Nama bidang biasa, seperti | Membaca nilai dari bidang konten (contents) setiap entri log berdasarkan kunci. Nama bidang bersifat case-sensitive. |
| Membaca |
| Membaca |
| Membaca |
| Membaca |
| Membaca |
| Membaca |
| Membaca |
| Membaca |
| Membaca |
| Membaca LogTags lain yang ditentukan, seperti |
| Jika bidang ini ada sebagai bidang konten log, bidang ini dapat dibaca sebagai nama bidang biasa. |
| Menghasilkan string konstan (konten setelah menghapus tanda kutip tunggal luar). |
| Hanya berlaku ketika |
Bidang yang tidak cocok | Menghasilkan |
Contoh konfigurasi:
"column": [
"content",
"__time__",
"__source__",
"__tag__:__receive_time__",
"'constant_value'"
]