Layanan Log (SLS) mendukung pengiriman data log ke MaxCompute (ODPS) untuk penyimpanan dan analisis. Buat pekerjaan pengiriman data MaxCompute (versi baru) guna menyiapkan pipa data.
Prasyarat
Anda telah membuat proyek dan penyimpanan log di Layanan Log (SLS) serta mengonfigurasi pengumpulan data. Untuk informasi selengkapnya, lihat Kelola proyek, Buat penyimpanan log dasar, dan Ikhtisar pengumpulan data.
Anda telah membuat tabel partisi MaxCompute (ODPS) di wilayah yang sama dengan proyek Layanan Log (SLS). Untuk informasi selengkapnya, lihat Buat tabel.
Catatan penggunaan
Untuk informasi tentang wilayah yang mendukung pengiriman data ke MaxCompute (ODPS), lihat Wilayah yang didukung.
Jika nilai field bertipe
charatauvarcharmelebihi panjang yang ditentukan, bagian yang melebihi akan dipotong saat dikirim ke MaxCompute (ODPS).Misalnya, jika batas panjang adalah 3 dan nilai field-nya adalah
012345, nilainya menjadi012setelah dikirim ke MaxCompute (ODPS).Jika nilai field bertipe
string,char, atauvarcharberupa string kosong, nilainya menjadi Null setelah dikirim ke MaxCompute (ODPS).Nilai field bertipe
datetimeharus dalam formatYYYY-MM-DD HH:mm:ss. Beberapa spasi diperbolehkan antaraDDdanHH. Format yang tidak valid tidak menyebabkan error pengiriman, tetapi nilainya menjadi Null setelah dikirim ke MaxCompute (ODPS).Jika nilai field bertipe
datedalam format yang tidak valid, pekerjaan pengiriman data tidak melaporkan error, tetapi nilainya menjadi Null setelah dikirim ke MaxCompute (ODPS).Untuk field desimal, jika nilainya melebihi skala yang ditentukan, sistem akan membulatkannya. Jika nilainya melebihi presisi yang ditentukan, sistem akan membuang seluruh log sebagai data rusak dan menambah jumlah error.
Secara default, sistem membuang data rusak selama pengiriman data.
Jika field yang ditentukan dalam konfigurasi pengiriman tidak ada dalam log, nilainya di MaxCompute (ODPS) menjadi nilai default atau Null.
Jika Anda menentukan nilai default saat membuat tabel MaxCompute (ODPS), field tersebut akan diberi nilai default.
Jika Anda tidak menentukan nilai default tetapi kolom tersebut mengizinkan nilai Null, nilai field menjadi Null.
Karena keterbatasan MaxCompute (ODPS), konkurensi maksimum pengiriman data adalah 64 operasi tulis. Throughput maksimum untuk satu partisi adalah 10 MB/s.
Prosedur
Masuk ke Konsol Simple Log Service.
Pada bagian Projects, klik proyek yang diinginkan.
Pada tab , klik ikon > di sebelah kiri penyimpanan log target, lalu pilih .
Arahkan pointer ke MaxCompute (ODPS) dan klik ikon +.
Pada panel Data Shipping to MaxCompute, konfigurasikan parameter berikut dan klik OK.
Setelah Anda membuat pekerjaan pengiriman data, pekerjaan baru biasanya mulai mengirimkan data ke MaxCompute dalam waktu sekitar 10 menit. Anda kemudian dapat melakukan kueri terhadap data tersebut di MaxCompute (ODPS). Untuk informasi selengkapnya, lihat Bagaimana cara memeriksa integritas data setelah dikirim dari Layanan 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
Untuk mengirimkan log dari Layanan Log (SLS) ke tabel MaxCompute (ODPS), Anda harus memetakan model data kedua layanan tersebut. Bagian berikut menjelaskan aturan pemetaan dan memberikan contohnya.
Tabel MaxCompute (ODPS) harus berisi minimal satu kolom data dan satu kolom kunci partisi.
Kami menyarankan Anda menggunakan field-field reservasi Layanan Log (SLS) berikut: __partition_time__, __source__, dan __topic__.
Tabel MaxCompute (ODPS) dapat memiliki maksimal 60.000 partisi. Jika batas ini terlampaui, data tidak dapat ditulis ke tabel tersebut.
Field reservasi sistem __extract_others__ sebelumnya bernama _extract_others_. Nama lama masih didukung demi kompatibilitas.
Nilai kolom kunci partisi MaxCompute (ODPS) tidak boleh berupa kata reservasi atau kata kunci MaxCompute (ODPS). Untuk informasi selengkapnya, lihat Kata reservasi dan kata kunci.
Partisi dalam tabel partisi MaxCompute (ODPS) tidak boleh kosong. Anda harus memetakan field tertentu, seperti field reservasi sistem atau field log, ke kolom kunci partisi. Nilai field yang dipetakan tersebut tidak boleh kosong atau null. Jika field log bertipe string, nilainya harus dapat dikonversi ke tipe data kolom kunci partisi. Jika konversi gagal dan menghasilkan kunci partisi kosong, sistem akan membuang log tersebut selama pengiriman.
Di Layanan Log (SLS), satu field log hanya dapat dipetakan ke satu kolom di tabel MaxCompute (ODPS), baik itu kolom data maupun kolom kunci partisi. Redundansi field tidak didukung.
Tabel berikut menunjukkan contoh hubungan pemetaan antara kolom MaxCompute (ODPS) dan field Layanan Log (SLS). Untuk informasi selengkapnya tentang field reservasi Layanan Log (SLS), lihat Field reservasi.
Tipe kolom MaxCompute | Nama kolom (MaxCompute) | Tipe data (MaxCompute) | Nama field log (Layanan Log) | Tipe field (Layanan Log) | Deskripsi |
Kolom data | log_source | string | __source__ | Field reservasi | Sumber log. |
log_time | bigint | __time__ | Field reservasi | Waktu log dalam format Unix timestamp. Ini sesuai dengan field time dalam model data. | |
log_topic | string | __topic__ | Bidang yang Dicadangkan | Topik log. | |
time | string | time | Field log | Field yang diurai dari konten log, sesuai dengan pasangan kunci-nilai dalam model data. Dalam banyak kasus, nilai field | |
ip | string | ip | Bidang log | Field yang diurai dari konten log. | |
thread | string | thread | Bidang Log | Field yang diurai dari konten log. | |
log_extract_others | string | __extract_others__ | Bidang yang Dicadangkan | Sistem melakukan serialisasi field log lain yang tidak dipetakan ke objek JSON key-value datar. Objek JSON bersarang tidak didukung. | |
Kolom kunci partisi | log_partition_time | string | __partition_time__ | Bidang yang Dicadangkan | Layanan Log (SLS) menghitung nilai ini dari field __time__ log lalu menyelaraskannya. Granularitas partisi dapat dikonfigurasi. |
status | string | status | Bidang log | Field yang diurai dari konten log. Nilai field ini dapat dienumerasi untuk memastikan jumlah partisi tidak melebihi batas. |
Format partisi waktu
Pengiriman data MaxCompute (versi baru) mendukung dua format partisi waktu: StrfTimeFormat dan SimpleDateFormat. Format partisi waktu hanya berlaku ketika field di kolom kunci partisi MaxCompute diatur ke __receive_time__ atau __partition_time__.
StrfTimeFormat
strftime adalah fungsi pustaka standar UNIX C yang memformat tanggal dan waktu. Fungsi ini menggunakan kode format yang diawali karakter % untuk mengonversi partisi waktu menjadi string. Misalnya, %Y_%m_%d merepresentasikan tahun, bulan, dan hari.
Jika Anda membuat pekerjaan pengiriman data MaxCompute (ODPS) baru, Anda harus menggunakan 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
Format waktu dalam sintaks SimpleDateFormat Java, seperti yyyy-MM-dd HH:mm. Untuk informasi selengkapnya, lihat Class SimpleDateFormat.
SimpleDateFormat didukung demi kompatibilitas mundur saat migrasi dari versi lama. Untuk tugas MaxCompute baru, gunakan StrfTimeFormat.
Tugas migrasi lama mendukung format partisi berikut:
Format waktu partisi | 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
Direkomendasikan untuk menggunakan __receive_time__ sebagai bidang partisi. Jika persyaratan bisnis mewajibkan partisi yang ketat berdasarkan waktu log, __partition_time__ dapat digunakan sebagai gantinya; namun, Anda harus secara eksplisit menerima risiko terkait, termasuk data yang datang terlambat menimpa partisi yang lebih lama, penulisan timestamp anomali ke partisi mendatang, dan keterlambatan dalam kelengkapan partisi.
Field __partition_time__
Cara umum untuk memfilter data di MaxCompute adalah dengan menggunakan waktu log sebagai kolom kunci partisi.
Format
Field __partition_time__ diturunkan dari field __time__ di Layanan Log (SLS). Field ini menghasilkan string waktu berdasarkan zona waktu dan format waktu partisi. Untuk menghindari melebihi batas partisi untuk satu tabel MaxCompute, nilai kunci partisi tanggal disejajarkan ke interval 1800 detik (setengah jam).
Misalnya, jika waktu log di Layanan Log adalah 27/Jan/2022 20:50:13 +0800, SLS menghitung field reservasi __time__ sebagai 1643287813 (Unix timestamp). Tabel berikut menunjukkan nilai kolom kunci partisi waktu untuk konfigurasi yang berbeda.
Format waktu partisi
__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
Menggunakan __partition_time__ untuk memfilter data menghindari pemindaian seluruh tabel. Misalnya, untuk mengkueri data log tanggal 26 Desember 2024:
select * from {ODPS_TABLE_NAME} where log_partition_time >= "2024_12_26" and log_partition_time < "2024_12_27";
Field
__receive_time__Cara umum untuk memfilter data di MaxCompute adalah dengan menggunakan waktu kedatangan log sebagai kolom kunci partisi.
Format
Format waktu partisi
__receive_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
Field __extract_others__ dan __extract_others_all__
Field __extract_others__ berisi semua field log yang tidak dipetakan, kecuali __topic__, __tag__:*, dan __source__.
Field __extract_others_all__ berisi semua field log yang tidak dipetakan, termasuk __topic__, __tag__:*, dan __source__.
untuk membukanya.