Layanan Log Sederhana memungkinkan Anda menggunakan Function Compute untuk mentransformasi data streaming. Anda dapat mengonfigurasi pemicu Function Compute untuk mendeteksi pembaruan data dan memanggil fungsi, sehingga memungkinkan Anda mengonsumsi serta mentransformasi data tambahan dalam Logstore. Anda juga dapat menggunakan fungsi template atau fungsi yang ditentukan pengguna untuk mentransformasi data.
Prasyarat
Layanan Log Sederhana diizinkan untuk memanggil fungsi. Anda dapat melakukan otorisasi pada halaman Otorisasi Akses Sumber Daya Cloud.
Function Compute
Layanan Log Sederhana
Anda perlu membuat satu Proyek Layanan Log Sederhana dan dua Logstores. Satu Logstore digunakan untuk menyimpan log yang dikumpulkan (Function Compute dipicu berdasarkan log tambahan, sehingga diperlukan pengumpulan log terus-menerus), sedangkan Logstore lainnya digunakan untuk menyimpan log yang dihasilkan oleh pemicu Layanan Log Sederhana.
PentingProyek Layanan Log Sederhana dan layanan Function Compute harus berada dalam wilayah yang sama.
Batasan
Anda dapat mengaitkan maksimal lima kali jumlah Logstores dalam proyek Layanan Log Sederhana dengan proyek tersebut.
Kami menyarankan Anda mengonfigurasi tidak lebih dari lima pemicu Layanan Log Sederhana untuk setiap Logstore. Jika tidak, data mungkin tidak akan dikirim secara efisien ke Function Compute.
Skenario
Pembersihan dan Transformasi Data
Anda dapat menggunakan Layanan Log Sederhana untuk mengumpulkan, mentransformasi, menanyakan, dan menganalisis log secara efisien.

Pengiriman Data
Anda dapat menggunakan Layanan Log Sederhana untuk mengirim data ke tujuan tertentu. Dalam skenario ini, Layanan Log Sederhana berfungsi sebagai saluran data untuk layanan data besar di cloud.

Fungsi transformasi data
Jenis Fungsi
Fungsi Template
Untuk informasi lebih lanjut, lihat aliyun-log-fc-functions.
Fungsi yang Ditentukan Pengguna
Format fungsi terkait dengan implementasi fungsi. Untuk informasi lebih lanjut, lihat Buat Fungsi Kustom.
Mekanisme Pemanggilan Fungsi
Pemicu Function Compute digunakan untuk memanggil fungsi. Setelah Anda membuat pemicu Function Compute untuk Logstore di Layanan Log Sederhana, timer dimulai untuk memantau shard Logstore berdasarkan konfigurasi pemicu. Jika data baru ditulis ke Logstore, catatan data tiga-tupel dalam format
<shard_id,begin_cursor,end_cursor >dibuat sebagai peristiwa fungsi. Kemudian, fungsi dipanggil.CatatanJika tidak ada data baru yang ditulis ke Logstore dan sistem penyimpanan diperbarui, informasi cursor mungkin berubah. Akibatnya, fungsi dipanggil untuk setiap shard tetapi tidak ada data yang ditransformasi. Dalam kasus ini, Anda dapat menggunakan informasi cursor untuk mendapatkan data dari shard. Jika tidak ada data yang diperoleh, fungsi dipanggil tetapi tidak ada data yang ditransformasi. Anda dapat mengabaikan pemanggilan fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat Fungsi Kustom.
Pemicu Function Compute memanggil fungsi berdasarkan waktu. Misalnya, interval panggilan dalam pemicu Function Compute untuk Logstore disetel ke 60 detik. Jika data terus ditulis ke Shard 0, fungsi dipanggil pada interval 60 detik untuk mentransformasi data berdasarkan rentang cursor 60 detik sebelumnya.

Langkah 1: Buat pemicu Layanan Log Sederhana
Masuk ke Konsol Function Compute. Di panel navigasi sisi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Di halaman Detail Fungsi, klik tab Configurations. Di panel navigasi sisi kiri, klik Triggers. Lalu, klik Create Trigger.
Di panel Buat Pemicu, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Contoh
Trigger Type
Pilih Simple Log Service.
Layanan Log Sederhana
Name
Masukkan nama pemicu. Jika Anda meninggalkan parameter ini kosong, Function Compute secara otomatis menghasilkan nama pemicu.
log_trigger
Version or Alias
Versi atau alias pemicu. Nilai default: LATEST. Jika Anda ingin membuat pemicu untuk versi atau alias lain, pilih versi atau alias di sudut kanan atas halaman detail fungsi. Untuk informasi lebih lanjut tentang versi dan alias, lihat Kelola versi dan Kelola alias.
LATEST
Simple Log Service Project
Pilih proyek yang ingin Anda konsumsi.
aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****
Logstore
Pilih Logstore dari mana Anda ingin mengonsumsi. Pemicu saat ini berlangganan data di Logstore dan mengirimkan data ke Function Compute pada interval reguler untuk pemrosesan kustom.
function-log
Trigger Interval
Interval di mana Layanan Log Sederhana memanggil fungsi.
Nilai valid: 3 hingga 600. Unit: detik. Nilai default: 60.
60
Retries
Jumlah maksimum percobaan ulang yang diizinkan untuk setiap pemanggilan.
Nilai valid: 0 hingga 100. Nilai default: 3.
CatatanJika fungsi dipicu, status=200 dikembalikan, dan nilai parameter
X-Fc-Error-Typedi header respons bukanUnhandledInvocationErroratauHandledInvocationError. Dalam kasus lain, fungsi gagal dipicu. Untuk informasi lebih lanjut tentangX-Fc-Error-Type, lihat Parameter respons.Jika fungsi gagal dipicu, sistem mencoba memanggil fungsi lagi hingga fungsi berhasil dipanggil. Jumlah percobaan ulang mengikuti nilai parameter ini. Jika fungsi masih gagal setelah nilai parameter ini tercapai, sistem mencoba permintaan dalam mode backoff eksponensial dengan interval yang meningkat.
3
Trigger Log
Logstore tempat Anda ingin menyimpan log yang dihasilkan ketika Layanan Log Sederhana memanggil fungsi.
function-log2
Invocation Parameters
Parameter pemanggilan. Anda dapat mengonfigurasi parameter kustom di editor ini. Parameter kustom dilewatkan ke fungsi sebagai nilai parameter parameter dari peristiwa yang digunakan untuk memanggil fungsi. Nilai parameter Parameter Pemanggilan harus berupa string dalam format JSON.
Secara default, parameter ini kosong.
N/A
Role Name
Pilih AliyunLogETLRole.
CatatanSetelah Anda mengonfigurasi parameter di atas, klik OK. Jika ini pertama kalinya Anda membuat pemicu jenis ini, klik Authorize Now di kotak dialog yang muncul.
AliyunLogETLRole
Setelah pemicu dibuat, pemicu tersebut ditampilkan di tab Triggers. Untuk memodifikasi atau menghapus pemicu, lihat Manajemen Pemicu.
Langkah 2: Konfigurasikan izin
Di halaman Function Details fungsi Anda, klik tab Configurations. Di panel navigasi sisi kiri, klik Permissions lalu klik Modify. Di panel Izin, tentukan Function Role.
Anda dapat menggunakan peran default AliyunFCServerlessDevsRole. Secara default, peran ini memiliki izin baca-saja pada Layanan Log Sederhana.
Anda juga dapat menggunakan peran RAM kustom. Peran RAM kustom harus memenuhi dua persyaratan berikut:
Saat Anda membuat peran di Konsol Resource Access Management (RAM), Anda harus memilih Alibaba Cloud Service dan memilih Function Compute dari daftar drop-down Pilih Layanan Tepercaya. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Layanan Tepercaya Alibaba Cloud.
Anda harus memberikan izin yang diperlukan pada Layanan Log Sederhana kepada peran RAM berdasarkan persyaratan spesifik fungsi. Untuk informasi lebih lanjut, lihat Contoh Penggunaan Kebijakan Kustom untuk Memberikan Izin kepada Pengguna RAM.
Klik Deploy.
Langkah 3: Sebarkan fungsi dan lihat log
Di tab Code halaman detail fungsi, tulis kode di editor kode dan klik Deploy.
Dalam contoh ini, fungsi Python diterapkan untuk mengimplementasikan fitur berikut:
Memperoleh informasi tentang pemicu peristiwa Layanan Log Sederhana, seperti
endpoint,projectName,logstoreName, danbeginCursordari parameterevent.Memperoleh informasi otorisasi, seperti
accessKeyId,accessKey, dansecurityTokendari parametercontext.Inisialisasi klien Layanan Log Sederhana berdasarkan informasi yang diperoleh.
Memperoleh data log berdasarkan cursor yang ditentukan dari Logstore sumber.
CatatanKode sampel berikut memberikan contoh cara mengekstraksi log logis sebagian besar.
""" Kode sampel ini digunakan untuk mengimplementasikan fitur berikut: * Mengurai parameter event untuk mendapatkan informasi pemicu peristiwa Layanan Log Sederhana. * Inisialisasi klien Layanan Log Sederhana berdasarkan informasi di atas. * Mendapatkan log real-time dari Logstore sumber. Kode sampel ini terutama melakukan hal-hal berikut: * Dapatkan informasi pemrosesan SLS dari event * Inisiasi klien SLS * Tarik log 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): # Gunakan context.credentials untuk mendapatkan informasi tentang kunci. # Kunci akses dapat diambil melalui context.credentials print("Isi entitas konteks adalah: ", context) creds = context.credentials access_key_id = creds.access_key_id access_key_secret = creds.access_key_secret security_token = creds.security_token # Parse parameter event menjadi tipe data objek. # parse event in object event_obj = json.loads(event.decode()) print("Isi entitas event adalah: ", event_obj) # Query informasi berikut dari event.source: nama proyek log, nama Logstore, endpoint untuk mengakses proyek Layanan Log Sederhana, cursor awal, cursor akhir, dan ID shard. # Dapatkan nama proyek log, nama Logstore, 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 Layanan Log Sederhana. # Initialize client of sls client = LogClient(endpoint=endpoint, accessKeyId=access_key_id, accessKey=access_key_secret, securityToken=security_token) # Baca log yang dimulai dari cursor awal dan akhir di Logstore sumber. Dalam contoh ini, cursor yang ditentukan mencakup semua log dari pemanggilan fungsi. # Read data from source logstore within cursor: [begin_cursor, end_cursor) in the example, which contains all the logs trigger the invocation 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, klik tab Logs. Di panel navigasi sisi kiri, klik Function Logs dan lihat data terbaru yang diperoleh saat fungsi dieksekusi. Jika pesan "The logging feature is not enabled for the current function." ditampilkan, klik Enable.
(Opsional) Langkah 4: Uji fungsi menggunakan peristiwa simulasi
Di tab Code halaman detail fungsi, klik ikon
di sebelah Test Function dan pilih Configure Test Parameters dari daftar drop-down.Di panel Configure Test Parameters, klik tab Create New Test Event atau Modify Existing Test Event, masukkan nama peristiwa dan isi peristiwa, lalu klik OK. Saat membuat peristiwa tes baru, gunakan Simple Log Service sebagai template peristiwa. Untuk informasi lebih lanjut tentang konfigurasi data tes, lihat Peristiwa.
Setelah Anda mengonfigurasi peristiwa virtual, klik Test Function.
Setelah fungsi dieksekusi, Anda dapat melihat hasilnya di tab Tests.

Deskripsi parameter input
eventSaat pemicu Layanan Log Sederhana diaktifkan, ia mengirimkan data peristiwa ke runtime. Runtime kemudian mengonversi data ini menjadi objek JSON dan mengirimkannya ke parameter input
eventfungsi. Format JSON adalah 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 }Berikut adalah deskripsi parameter:
Parameter
Deskripsi
parameter
Nilai parameter pemanggilan yang Anda masukkan saat mengonfigurasi pemicu.
source
Informasi blok log yang ingin dibaca oleh fungsi.
endpoint: Wilayah Alibaba Cloud tempat proyek log berada.
projectName: Nama proyek log.
logstoreName: Nama Logstore yang ingin dikonsumsi Function Compute. Pemicu saat ini secara berkala berlangganan data dari Logstore ini ke layanan fungsi untuk pemrosesan kustom.
shardId: Shard tertentu dalam Logstore.
beginCursor: Posisi di mana konsumsi data dimulai.
endCursor: Posisi di mana konsumsi data berhenti.
CatatanSaat Anda men-debug fungsi, Anda dapat memanggil API GetCursor - Query cursor by time untuk mendapatkan beginCursor dan endCursor, dan membuat peristiwa fungsi untuk pengujian berdasarkan contoh di atas.
jobName
Nama pekerjaan ETL Layanan Log Sederhana. Pemicu Layanan Log Sederhana yang dikonfigurasikan untuk fungsi sesuai dengan pekerjaan ETL Layanan Log Sederhana.
Parameter ini dihasilkan secara otomatis oleh Function Compute. Anda tidak perlu mengonfigurasinya.
taskId
Untuk pekerjaan ETL, taskId adalah pengenal pemanggilan fungsi deterministik.
Parameter ini dihasilkan secara otomatis oleh Function Compute. Anda tidak perlu mengonfigurasinya.
cursorTime
Timestamp Unix dari waktu ketika log terakhir tiba di Layanan Log Sederhana. Unit: detik.
contextSaat Function Compute menjalankan fungsi Anda, ia menyediakan parameter input fungsi
contextdengan objek konteks. Objek ini mencakup detail tentang pemanggilan, layanan, fungsi, , dan lingkungan eksekusi.Tema ini menjelaskan cara mendapatkan informasi kunci melalui
context.credentials. Untuk informasi lebih lanjut tentang bidang lainnya, lihat Konteks.
Apa yang harus dilakukan selanjutnya
Kueri Log Pemicu
Anda dapat membuat indeks untuk Logstore Anda di mana log pemicu disimpan dan melihat hasil eksekusi pemicu. Untuk informasi lebih lanjut, lihat Buat Indeks.
Lihat Log Operasional Fungsi
Anda dapat menggunakan CLI untuk melihat informasi rinci tentang panggilan fungsi. Untuk informasi lebih lanjut, lihat Lihat Log Pemanggilan Fungsi.
Pertanyaan Umum
Apa yang harus saya lakukan jika log baru dihasilkan tetapi pemicu Layanan Log Sederhana tidak memicu eksekusi fungsi?
Anda dapat mendiagnosis masalah menggunakan metode berikut:
Periksa apakah perubahan data tambahan terjadi di Logstore yang terkait dengan pemicu. Fungsi yang terkait dipicu jika data shard berubah.
Periksa apakah ada pengecualian yang dapat ditemukan di log pemicu dan log operasional fungsi.
Mengapa frekuensi eksekusi pemicu Layanan Log Sederhana lebih tinggi dari yang diharapkan?
Fungsi dipicu secara terpisah untuk setiap shard. Bahkan jika jumlah kali fungsi dipicu untuk shard dalam Logstore besar, interval di mana fungsi dipicu untuk setiap shard dapat konsisten dengan interval pemicu yang ditentukan.
Interval pemicu di mana fungsi dipicu untuk sebuah shard sama dengan interval waktu yang ditentukan untuk transformasi data. Saat fungsi dipicu, latensi mungkin ada. Ini dapat menyebabkan interval pemicu lebih besar dari yang diharapkan. Daftar berikut menggambarkan dua skenario dengan interval pemicu yang ditentukan sebesar 60 detik.
Skenario 1: Fungsi dipicu, dan latensi tidak ada. Fungsi dipicu pada interval 60 detik untuk mentransformasi data yang dihasilkan dalam rentang waktu berikut:
[now -60s, now).CatatanFungsi dipicu secara terpisah untuk setiap shard. Jika Logstore berisi 10 shard dan latensi tidak ada saat fungsi dipicu, fungsi dipicu 10 kali pada interval 60 detik untuk mentransformasi data secara real-time.
Skenario 2: Fungsi dipicu, dan latensi ada. Selisih waktu antara titik waktu di mana data dalam shard Layanan Log Sederhana ditransformasi dan titik waktu di mana data terbaru ditulis ke Layanan Log Sederhana lebih besar dari 10 detik. Dalam hal ini, pemicu mempersingkat interval. Misalnya, fungsi dapat dipicu pada interval 2 detik untuk mentransformasi data yang dihasilkan dalam 60 detik.
Apa yang harus saya lakukan jika pesan kesalahan "denied by sts or ram, action: log:GetCursorOrData, resource: ****" dikembalikan?
Jika pesan kesalahan ini ditampilkan di log fungsi, izin terkait mungkin belum dikonfigurasikan untuk fungsi atau izin tersebut dikonfigurasikan secara salah. Untuk informasi lebih lanjut, lihat bagian Langkah 2: Konfigurasikan Izin dari topik ini.