Dengan mengonfigurasi pemicu Simple Log Service (SLS), Anda dapat mengintegrasikan Simple Log Service (SLS) dengan Function Compute. Pemicu SLS secara otomatis mengeksekusi fungsi ketika log baru dihasilkan untuk mengonsumsi data secara inkremental dari Logstore Simple Log Service dan menjalankan tugas pemrosesan kustom.
Kasus penggunaan
Pembersihan dan pemrosesan data
Simple Log Service memungkinkan Anda mengumpulkan, memproses, mengkueri, dan menganalisis log dengan cepat.
Pengiriman data
Fitur ini mendukung pengiriman data ke berbagai tujuan dan membangun pipa data antara produk data besar berbasis cloud.
Fungsi pemrosesan data
Jenis fungsi
Fungsi templat
Untuk informasi selengkapnya, lihat aliyun-log-fc-functions.
Fungsi kustom
Format konfigurasi fungsi bergantung pada implementasi spesifik fungsi tersebut. Untuk informasi selengkapnya, lihat Panduan pengembangan fungsi ETL.
Mekanisme pemicu
Tugas ETL di Simple Log Service berkorespondensi dengan pemicu di Function Compute. Saat Anda membuat tugas ETL, Simple Log Service menjalankan pengatur waktu yang secara periodik melakukan polling informasi shard di Logstore. Ketika data baru ditulis, sistem menghasilkan event sebagai triplet dalam format <shard_id,begin_cursor,end_cursor> dan memicu fungsi tersebut.
Saat sistem penyimpanan ditingkatkan, perubahan cursor dapat terjadi meskipun tidak ada data baru yang ditulis. Dalam kasus ini, setiap shard dipicu satu kali dengan muatan kosong. Tangani hal ini dalam fungsi Anda dengan menarik data dari shard menggunakan cursor tersebut. Jika tidak ada data yang dikembalikan, artinya ini adalah pemicu kosong, dan Anda dapat mengabaikan pemanggilan tersebut. Untuk informasi selengkapnya, lihat Panduan pengembangan fungsi kustom.
Mekanisme pemicu untuk tugas ETL di Simple Log Service bersifat berbasis waktu. Misalnya, jika Anda mengatur interval pemicu untuk tugas ETL menjadi 60 detik dan data terus-menerus ditulis ke shard 0 Logstore, shard tersebut akan memicu eksekusi fungsi setiap 60 detik. Jika tidak ada data baru yang ditulis ke shard tersebut, fungsi tidak akan dipicu. Input fungsi adalah rentang cursor selama 60 detik terakhir. Di dalam fungsi, Anda dapat membaca data dari shard 0 berdasarkan cursor tersebut untuk pemrosesan lebih lanjut.
Batasan
Jumlah maksimum pemicu Simple Log Service yang dapat Anda asosiasikan dengan satu Project adalah lima kali jumlah Logstore dalam Project tersebut.
Kami menyarankan agar Anda mengonfigurasi tidak lebih dari lima pemicu Simple Log Service untuk setiap Logstore. Jika tidak, efisiensi pengiriman data ke Function Compute dapat terpengaruh.
Contoh skenario
Anda dapat mengonfigurasi pemicu Simple Log Service untuk mengambil data yang diperbarui secara periodik dan memanggil fungsi, sehingga memungkinkan Anda mengonsumsi data secara inkremental dari Logstore. Di dalam fungsi, Anda dapat menjalankan tugas kustom seperti pembersihan dan pemrosesan data, serta mengirimkan data tersebut ke layanan pihak ketiga. Contoh ini hanya menunjukkan cara memperoleh dan mencetak data log.
Fungsi yang digunakan untuk pemrosesan data dapat berupa templat yang disediakan oleh Simple Log Service atau fungsi kustom yang Anda buat sendiri.
Prasyarat
Function Compute
Simple Log Service (SLS)
Buat satu Project dan dua Logstore: Logstore sumber untuk log yang dikumpulkan dan Logstore lain untuk log eksekusi pemicu. Anda harus memastikan log terus dikumpulkan karena Function Compute dipicu oleh data baru.
Project Log dan layanan Function Compute harus berada di wilayah yang sama.
Parameter input
eventSaat pemicu Simple Log Service aktif, pemicu tersebut meneruskan objek JSON yang merepresentasikan data event ke parameter input fungsi
event. Formatnya sebagai berikut:{ "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 }Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
parameter
Nilai dari Invocation Parameters yang Anda tentukan saat mengonfigurasi pemicu.
source
Informasi tentang blok log yang akan dibaca oleh fungsi.
endpoint: Wilayah tempat Project Simple Log Service berada.
projectName: Nama Project.
logstoreName: Nama Logstore yang dikonsumsi oleh Function Compute. Pemicu saat ini berlangganan data dari Logstore ini dan mengirimkannya ke layanan fungsi untuk pemrosesan kustom secara berkala.
shardId: Shard tertentu di Logstore.
beginCursor: Posisi awal konsumsi data.
endCursor: Posisi akhir konsumsi data.
CatatanSaat men-debug fungsi, Anda dapat memanggil operasi API GetCursor by time untuk memperoleh beginCursor dan endCursor, lalu membuat event fungsi untuk pengujian berdasarkan contoh di atas.
jobName
Nama tugas ETL Simple Log Service. Pemicu Simple Log Service yang dikonfigurasi untuk suatu fungsi berkorespondensi dengan tugas ETL di Simple Log Service.
Function Compute menghasilkan parameter ini secara otomatis. Tidak diperlukan konfigurasi pengguna.
taskId
Untuk tugas ETL, taskId merupakan pengenal deterministik untuk pemanggilan fungsi.
Function Compute menghasilkan parameter ini secara otomatis. Tidak diperlukan konfigurasi pengguna.
cursorTime
Timestamp Unix, dalam satuan detik, saat log terakhir tiba di server Simple Log Service.
contextSaat Function Compute menjalankan fungsi Anda, sistem meneruskan objek
contextke fungsi tersebut. Objek ini berisi informasi tentang pemanggilan, layanan, fungsi, pelacakan, dan lingkungan eksekusi.Topik ini menggunakan
context.credentialsuntuk memperoleh informasi kunci. Untuk informasi lebih lanjut tentang bidang lainnya, lihat Context.
Langkah 1: Buat pemicu SLS
Login ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Trigger, lalu klik Create Trigger. Di panel Create Trigger, pilih Log Service untuk Trigger Type, konfigurasi parameter lainnya, lalu klik OK.
Parameter
Aksi
Contoh
Name
Masukkan nama kustom untuk pemicu. Jika Anda mengosongkan parameter ini, Function Compute akan menghasilkan nama secara otomatis.
log_trigger
Version or Alias
Nilai default adalah LATEST. Jika Anda ingin membuat pemicu untuk versi atau alias yang berbeda, Anda harus terlebih dahulu beralih ke versi atau alias tersebut di pojok kanan atas halaman detail fungsi. Untuk pengenalan versi dan alias, lihat Kelola versi dan Kelola alias.
LATEST
Log Service Project
Pilih Project Simple Log Service tempat Anda ingin mengonsumsi data.
aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****
Logstore
Pilih Logstore tempat Anda ingin mengonsumsi data. Pemicu secara periodik berlangganan data dari Logstore ini dan mengirimkannya ke layanan fungsi untuk pemrosesan kustom.
function-log
Trigger Interval
Tentukan interval pemanggilan fungsi oleh Simple Log Service.
Nilai valid: 3 hingga 600. Satuan: detik. Nilai default: 60.
60
Retries
Tentukan jumlah maksimum percobaan ulang yang diizinkan untuk satu pemanggilan.
Nilai valid: 0 hingga 100. Nilai default: 3.
CatatanEksekusi yang berhasil adalah eksekusi dengan status 200 dan nilai parameter
X-Fc-Error-Typedi header bukanUnhandledInvocationErroratauHandledInvocationError. Kasus lain menunjukkan eksekusi gagal, yang memicu percobaan ulang. Untuk informasi lebih lanjut tentang parameterX-Fc-Error-Type, lihat Parameter respons.Jika eksekusi gagal, sistem melakukan percobaan ulang sesuai konfigurasi Anda. Jika semua percobaan awal gagal, sistem memasuki fase percobaan ulang mundur dengan interval yang diperpanjang.
3
Trigger Log
Pilih Logstore yang telah dibuat. Log dari eksekusi fungsi yang dipicu oleh Simple Log Service dicatat di Logstore ini.
function-log2
Invocation Parameters
Parameter kustom yang akan diteruskan ke fungsi. Nilainya harus berupa string berformat JSON dan diteruskan sebagai bidang parameter dari event.
Parameter ini kosong secara default.
None
Role Name
Pilih AliyunLogETLRole.
CatatanJika Anda membuat jenis pemicu ini untuk pertama kalinya, Anda harus mengklik OK, lalu pilih Authorize Now di kotak dialog berikutnya.
AliyunLogETLRole
Setelah pemicu dibuat, pemicu tersebut muncul di daftar Trigger Name. Untuk mengubah atau menghapus pemicu, lihat Kelola pemicu.
Langkah 2: Konfigurasi izin
Di halaman Function Details, pilih tab Configuration. Di bagian Advanced Settings, klik Modify. Di panel Advanced Settings, pilih Function Role.
Anda dapat menggunakan role default AliyunFCServerlessDevsRole, yang secara default memiliki izin read-only pada Simple Log Service.
Anda juga dapat menyesuaikan peran RAM. Peran RAM kustom harus memenuhi dua persyaratan berikut:
Saat membuat peran RAM, pilih {key, select, RAM {Cloud Account} Service {Cloud Service} Federated {Identity Provider} Account {Cloud Account} CurrentAccount {Current Account} OtherAccount {Other Account} AllAccounts {All Accounts} RAMType {Identity Type} UserName {User Name} RoleName {Role Name} FederatedType {Identity Provider Type} other { {key} } } sebagai trusted entity dan pilih Function Compute sebagai trusted service. Untuk informasi selengkapnya, lihat Buat peran RAM untuk layanan Alibaba Cloud tepercaya.
Berikan izin Simple Log Service yang diperlukan ke peran RAM sesuai kebutuhan spesifik fungsi. Untuk informasi selengkapnya, lihat Contoh kebijakan RAM kustom.
Setelah selesai, klik Deploy.
Langkah 3: Deploy dan lihat log
Di tab Code halaman detail fungsi, masukkan kode Anda di editor kode, lalu klik Deploy.
Contoh ini mendeploy fungsi Python yang melakukan tindakan berikut:
Memperoleh informasi pemicu event Simple Log Service, seperti
endpoint,projectName,logstoreName, danbeginCursor, dari parameterevent.Memperoleh informasi otorisasi, seperti
accessKeyId,accessKey, dansecurityToken, dari parametercontext.Menginisialisasi klien SLS berdasarkan informasi yang diperoleh.
Memperoleh data log dari Logstore sumber pada posisi cursor yang ditentukan.
CatatanKode contoh berikut dapat digunakan sebagai templat untuk mengekstraksi sebagian besar log logis.
""" Kode contoh ini menunjukkan cara melakukan tindakan berikut: * Mengurai informasi pemicu event SLS dari event. * Menginisialisasi klien SLS berdasarkan informasi yang diperoleh. * Menarik data log waktu nyata dari Logstore sumber. """ #!/usr/bin/env python # -*- coding: utf-8 -*- import logging import json import os from aliyun.log import LogClient logger = logging.getLogger() def handler(event, context): # Kunci akses dapat diambil melalui context.credentials. print("Konten dalam entitas context adalah: ", context) creds = context.credentials access_key_id = creds.access_key_id access_key_secret = creds.access_key_secret security_token = creds.security_token # Uraikan event menjadi objek. event_obj = json.loads(event.decode()) print("Konten dalam entitas event adalah: ", event_obj) # Dapatkan nama Project, nama Logstore, endpoint SLS, beginCursor, endCursor, dan shardId dari event.source. source = event_obj['source'] log_project = source['projectName'] log_store = source['logstoreName'] endpoint = source['endpoint'] begin_cursor = source['beginCursor'] end_cursor = source['endCursor'] shard_id = source['shardId'] # Inisialisasi klien SLS. client = LogClient(endpoint=endpoint, accessKeyId=access_key_id, accessKey=access_key_secret, securityToken=security_token) # Baca log dari Logstore sumber dalam rentang cursor [begin_cursor, end_cursor). Dalam contoh ini, rentang tersebut berisi semua log yang memicu pemanggilan. 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("get %d log group from %s" % (log_group_cnt, log_store)) logger.info(response.get_loggroup_list()) begin_cursor = response.get_next_cursor() return 'success'Di halaman Function Details, pilih untuk melihat data terbaru yang diperoleh saat fungsi dijalankan. Jika muncul pesan "The logging feature is not enabled for the current function.", klik Enable.
Anda telah menyelesaikan konfigurasi pemicu Simple Log Service. Untuk men-debug kode di konsol, ikuti langkah-langkah berikut.
(Opsional) Langkah 4: Uji dengan event simulasi
Di tab Code halaman detail fungsi, klik ikon
di samping Test Function dan pilih Configure Test Parameters dari daftar drop-down.Di panel Configure Test Parameters, pilih Create New Test Event atau Modify Existing Test Event, masukkan nama dan konten event, lalu klik OK. Jika Anda membuat event uji baru, kami menyarankan agar Anda memilih templat Log Service. Untuk informasi lebih lanjut tentang cara mengonfigurasi data uji, lihat event.
Setelah event simulasi dikonfigurasi, klik Test Function.
Setelah eksekusi selesai, Anda dapat melihat hasil eksekusi di atas tab Code.
FAQ
Pemecahan Masalah: Pemicu SLS gagal memanggil
Anda dapat memecahkan masalah ini dengan memeriksa hal berikut:
Pastikan data baru tersedia di Logstore yang dikonfigurasi untuk pemicu. Fungsi dipicu ketika data shard berubah.
Periksa log pemicu dan log eksekusi fungsi untuk menemukan pengecualian apa pun.
Mengapa frekuensi pemanggilan tinggi?
Setiap shard dipicu secara terpisah. Anda mungkin mengamati jumlah pemicu keseluruhan yang tinggi untuk suatu Logstore, tetapi pemicu untuk setiap shard tetap terjadi dalam interval yang ditentukan.
Interval pemicu untuk satu shard dan rentang data yang diproses setiap kali (interval waktu) sama. Interval pemicu jatuh ke dalam dua skenario selama eksekusi fungsi. Asumsikan interval pemicu adalah 60 detik.
Tidak ada penundaan pemicu: Fungsi dipicu secara periodik sesuai pengaturan, sekali setiap 60 detik, memproses data dalam rentang
[now -60s, now).CatatanPemicu fungsi bersifat independen untuk setiap shard. Misalkan Logstore memiliki 10 shard, selama pemrosesan data waktu nyata (tanpa penundaan pemicu), akan terjadi 10 pemanggilan fungsi setiap 60 detik.
Terjadi penundaan pemicu (ketika posisi pemrosesan saat ini di shard Simple Log Service tertinggal dari data terbaru yang ditulis lebih dari 10 detik): Pemicu dipercepat untuk mengejar ketinggalan, berpotensi mengurangi interval hingga 2 detik per pemicu sambil terus memproses data dalam jendela 60 detik.
Error: "denied by sts or ram"
Jika error ini muncul di log fungsi, kemungkinan karena fungsi belum dikonfigurasi dengan izin yang diperlukan, atau kebijakan izin diatur salah. Untuk informasi selengkapnya, lihat Langkah 2: Konfigurasi izin.