Ketika menggunakan Function Compute untuk mengonsumsi data log, Anda dapat memanfaatkan template fungsi yang disediakan oleh Simple Log Service atau membuat fungsi kustom. Topik ini menjelaskan cara membuat fungsi kustom.
Event
Sebuah event dari suatu fungsi adalah string terdeserialisasi dari objek JSON. Event tersebut mencakup parameter yang digunakan untuk menjalankan fungsi. Untuk informasi lebih lanjut, lihat Gunakan Function Compute untuk Mengonsumsi Data Log.
Parameter:
Parameter
Deskripsi
jobName
Nama pekerjaan extract, transform, load (ETL) di Log Service. Pekerjaan ETL di Log Service berfungsi sebagai pemicu di Function Compute.
taskId
Pengenal pemanggilan fungsi dalam pekerjaan ETL.
cursorTime
Timestamp UNIX dari entri log terakhir yang diterima oleh Log Service dalam pemanggilan fungsi.
source
Rentang data yang dapat dikonsumsi dalam pemanggilan fungsi. Nilai parameter ini dihasilkan secara berkala oleh Log Service untuk setiap pemanggilan fungsi.
endpoint: Titik akhir wilayah tempat proyek berada. Untuk informasi lebih lanjut, lihat Titik Akhir.
projectName: nama Proyek.
logstoreName: nama penyimpanan log.
shardId: ID shard di penyimpanan log.
beginCursor: posisi dari mana Function Compute mulai mengonsumsi data di shard tertentu.
endCursor: posisi di mana Function Compute berhenti mengonsumsi data di shard yang ditentukan.
CatatanInterval konsumsi bersifat tertutup di sisi kiri dan terbuka di sisi kanan, dalam format [beginCursor,endCursor).
parameter
Nilai parameter Function Configuration yang Anda tentukan saat membuat pemicu. Nilainya adalah objek JSON. Jika fungsi ETL kustom dipanggil, bidang ini akan diurai. Untuk informasi lebih lanjut, lihat Pemicu Layanan Log Sederhana.
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 }Untuk men-debug fungsi kustom, Anda dapat memanggil operasi GetCursor untuk mendapatkan cursor. Kemudian, buat event dalam format sebelumnya untuk men-debug fungsi tersebut.
Pengembangan fungsi
Simple Log Service menyediakan SDK lingkungan runtime dalam berbagai bahasa pemrograman seperti Java, Python, dan Node.js. Anda dapat menggunakan SDK tersebut untuk mengembangkan fungsi kustom. Untuk informasi lebih lanjut, lihat Referensi SDK.
Dalam contoh berikut, Java Runtime Environment 8 (JRE 8) digunakan untuk menggambarkan cara mengembangkan fungsi ETL untuk Simple Log Service. Untuk informasi lebih lanjut tentang pengembangan fungsi di JRE 8, lihat Panduan Pemrograman Java untuk Function Compute.
Template Fungsi Java:
Simple Log Service menyediakan template fungsi kustom berbasis JRE 8. Anda dapat menggunakan template tersebut untuk mengembangkan fungsi. Untuk informasi lebih lanjut, lihat Template Fungsi Kustom.
Template fungsi memiliki fitur-fitur berikut:
Mengurai bidang source, taskId, dan jobName dari event.
Menggunakan Simple Log Service SDK untuk Java untuk mendapatkan data berdasarkan parameter source dari event dan memanggil metode processData untuk memproses data. Untuk informasi lebih lanjut, lihat Simple Log Service SDK untuk Java.
Anda juga dapat menggunakan template untuk melakukan operasi berikut:
Menggunakan file
UserDefinedFunctionParameter.javauntuk mengurai bidang parameter dari event.Menggunakan metode processData dalam file
UserDefinedFunction.javauntuk mendefinisikan logika bisnis.Ganti
UserDefinedFunctiondengan nama yang membantu Anda mengidentifikasi fungsi ETL.
Metode processData:
Anda dapat menggunakan metode processData untuk mengonsumsi, mentransformasi, dan mengirimkan data. Sebagai contoh, dalam file LogstoreReplication.java, metode ini digunakan untuk membaca data dari penyimpanan log dan menulis data ke penyimpanan log lain.
CatatanJika data diproses menggunakan metode processData, nilai true dikembalikan. Jika data gagal diproses menggunakan metode processData, nilai false dikembalikan. Jika false dikembalikan, fungsi ETL tetap berjalan dan Simple Log Service menganggap bahwa tugas ETL berhasil. Data pengecualian diabaikan.
Jika kesalahan serius atau pengecualian logika dikembalikan menggunakan metode throw Exception, fungsi ETL berhenti berjalan. Dalam hal ini, Simple Log Service menganggap bahwa pengecualian terjadi pada fungsi ETL dan memanggil ulang fungsi berdasarkan aturan yang ditetapkan dalam pekerjaan ETL terkait.
Jika data ditulis ke atau dibaca dari shard dengan kecepatan tinggi, alokasikan sumber daya memori yang cukup untuk menjalankan fungsi. Dengan cara ini, kesalahan kehabisan memori (OOM) tidak terjadi saat fungsi sedang berjalan.
Jika eksekusi fungsi memakan waktu lama atau data ditulis ke atau dibaca dari shard dengan kecepatan tinggi, tentukan interval panggilan pendek dan periode timeout panjang untuk fungsi tersebut.
Berikan izin yang diperlukan kepada Function Compute. Sebagai contoh, jika Function Compute perlu menulis data ke Object Storage Service (OSS), Anda harus memberikan izin tulis pada OSS kepada Function Compute.
Log ETL
Log Penjadwalan ETL:
Log penjadwalan ETL mencatat waktu mulai dan waktu akhir tugas ETL, apakah tugas berhasil, serta informasi yang dikembalikan ketika tugas berhasil. Jika terjadi kesalahan, entri log kesalahan ETL dihasilkan dan email atau pesan teks dikirim untuk memberi tahu administrator sistem. Saat membuat pemicu, tentukan penyimpanan log untuk menyimpan log pemicu, aktifkan fitur pengindeksan, dan konfigurasikan indeks untuk penyimpanan log. Untuk informasi lebih lanjut, lihat Buat Indeks.
Anda dapat menggunakan fungsi untuk mendapatkan hasil eksekusi fungsi ETL. Sebagai contoh, Anda dapat menggunakan fungsi
outputStreamuntuk mendapatkan hasil eksekusi fungsi ETL berbasis JRE 8. Hasil eksekusi fungsi ETL yang dikembangkan berdasarkan template fungsi Simple Log Service adalah string yang diserialisasi dari objek JSON. String ini dicatat dalam log penjadwalan ETL. Anda dapat mencari dan menganalisis string tersebut.Log Pemrosesan ETL:
Log pemrosesan ETL mencatat informasi utama dan kesalahan dari setiap langkah eksekusi. Log tersebut mencatat waktu mulai, waktu akhir, status inisialisasi, dan kesalahan dari setiap langkah. Anda dapat memantau eksekusi fungsi ETL dan menemukan kesalahan berdasarkan log pemrosesan sesegera mungkin.
Anda dapat menggunakan metode
context.getLogger()untuk mencatat log pemrosesan ETL dan menyimpan log tersebut di penyimpanan log proyek tertentu. Kami sarankan Anda mengaktifkan fitur pengindeksan untuk penyimpanan log.