Saat menggunakan Function Compute untuk memproses data log, Anda dapat memilih antara templat fungsi yang disediakan oleh Log Service atau fungsi kustom buatan sendiri. Topik ini menjelaskan cara membuat fungsi kustom.
Event fungsi
Saat menggunakan Function Compute untuk memproses data log, Anda harus mengonfigurasi parameter masukan fungsi (event fungsi) pada Langkah 2. Event tersebut berupa string JSON yang telah diserialisasi.
-
Parameter
Parameter
Deskripsi
jobName
Nama pekerjaan ETL Log Service. Setiap pemicu Log Service di Function Compute berkorespondensi dengan satu pekerjaan ETL di Log Service.
taskId
Untuk suatu pekerjaan ETL,
taskIdsecara unik mengidentifikasi pemanggilan fungsi tertentu.cursorTime
Stempel waktu UNIX saat catatan log terakhir dalam pemanggilan fungsi saat ini tiba di server Log Service.
source
Bidang ini dihasilkan oleh Log Service. Log Service secara berkala memicu eksekusi fungsi berdasarkan interval tugas yang ditentukan dalam pekerjaan ETL. Bidang
sourcemerupakan komponen penting dari event fungsi dan menentukan cakupan konsumsi data untuk pemanggilan fungsi saat ini.-
endpoint: Titik akhir untuk wilayah tempat Proyek berada. Untuk informasi selengkapnya, lihat Endpoints.
-
projectName: Nama Proyek.
-
logstoreName: Nama LogStore.
-
shardId: Shard tertentu dalam LogStore.
-
beginCursor: Posisi awal untuk konsumsi data dalam shard.
-
endCursor: Posisi akhir untuk konsumsi data dalam shard.
CatatanRentang data
[beginCursor, endCursor)bersifat inklusif terhadapbeginCursordan eksklusif terhadapendCursor.
parameter
Objek JSON yang Anda atur di bagian Function Configurations saat membuat pemicu. Fungsi ETL Log Service kustom Anda dapat mengurai bidang ini saat runtime untuk memperoleh parameter yang diperlukan. Untuk informasi selengkapnya, lihat Pemicu Log Service.
-
-
Contoh
{ "source": { "endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com", "projectName": "fc-****************", "logstoreName": "demo", "shardId": 0, "beginCursor": "MTUwNTM5MDI3NTY1ODcwNzU2Ng==", "endCursor": "MTUwNTM5MDI3NTY1ODcwNzU2OA==" }, "parameter": { ... }, "jobName": "fedad35f51a2a97b466da57fd71f315f539d2234", "taskId": "9bc06c96-e364-4f41-85eb-b6e579214ae4", "cursorTime": 1511429883 }Saat melakukan debug fungsi, Anda dapat memanggil operasi GetCursorByTime untuk memperoleh cursor dan membuat event fungsi guna pengujian berdasarkan contoh di atas.
Pengembangan fungsi
Anda dapat mengembangkan fungsi dalam berbagai bahasa, seperti Java, Python, dan Node.js. Log Service menyediakan SDK untuk runtime terkait guna menyederhanakan integrasi. Untuk informasi selengkapnya, lihat Referensi SDK.
Bagian berikut menggunakan runtime Java 8 untuk menunjukkan cara mengembangkan fungsi ETL Log Service. Untuk informasi lebih lanjut tentang pemrograman fungsi dalam Java 8, lihat Panduan pemrograman Function Compute Java.
-
Templat fungsi Java
Log Service menyediakan templat data kustom berbasis runtime Java 8. Anda dapat menyesuaikan templat ini sesuai kebutuhan.
Templat ini mengimplementasikan fitur-fitur berikut:
-
Mengurai bidang
source,taskId, danjobNamedari event fungsi. -
Mengambil data dari sumber menggunakan Log Service Java SDK dan memanggil antarmuka
processDatauntuk memproses setiap batch data.
Anda harus mengimplementasikan hal-hal berikut dalam templat:
-
Mengurai bidang
parameterdari event fungsi. Implementasikan logika ini dalamUserDefinedFunctionParameter.java. -
Mengimplementasikan logika pemrosesan data Anda dalam antarmuka
processDatapadaUserDefinedFunction.java. -
Ganti
UserDefinedFunctiondengan nama deskriptif untuk fungsi Anda.
-
-
Mengimplementasikan antarmuka processData
Dalam antarmuka
processData, Anda dapat mengonsumsi, mentransformasi, dan mengirimkan batch data. Sebagai contoh, sampel LogStoreReplication membaca data dari satu LogStore dan menulisnya ke LogStore lain.Catatan-
Jika
processDataberhasil memproses data, fungsi tersebut mengembalikan nilaitrue. Jika terjadi error yang tidak dapat diulang, fungsi tersebut mengembalikan nilaifalse. Dalam kasus terakhir ini, fungsi tetap berjalan, dan Log Service menganggap tugas ETL berhasil meskipun data yang belum diproses diabaikan. -
Jika terjadi error fatal atau logika bisnis Anda memerlukan penghentian lebih awal, lemparkan exception untuk menghentikan fungsi. Log Service akan mendeteksi kegagalan fungsi tersebut dan memanggil ulang fungsi sesuai kebijakan pengulangan pekerjaan ETL.
-
Jika throughput shard tinggi, atur ukuran memori fungsi yang mencukupi untuk mencegah penghentian tak terduga akibat error Out-of-Memory (OOM).
-
Jika fungsi Anda menjalankan operasi yang memakan waktu lama atau throughput shard tinggi, atur interval pemicu fungsi yang pendek dan timeout eksekusi fungsi yang panjang.
-
Berikan izin yang diperlukan kepada fungsi. Misalnya, jika fungsi perlu menulis data ke OSS, fungsi tersebut harus memiliki izin menulis ke OSS.
-
Log ETL
-
Log penjadwalan ETL
Log penjadwalan mencatat waktu mulai, waktu selesai, dan status keberhasilan pekerjaan ETL, serta informasi apa pun yang dikembalikan saat berhasil. Jika pekerjaan ETL gagal, log error akan dihasilkan dan peringatan dikirim ke administrator sistem. Saat membuat pemicu, tentukan LogStore untuk log-nya, lalu aktifkan dan konfigurasikan indeks untuk LogStore tersebut. Untuk informasi selengkapnya, lihat Membuat indeks.
Fungsi dapat mengembalikan statistik eksekusi. Misalnya, dalam fungsi runtime Java 8, Anda dapat menulis statistik ke
outputStream. Templat fungsi yang disediakan oleh Log Service menulis objek JSON yang telah diserialisasi sebagai string. String ini dicatat dalam log penjadwalan ETL, sehingga memungkinkan analisis statistik dan kueri. -
Log proses ETL
Log ini mencatat checkpoint utama dan informasi error untuk setiap langkah selama eksekusi ETL, termasuk waktu mulai dan selesai langkah, status inisialisasi, serta error modul. Log proses membantu Anda memantau status runtime pekerjaan ETL dan mendiagnosis error dengan cepat.
Gunakan
context.getLogger()untuk menulis log proses dan menyimpannya dalam LogStore tertentu di dalam Proyek Log Service. Kami menyarankan agar Anda mengaktifkan kueri berbasis indeks untuk LogStore ini.