Pemicu Simple Log Service (SLS) mengintegrasikan SLS dengan Function Compute dengan memanggil fungsi secara otomatis ketika log baru dihasilkan. Gunakan pemicu SLS untuk mengonsumsi data dalam Logstore SLS secara inkremental dan menjalankan tugas pemrosesan kustom.
Kasus penggunaan
Pembersihan dan pemrosesan data
Gunakan SLS untuk mengumpulkan, memproses, mengkueri, dan menganalisis log secara cepat.
Pengiriman data
Kirimkan data log ke destinasi seperti produk data besar di cloud atau layanan pihak ketiga, serta bangun pipa data di antara mereka.
Cara kerja
Pemicu SLS berkorespondensi dengan satu pekerjaan ETL SLS di Function Compute. Setelah Anda membuat pekerjaan ETL SLS, SLS memulai pengatur waktu berdasarkan konfigurasi pekerjaan tersebut. Pengatur waktu melakukan polling informasi shard di Logstore. Ketika data baru ditulis, SLS menghasilkan triplet <shard_id, begin_cursor, end_cursor> sebagai event fungsi dan memanggil 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 tambahan tanpa data. Anda dapat menggunakan cursor dalam fungsi untuk mencoba mendapatkan data shard tersebut. Jika tidak ada data yang dikembalikan, pemanggilan tersebut merupakan pemicu kosong dan dapat diabaikan dalam fungsi. Untuk informasi lebih lanjut, lihat Panduan pengembangan fungsi kustom.
Mekanisme pemicu berbasis waktu. Misalnya, jika Anda mengatur interval pemicu pekerjaan ETL menjadi 60 detik dan data terus-menerus ditulis ke Shard0 Logstore, shard tersebut memicu pemanggilan fungsi setiap 60 detik. Jika tidak ada data baru yang ditulis ke shard tersebut, tidak ada pemanggilan yang dipicu. Input setiap pemanggilan adalah rentang cursor dari 60 detik terakhir. Di dalam fungsi, Anda dapat membaca data Shard0 berdasarkan cursor tersebut untuk pemrosesan lebih lanjut.
Frekuensi pemicu memiliki karakteristik berikut:
Setiap shard dipicu secara terpisah. Jumlah total pemanggilan yang Anda lihat untuk sebuah Logstore mungkin tinggi, tetapi waktu pemicu aktual setiap shard tetap sesuai dengan interval yang dikonfigurasi. Misalnya, jika sebuah Logstore memiliki 10 shard, pemrosesan data real-time tanpa penundaan pemicu menghasilkan 10 pemanggilan fungsi setiap 60 detik.
Interval pemicu satu shard sama dengan rentang waktu data yang diproses setiap kali. Asumsikan interval pemicu adalah 60 detik. Saat fungsi berjalan, interval pemicu masuk ke dua kasus berikut:
Tanpa penundaan pemicu: fungsi dipicu setiap 60 detik sesuai jadwal, dan rentang data yang diproses adalah
[now -60s, now).Penundaan pemicu, yang terjadi ketika posisi pemrosesan saat ini pada shard SLS tertinggal lebih dari 10 detik dari data terbaru yang ditulis: pemicu mengejar ketinggalan dan mungkin aktif sekali setiap 2 detik. Setiap pemanggilan tetap memproses jendela 60 detik.
Fungsi pemrosesan data
Fungsi yang dipanggil oleh pemicu SLS dapat berupa salah satu jenis berikut:
Fungsi templat
Untuk informasi lebih lanjut, lihat aliyun-log-fc-functions.
Fungsi kustom
Format konfigurasi bergantung pada cara Anda mengimplementasikan fungsi tersebut. Untuk informasi lebih lanjut, lihat Panduan pengembangan fungsi ETL.
Prasyarat
Function Compute
Simple Log Service (SLS)
Buat satu Project dan dua Logstore. Satu Logstore menyimpan log yang dikumpulkan. Function Compute dipicu oleh log inkremental, jadi pastikan log dapat terus-menerus dikumpulkan ke Logstore ini. Logstore lainnya menyimpan log yang dihasilkan oleh pemicu SLS.
Langkah 1: Buat pemicu SLS
Anda dapat mengonfigurasi pemicu SLS yang secara berkala memperoleh data terbaru dan memanggil fungsi untuk mengonsumsi data dalam Logstore SLS secara inkremental. Di dalam fungsi, Anda menjalankan tugas pemrosesan kustom, seperti pembersihan dan pemrosesan data, serta mengirimkan data ke layanan pihak ketiga. Contoh ini hanya menunjukkan cara memperoleh data log dan mencetaknya. Fungsi yang digunakan untuk pemrosesan data dapat berupa templat yang disediakan oleh SLS atau fungsi kustom. Langkah-langkah berikut menggunakan fungsi kustom.
Login ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih Functions > Functions.
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang ingin Anda kelola.
Di halaman Function Details, klik tab Trigger lalu klik Create Trigger. Di panel Create Trigger, atur Trigger Type menjadi Log Service, konfigurasi parameter lainnya, lalu klik OK.
| Parameter | Deskripsi | Contoh |
| Name | Nama kustom untuk pemicu. Jika Anda membiarkan parameter ini kosong, Function Compute akan menghasilkan nama pemicu secara otomatis. | log_trigger |
| Version or Alias | Nilai default: LATEST. Untuk membuat pemicu untuk versi atau alias lain, alihkan terlebih dahulu ke versi atau alias tersebut di pojok kanan atas halaman Function Details. Untuk pengenalan versi dan alias, lihat Kelola versi dan Kelola alias. | LATEST |
| Log Service Project | Project SLS yang akan dikonsumsi. | aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457**** |
| Logstore | Logstore yang akan dikonsumsi. Pemicu secara berkala berlangganan data di Logstore ini dan mengirimkan data tersebut ke fungsi untuk pemrosesan kustom. | function-log |
| Trigger Interval | Interval pemanggilan fungsi oleh SLS. Nilai valid: [3,600]. Satuan: detik. Nilai default: 60. | 60 |
| Retries | Jumlah maksimum percobaan ulang yang diizinkan untuk satu pemicu. Nilai valid: [0,100]. Nilai default: 3. Catatan Pemanggilan dianggap berhasil ketika | 3 |
| Trigger Log | Pilih Logstore yang sudah ada. Log yang dihasilkan saat SLS memanggil fungsi dicatat di Logstore ini. | function-log2 |
| Invocation Parameters | Untuk meneruskan parameter kustom, konfigurasikan di sini. Nilainya diteruskan ke fungsi sebagai bidang parameter dari event. Nilainya harus berupa string berformat JSON. Nilai default: kosong. | None |
| Role Name | Pilih AliyunLogETLRole. Catatan Jika ini pertama kalinya Anda membuat pemicu jenis ini, klik OK lalu pilih Authorize Now di kotak dialog yang muncul. | AliyunLogETLRole |
Setelah pemicu dibuat, pemicu tersebut muncul di tab Triggers. Untuk memodifikasi atau menghapus pemicu, lihat "Manage Triggers" di Panduan Pengguna Function Compute.
Langkah 2: Konfigurasi izin
Peran fungsi menyediakan izin SLS yang dibutuhkan fungsi Anda saat dipanggil.
Di halaman Function Details, klik tab Configuration. Di bagian Advanced Settings, klik Modify. Di panel Advanced Settings, pilih Function Role.
Jika fungsi Anda hanya membaca data log, Anda dapat menggunakan peran default AliyunFCServerlessDevsRole, yang secara default memiliki izin read-only pada SLS.
Jika fungsi Anda memerlukan izin di luar akses read-only ke SLS, buat peran RAM kustom yang memenuhi dua persyaratan berikut:
a. Saat membuat peran RAM, atur Trusted entity menjadi Cloud Service dan atur Trusted service menjadi Function Compute. Untuk informasi lebih lanjut, lihat Buat peran RAM untuk layanan Alibaba Cloud tepercaya.
b. Berikan peran RAM tersebut izin SLS yang dibutuhkan fungsi Anda. Untuk informasi lebih lanjut, lihat Contoh kebijakan RAM kustom.
Klik Deploy.
Langkah 3: Deploy fungsi dan lihat log yang dicetak
Di tab Code halaman Function Details, tulis kode Anda di editor kode lalu klik Deploy.
Contoh ini mendeploy fungsi Python yang melakukan hal-hal berikut:
Memperoleh informasi event SLS, seperti
endpoint,projectName,logstoreName, danbeginCursor, darievent.Memperoleh informasi kredensial
accessKeyId,accessKeySecret, dansecurityTokendaricontext.Menginisialisasi klien SLS berdasarkan informasi yang diperoleh.
Memperoleh data log pada posisi cursor yang ditentukan dari Logstore sumber.
Anda dapat menggunakan kode contoh berikut sebagai templat awal untuk sebagian besar skenario pemrosesan log.
""" Kode contoh ini terutama melakukan hal-hal berikut: * Mendapatkan informasi terkait pemrosesan SLS dari event * Menginisialisasi klien SLS * Menarik log dari log store sumber """ import logging import json from aliyun.log import LogClient logger = logging.getLogger() def handler(event, context): # Kunci akses dapat diambil melalui context.credentials print("Isi 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 dalam objek event_obj = json.loads(event.decode()) print("Isi dalam entitas event adalah: ", event_obj) # Dapatkan nama project log, nama log store, endpoint sls, cursor awal, cursor akhir, 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 data dari logstore sumber dalam rentang cursor: [begin_cursor, end_cursor) pada contoh ini, yang 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("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'Di halaman Function Details, pilih Logs > Function Logs untuk melihat data terbaru yang diperoleh saat fungsi berjalan. Jika muncul pesan The logging feature is not enabled for the current function., klik Enable.
Anda telah menyelesaikan konfigurasi pemicu SLS. Setelah interval pemicu berlalu dan data baru ditulis ke Logstore sumber, pemicu akan memanggil fungsi, dan log fungsi akan muncul di halaman Function Logs. Anda juga dapat memeriksa Logstore yang Anda tentukan untuk parameter Trigger Log di Langkah 1 untuk memastikan pemicu telah aktif. Untuk men-debug kode di konsol, ikuti langkah-langkah berikut.
(Opsional) Langkah 4: Uji fungsi dengan event simulasi
Di tab Code halaman Function Details, klik ikon
di sebelah kanan 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 event dan konten event, lalu klik OK. Jika Anda membuat event uji baru, kami sarankan Anda memilih templat event Log Service. Untuk informasi lebih lanjut tentang data uji, lihat
eventparameter.Setelah Anda mengonfigurasi event simulasi, klik Test Function.
Setelah pemanggilan selesai, Anda dapat melihat hasilnya di atas tab Code.
Batasan
Jumlah pemicu SLS yang terkait dengan satu Project tidak boleh melebihi lima kali jumlah Logstore yang ada di Project tersebut.
Konfigurasikan tidak lebih dari lima pemicu SLS untuk setiap Logstore. Jika tidak, efisiensi pengiriman data ke Function Compute dapat terpengaruh.
Parameter input
context
Saat Function Compute menjalankan fungsi Anda, sistem meneruskan objek context ke parameter input fungsi context. Objek tersebut berisi informasi tentang pemanggilan, layanan, fungsi, dan lingkungan eksekusi.
Topik ini menggunakan context.credentials untuk memperoleh informasi kredensial. Untuk informasi lebih lanjut tentang bidang yang tersedia, lihat Context.
event
Setelah pemicu SLS aktif, sistem meneruskan data event ke waktu proses. Waktu proses mengonversi event menjadi objek JSON dan meneruskan objek tersebut 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
}| Parameter | Deskripsi |
parameter | Nilai parameter pemanggilan yang Anda tentukan saat membuat pemicu. |
source | Informasi tentang blok log yang dibaca fungsi. Catatan
|
jobName | Nama pekerjaan ETL SLS. Pemicu SLS yang dikonfigurasi untuk fungsi berkorespondensi dengan satu pekerjaan ETL SLS. Parameter ini dihasilkan secara otomatis oleh Function Compute. Anda tidak perlu mengonfigurasinya. |
taskId | Untuk pekerjaan ETL, taskId adalah pengidentifikasi deterministik dari pemanggilan fungsi. Parameter ini dihasilkan secara otomatis oleh Function Compute. Anda tidak perlu mengonfigurasinya. |
cursorTime | Timestamp Unix saat log terakhir tiba di server SLS. Satuan: detik. |
FAQ
Mengapa frekuensi pemanggilan fungsi oleh pemicu SLS kadang lebih tinggi dari yang diharapkan?
Setiap shard dipicu secara terpisah, sehingga jumlah total pemanggilan untuk sebuah Logstore bisa tampak lebih tinggi daripada interval yang dikonfigurasi. Frekuensi pemicu aktual setiap shard tetap sesuai dengan interval tersebut. Untuk detail perilaku frekuensi pemicu, lihat Cara kerja.
denied by sts or ram, action: log:GetCursorOrData, resource: ****
Jika error ini muncul di log fungsi, izin mungkin belum dikonfigurasi untuk fungsi tersebut, atau kebijakan aksesnya salah. Lihat Langkah 2: Konfigurasi izin.
Pemicu SLS tidak memanggil fungsi saat log baru dihasilkan. Apa yang harus saya lakukan?
Periksa hal-hal berikut:
Periksa apakah terdapat perubahan data inkremental di Logstore yang dikonfigurasi untuk tugas pemicu Function Compute. Fungsi dipanggil saat data shard berubah.
Periksa log pemicu dan log jalannya fungsi untuk menemukan pengecualian. Log pemicu disimpan di Logstore yang Anda tentukan untuk parameter Trigger Log di Langkah 1.