Simple Log Service (SLS) terintegrasi dengan Function Compute untuk transformasi data streaming. Konfigurasikan pemicu guna secara berkala mengonsumsi data Logstore inkremental dan menjalankan fungsi transformasi menggunakan templat bawaan atau user-defined function.
Prasyarat
-
Berikan otorisasi kepada SLS untuk memicu eksekusi fungsi melalui Resource Access Authorization.
-
Function Compute
-
Simple Log Service (SLS)
-
Buat satu project dan dua Logstore: satu untuk menyimpan log yang dikumpulkan (pastikan injeksi data berkelanjutan karena Function Compute dipicu oleh data inkremental), dan satu lagi untuk menyimpan log pemicu SLS.
PentingProject dan layanan Function Compute harus berada di wilayah yang sama.
-
Batasan
Jumlah maksimum pemicu SLS yang dapat dikaitkan dengan satu Project adalah lima kali jumlah Logstore dalam Project tersebut. Untuk menghindari penurunan kinerja pengiriman data, konfigurasikan tidak lebih dari lima pemicu SLS per Logstore.
Skenario
-
Pembersihan dan transformasi data
Kumpulkan, transformasikan, kueri, dan analisis log dengan SLS.

-
Skema transfer data
Kirim data ke berbagai tujuan dan bangun pipa data antar produk data besar di cloud.

Fungsi transformasi data
-
Jenis fungsi
-
Fungsi templat
Templat yang tersedia: aliyun-log-fc-functions.
-
Fungsi yang Ditentukan Pengguna
Format konfigurasi bervariasi tergantung implementasi. Lihat Panduan pengembangan fungsi ETL.
-
-
Mekanisme pemicu Function Compute
Setiap tugas pemicu dipetakan ke pemicu Function Compute. SLS memulai pengatur waktu yang melakukan polling informasi shard di Logstore. Saat data baru tiba, SLS menghasilkan triple
<shard_id,begin_cursor,end_cursor>sebagai event fungsi dan memicu eksekusi.CatatanPeningkatan penyimpanan dapat menggeser kursor tanpa adanya data baru, menyebabkan satu pemanggilan kosong tambahan per shard. Tangani hal ini dengan mengambil data menggunakan kursor di dalam fungsi Anda — jika tidak ada data yang dikembalikan, lewati pemanggilan tersebut. Lihat Panduan pengembangan user-defined function.
Pemicu bersifat time-based. Misalnya, dengan interval 60 detik dan penulisan berkelanjutan ke Shard 0, fungsi akan dipicu setiap 60 detik untuk shard tersebut. Shard yang tidak memiliki data baru dilewati. Fungsi menerima rentang kursor dari 60 detik terakhir dan menggunakannya untuk membaca data shard guna diproses.

Langkah 1: Buat pemicu SLS
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada halaman detail fungsi, klik tab Trigger, lalu klik Create Trigger. Di panel Create Trigger, atur Trigger Type menjadi Log Service, konfigurasikan parameter berikut, lalu klik OK.
| Parameter | Deskripsi | Contoh |
|---|---|---|
| Name | Nama kustom untuk pemicu. Jika dibiarkan kosong, Function Compute akan menghasilkannya secara otomatis. | log_trigger |
| Version or Alias | Versi atau alias fungsi tempat pemicu ini dilampirkan. Nilai default: LATEST. Untuk menggunakan versi atau alias lain, alihkan ke versi tersebut di pojok kanan atas halaman detail fungsi sebelum membuat pemicu. Lihat Kelola versi dan Kelola alias. | LATEST |
| Log Service Project | Project SLS tempat data dikonsumsi. | aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457**** |
| Logstore | Logstore yang akan dikonsumsi. Pemicu melakukan polling Logstore ini pada interval yang ditentukan. | function-log |
| Trigger Interval | Frekuensi pemanggilan fungsi oleh SLS, dalam detik. Rentang valid: 3–600. Default: 60. | 60 |
| Retries | Jumlah maksimum percobaan ulang per pemanggilan. Rentang valid: 0–100. Default: 3. Pemanggilan berhasil jika mengembalikan HTTP 200 tanpa UnhandledInvocationError atau HandledInvocationError di header X-Fc-Error-Type. Jika semua percobaan gagal, sistem memasuki fase backoff retry dengan interval yang diperpanjang. Lihat Parameter respons. | 3 |
| Trigger Log | Logstore yang mencatat log eksekusi fungsi untuk pemicu ini. | function-log2 |
| Invocation Parameters | Parameter kustom yang diteruskan ke fungsi sebagai string berformat JSON. Dikirimkan sebagai bidang parameter dalam event. Kosong secara default. | — |
| Role Name | Pilih AliyunLogETLRole. Jika ini pertama kalinya Anda membuat pemicu SLS, klik OK, lalu pilih Authorize Now pada dialog yang muncul. | AliyunLogETLRole |
Setelah pemicu dibuat, pemicu tersebut akan muncul di tab Triggers. Untuk memodifikasi atau menghapus pemicu, lihat Manajemen Pemicu.
Langkah 2: Konfigurasikan izin
Pada halaman detail fungsi, pilih tab Configuration. Di bagian Advanced Settings, klik Modify.
Di panel Advanced Settings, pilih Function Role:
Default role — AliyunFCServerlessDevsRole memberikan akses read-only ke SLS dan mencakup sebagian besar kasus penggunaan.
Custom RAM role — jika fungsi Anda menulis ke SLS atau mengakses layanan lain, buat peran RAM dengan:
Trusted entity: Cloud Service → Function Compute. Lihat Buat peran RAM untuk layanan Alibaba Cloud tepercaya.
Izin: izin SLS yang dibutuhkan fungsi Anda. Lihat Contoh kebijakan RAM kustom.
Klik Deploy.
Langkah 3: Deploy dan lihat log
Pada tab Code, tempel kode fungsi Anda ke editor lalu klik Deploy. Contoh Python berikut membaca data log dari Logstore sumber menggunakan rentang kursor dari event pemicu. Fungsi ini menggunakan kredensial temporary dari
context.credentialsuntuk menginisialisasi klien SLS — tidak perlu hardcode kunci.""" Membaca data log dari Logstore SLS dalam rentang kursor yang disediakan oleh event pemicu. """ import logging import json from aliyun.log import LogClient logger = logging.getLogger() def handler(event, context): # Dapatkan kredensial temporary dari peran eksekusi fungsi. creds = context.credentials access_key_id = creds.access_key_id access_key_secret = creds.access_key_secret security_token = creds.security_token # Uraikan event pemicu. event_obj = json.loads(event.decode()) source = event_obj['source'] endpoint = source['endpoint'] log_project = source['projectName'] log_store = source['logstoreName'] shard_id = source['shardId'] begin_cursor = source['beginCursor'] end_cursor = source['endCursor'] # Inisialisasi klien SLS dengan kredensial temporary. client = LogClient( endpoint=endpoint, accessKeyId=access_key_id, accessKey=access_key_secret, securityToken=security_token ) # Tarik semua kelompok log dalam rentang [begin_cursor, end_cursor). while True: response = client.pull_logs( project_name=log_project, logstore_name=log_store, shard_id=shard_id, cursor=begin_cursor, count=100, end_cursor=end_cursor, compress=False ) log_group_cnt = response.get_loggroup_count() if log_group_cnt == 0: break logger.info("Mendapatkan %d kelompok log dari %s", log_group_cnt, log_store) logger.info(response.get_loggroup_list()) begin_cursor = response.get_next_cursor() return 'success'Pada halaman detail fungsi, buka Logs > Function Logs untuk memverifikasi bahwa fungsi menerima dan memproses data. Jika muncul pesan "The logging feature is not enabled for the current function.", klik Enable.
(Opsional) Langkah 4: Uji dengan event simulasi
Pada tab Code, klik ikon
di samping Test Function dan pilih Configure Test Parameters.Di panel Configure Test Parameters, pilih Create New Test Event atau Modify Existing Test Event. Pilih templat Log Service, masukkan nama event, lalu klik OK.
Klik Test Function. Setelah eksekusi selesai, lihat hasilnya di atas tab Code.
event parameter
Saat pemicu aktif, SLS meneruskan objek JSON berikut ke parameter event fungsi:
{
"parameter": {},
"source": {
"endpoint": "http://cn-hangzhou-intranet.log.aliyuncs.com",
"projectName": "fc-test-project",
"logstoreName": "fc-test-logstore",
"shardId": 0,
"beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
"endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
},
"jobName": "1f7043ced683de1a4e3d8d70b5a412843d81****",
"taskId": "c2691505-38da-4d1b-998a-f1d4bb8c****",
"cursorTime": 1529486425
}Bidang yang dapat dikonfigurasi pengguna
| Bidang | Deskripsi |
|---|---|
parameter | Nilai Invocation Parameters yang Anda tentukan saat membuat pemicu. Kosong secara default. |
Bidang sumber (blok log yang dibaca fungsi Anda)
| Bidang | Deskripsi |
|---|---|
source.endpoint | Titik akhir wilayah Project SLS. |
source.projectName | Nama Project SLS. |
source.logstoreName | Nama Logstore yang dikonsumsi pemicu. |
source.shardId | Shard spesifik dalam Logstore. |
source.beginCursor | Posisi awal konsumsi data (inklusif). |
source.endCursor | Posisi akhir konsumsi data (eksklusif). |
Bidang yang dihasilkan sistem (diisi otomatis oleh Function Compute, tidak perlu dikonfigurasi)
| Bidang | Deskripsi |
|---|---|
jobName | Nama pekerjaan SLS ETL yang sesuai dengan pemicu ini. |
taskId | Identifikasi deterministik untuk pemanggilan fungsi spesifik ini. |
cursorTime | Timestamp Unix (dalam detik) saat log terakhir tiba di server SLS. |
Saat debugging, gunakan API GetCursor by time untuk mendapatkan nilai beginCursor dan endCursor, lalu buat event uji berdasarkan contoh di atas.
Operasi terkait
-
Kueri log pemicu
Untuk melihat statistik eksekusi pemicu, buat indeks pada Logstore log pemicu. Lihat Buat indeks.
-
Lihat log eksekusi fungsi
Gunakan CLI untuk memeriksa detail eksekusi fungsi. Lihat Lihat log pemanggilan.
FAQ
Pemicu SLS tidak memanggil fungsi
Periksa apakah data baru sedang ditulis ke Logstore yang dikonfigurasi — pemicu hanya aktif saat data shard berubah. Jika data mengalir, periksa log pemicu dan log eksekusi fungsi untuk pesan error.
Mengapa jumlah pemanggilan tinggi?
Setiap shard memicu secara independen. Logstore dengan 10 shard menghasilkan 10 pemanggilan per interval selama operasi normal. Jika pemicu mengejar ketinggalan setelah penundaan (saat pemrosesan tertinggal lebih dari 10 detik), pemicu akan mempercepat menjadi sekitar satu pemanggilan setiap 2 detik per shard hingga berhasil mengejar ketinggalan.
Error: "denied by sts or ram"
Peran fungsi tidak memiliki izin SLS yang diperlukan. Tinjau dan perbarui peran seperti dijelaskan dalam Langkah 2: Konfigurasikan izin.