Layanan Log Sederhana memungkinkan Anda mengirim data log ke MaxCompute untuk penyimpanan dan analisis. Topik ini menjelaskan cara membuat pekerjaan pengiriman data MaxCompute (versi baru).
Prasyarat
Proyek Layanan Log Sederhana dan penyimpanan log telah dibuat, serta pengumpulan data telah selesai. Untuk informasi selengkapnya, lihat Kelola proyek, Buat penyimpanan log, dan Ikhtisar pengumpulan data.
Tabel partisi MaxCompute telah dibuat di wilayah tempat proyek Layanan Log Sederhana berada. Untuk informasi selengkapnya, lihat Buat tabel.
Catatan penggunaan
Untuk informasi selengkapnya tentang wilayah yang mendukung pengiriman data ke MaxCompute, lihat Wilayah yang didukung.
Untuk field bertipe `char` atau `varchar`, jika nilainya melebihi panjang yang ditentukan, karakter berlebih akan dipotong saat data dikirim ke MaxCompute.
Misalnya, jika batas panjang adalah 3 dan nilai field adalah 012345, maka nilai tersebut menjadi 012 di MaxCompute.
Untuk field bertipe `string`, `char`, atau `varchar`, nilai string kosong akan menjadi `Null` saat dikirim ke MaxCompute.
Untuk field `datetime`, nilainya harus dalam format `YYYY-MM-DD HH:mm:ss`. Beberapa spasi diperbolehkan antara DD dan HH. Nilai dengan format salah tidak menyebabkan error pengiriman, tetapi nilainya menjadi `Null` di MaxCompute.
Untuk field `date`, nilai dengan format salah tidak menyebabkan error pengiriman, tetapi nilainya menjadi `Null` di MaxCompute.
Untuk field `decimal`, jika jumlah tempat desimal melebihi presisi yang ditentukan, nilainya akan dibulatkan. Jika jumlah digit integer melebihi presisi yang ditentukan, sistem akan membuang seluruh log sebagai data kotor dan menambah jumlah error.
Data kotor dibuang secara default selama proses pengiriman.
Jika suatu nilai tidak ada dalam log, nilainya mungkin menjadi nilai default atau `Null` di MaxCompute.
Jika nilai default ditentukan saat tabel MaxCompute dibuat, nilainya menjadi nilai default di MaxCompute.
Jika tidak ada nilai default yang ditentukan tetapi nilai `Null` diizinkan, nilainya menjadi `Null` di MaxCompute.
Karena keterbatasan MaxCompute, konkurensi pengiriman maksimum adalah 64. Artinya, maksimal 64 pekerjaan konkuren dapat menulis ke MaxCompute. Trafik maksimum untuk satu partisi MaxCompute adalah 10 MB/detik.
Prosedur
Masuk ke Konsol Layanan Log Sederhana.
Pada bagian Projects, klik proyek yang Anda inginkan.
Pada tab , klik > di sebelah kiri Logstore tujuan, lalu pilih .
Arahkan pointer ke MaxCompute (formerly ODPS) lalu klik +.
Pada panel Ship To MaxCompute, konfigurasikan parameter berikut, lalu klik OK.
Setelah Anda membuat pekerjaan pengiriman, data log biasanya diimpor ke MaxCompute dalam waktu satu jam setelah ditulis ke Logstore. Anda kemudian dapat melihat data tersebut di MaxCompute. Untuk informasi selengkapnya, lihat Bagaimana cara memeriksa integritas data setelah saya mengirim log ke MaxCompute?.
| log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1642942213 | | 24/Jan/2022:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2022_01_23_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
Pemetaan model data
Saat Anda mengirim log dari Layanan Log Sederhana ke tabel MaxCompute, Anda harus memetakan model data kedua layanan tersebut. Perhatikan poin-poin berikut:
Tabel MaxCompute harus berisi setidaknya satu kolom data dan satu kolom partisi.
Gunakan field cadangan __partition_time__, __source__, dan __topic__.
Tabel MaxCompute dapat memiliki maksimal 60.000 partisi. Setelah jumlah partisi melebihi batas tersebut, data tidak dapat lagi ditulis ke tabel tersebut.
Field cadangan sistem __extract_others__ sebelumnya bernama _extract_others_. Kedua nama tersebut kompatibel.
Nilai kolom kunci partisi MaxCompute tidak boleh berupa kata cadangan atau kata kunci di MaxCompute. Untuk informasi selengkapnya, lihat Kata cadangan dan kata kunci.
Partisi dalam tabel partisi MaxCompute tidak boleh kosong. Anda harus mengonfigurasi field tertentu (field cadangan sistem atau field konten log) untuk kolom kunci partisi MaxCompute. Untuk pekerjaan pengiriman versi lama, operator `cast` diperlukan untuk mengonversi nilai field string ke tipe kolom partisi yang sesuai. Jika konversi gagal dan menghasilkan kolom partisi kosong, log tersebut akan dibuang selama pengiriman.
Field log di Layanan Log Sederhana hanya dapat dipetakan ke satu kolom (kolom data atau kolom partisi) di tabel MaxCompute. Redundansi field tidak didukung.
Tabel berikut menjelaskan pemetaan antara kolom data MaxCompute, kolom partisi, dan field Layanan Log Sederhana. Untuk informasi selengkapnya tentang field cadangan di Layanan Log Sederhana, lihat Field cadangan.
Tipe kolom MaxCompute | Nama kolom (MaxCompute) | Tipe data (MaxCompute) | Nama field log (Layanan Log Sederhana) | Tipe field (Layanan Log Sederhana) | Deskripsi |
Kolom data | log_source | string | __source__ | Field cadangan | Sumber log. |
log_time | bigint | __time__ | Field cadangan | Waktu log dalam format Stempel waktu UNIX. Ini sesuai dengan field Time dalam model data. | |
log_topic | string | __topic__ | Field cadangan | Topik log. | |
time | string | time | Field konten log | Field ini diurai dari log dan sesuai dengan pasangan kunci-nilai dalam model data. Dalam banyak kasus, nilai field __time__ dalam data yang dikumpulkan oleh Logtail sama dengan nilai field time. | |
ip | string | ip | Field konten log | Field ini diurai dari log. | |
thread | string | thread | Field konten log | Field ini diurai dari log. | |
log_extract_others | string | __extract_others__ | Field cadangan | Field log lain yang tidak dipetakan dalam konfigurasi akan diserialisasi menjadi objek JSON berdasarkan pasangan kunci-nilai. Objek JSON tersebut memiliki struktur tingkat tunggal. Objek JSON bersarang tidak didukung untuk field log. | |
Kolom partisi | log_partition_time | string | __partition_time__ | Field cadangan | Field ini dihitung dan disejajarkan berdasarkan nilai field __time__ dalam log. Granularitas partisi dapat dikonfigurasi. |
status | string | status | Field konten log | Field ini diurai dari log. Nilai field ini mendukung enumerasi untuk memastikan jumlah partisi tidak melebihi batas atas. |
Format partisi waktu
Pengiriman data ke versi baru MaxCompute mendukung dua format partisi waktu: StrfTimeFormat dan SimpleDateFormat. Format-format ini hanya diterapkan jika field di kolom kunci partisi MaxCompute diatur ke __partition_time__ atau __receive_time__.
StrfTimeFormat
`strftime` adalah fungsi dalam pustaka standar C UNIX yang memformat tanggal dan waktu. Anda dapat menggunakan fungsi ini untuk mengonversi partisi waktu menjadi string dengan format tertentu. Aturan pemformatan ditentukan oleh spesifikasi format yang diawali karakter `%`. Misalnya, `%Y_%m_%d` merepresentasikan format tahun-bulan-hari.
Jika Anda membuat pekerjaan MaxCompute baru, Anda harus menggunakan format waktu StrfTimeFormat.
Format partisi waktu | Contoh partisi tabel |
%Y_%m_%d_%H_%M_00 | 2024_12_27_20_30_00 |
%Y_%m_%d_%H_%M | 2024_12_27_20_30 |
%Y_%m_%d_%H | 2024_12_27_20 |
%Y_%m_%d | 2024_12_27 |
%Y_%m | 2024_12 |
%Y | 2024 |
%Y%m%d%H%M | 202412272030 |
%Y%m%d%H | 2024122720 |
%Y%m%d | 20241227 |
%Y%m | 202412 |
SimpleDateFormat
Ini adalah format waktu berdasarkan sintaks Java SimpleDateFormat, seperti yyyy-MM-dd HH:mm. Untuk informasi selengkapnya tentang sintaks tersebut, lihat Class SimpleDateFormat.
Format waktu SimpleDateFormat hanya digunakan untuk migrasi dari versi lama ke versi baru guna memastikan kompatibilitas. Jika Anda membuat pekerjaan MaxCompute baru, Anda harus menggunakan format waktu StrfTimeFormat.
Untuk pekerjaan migrasi dari versi lama, format partisi berikut didukung:
Format partisi waktu | Contoh partisi tabel |
yyyy-MM-ddHH:mm | 2024-12-2720-30 |
yyyy_MM_dd_HH_mm | 2024_12_27_20_30 |
yyyy_MM_dd_HH | 2024_12_27_20 |
yyyy-MM-dd HH:mm | 2024-12-27 20:30 |
yyyyMMddHHmm | 202412272030 |
yyyyMMddHH | 2024122720 |
yyyyMMdd | 20241227 |
yyyy_MM-dd_HH_mm | 2024_12-27_20_30 |
yyyy-MM-dd | 2024-12-27 |
Informasi referensi
__partition_time__ field
Menggunakan waktu log sebagai field partisi untuk memfilter data berdasarkan waktu merupakan metode umum di MaxCompute.
Format
Nilai field __partition_time__ dihitung berdasarkan nilai field __time__ di Layanan Log Sederhana. String waktu dihasilkan berdasarkan konfigurasi zona waktu dan format partisi waktu. Untuk menghindari melebihi batas partisi untuk satu tabel MaxCompute, nilai kolom partisi tanggal disejajarkan ke interval 30 menit (1800 detik).
Misalnya, jika waktu log di Layanan Log Sederhana adalah 27/Jan/2022 20:50:13 +0800, Layanan Log Sederhana menghitung nilai field cadangan __time__ sebagai 1643287813 (Stempel waktu UNIX). Tabel berikut menjelaskan nilai kolom partisi waktu untuk konfigurasi yang berbeda.
Format partisi waktu
__partition_time__
%Y_%m_%d_%H_%M_00
2022_01_27_20_30_00
%Y_%m_%d_%H_%M
2022_01_27_20_30
%Y%m%d
20220127
Penggunaan
Gunakan field __partition_time__ untuk memfilter data guna menghindari pemindaian tabel penuh. Misalnya, untuk mengkueri data log tanggal 26 Desember 2024, jalankan pernyataan kueri berikut.
select * from {ODPS_TABLE_NAME} where log_partition_time >= "2024_12_26" and log_partition_time < "2024_12_27";
__receive_time__fieldMenggunakan waktu saat log tiba di server sebagai field partisi untuk memfilter data berdasarkan waktu merupakan metode umum di MaxCompute.
Format
Format partisi waktu
__recetive_time__
%Y_%m_%d_%H_%M_00
2022_01_27_20_30_00
%Y_%m_%d_%H_%M
2022_01_27_20_30
%Y%m%d
20220127
__extract_others__ dan __extract_others_all__ fields
Field __extract_others__ berisi semua field yang tidak dipetakan dalam log, tidak termasuk __topic__, __tag__:*, dan __source__.
Field __extract_others_all__ berisi semua field yang tidak dipetakan dalam log, termasuk __topic__, __tag__:*, dan __source__.
Deskripsi mode pengiriman
Saat ini, pengiriman data ke MaxCompute (versi baru) mendukung dua mode: pengiriman real-time dan pengiriman batch.
Real-time Shipping: Membaca data dari Logstore secara real-time dan mengirimkannya ke MaxCompute.
Batch Shipping: Membaca data dari Logstore yang waktunya 5 hingga 10 menit lebih awal dari waktu saat ini dan mengirimkannya ke MaxCompute.
Setelah Anda mengatur Shipping Mode ke Batch Shipping, jika Anda ingin mengatur Start Time atau End Time di Start Time Range, Anda harus menyejajarkan waktu ke interval 5 menit. Misalnya,
2022-05-24 16:35:00adalah pengaturan yang valid, tetapi2022-05-24 16:36:00adalah pengaturan yang tidak valid.Selain itu, pengiriman batch mendukung pengiriman field __receive_time__. Field __receive_time__ menunjukkan waktu saat log diterima oleh Layanan Log Sederhana. Anda dapat mengatur format field ini menggunakan format partisi waktu, dengan presisi hingga 30 menit. Untuk informasi selengkapnya tentang format partisi waktu, lihat Format partisi waktu.
Jika Anda ingin mengirim field ini, Anda hanya dapat menambahkannya ke MaxCompute Partition Key Column.
untuk melihat detailnya, seperti yang ditunjukkan pada gambar: