All Products
Search
Document Center

Simple Log Service:Gunakan Function Compute untuk mengonsumsi data log

Last Updated:Jul 06, 2025

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

    • Buat Proyek dan Logstores

      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.

    Penting

    Proyek 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.

Catatan

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.

    Catatan

    Jika 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

  1. Masuk ke Konsol Function Compute. Di panel navigasi sisi kiri, klik Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Di halaman Detail Fungsi, klik tab Configurations. Di panel navigasi sisi kiri, klik Triggers. Lalu, klik Create Trigger.

  4. 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.

    Catatan
    • Jika fungsi dipicu, status=200 dikembalikan, dan nilai parameter X-Fc-Error-Type di header respons bukan UnhandledInvocationError atau HandledInvocationError. Dalam kasus lain, fungsi gagal dipicu. Untuk informasi lebih lanjut tentang X-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.

    Catatan

    Setelah 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

  1. 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:

      1. 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.

      2. 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.

  2. Klik Deploy.

Langkah 3: Sebarkan fungsi dan lihat log

  1. 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, dan beginCursor dari parameter event.

    • Memperoleh informasi otorisasi, seperti accessKeyId, accessKey, dan securityToken dari parameter context.

    • Inisialisasi klien Layanan Log Sederhana berdasarkan informasi yang diperoleh.

    • Memperoleh data log berdasarkan cursor yang ditentukan dari Logstore sumber.

    Catatan

    Kode 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'
  2. 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

  1. Di tab Code halaman detail fungsi, klik ikon image.png di sebelah Test Function dan pilih Configure Test Parameters dari daftar drop-down.

  2. 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.

  3. Setelah Anda mengonfigurasi peristiwa virtual, klik Test Function.

    Setelah fungsi dieksekusi, Anda dapat melihat hasilnya di tab Tests.image

Deskripsi parameter input

  • event

    Saat pemicu Layanan Log Sederhana diaktifkan, ia mengirimkan data peristiwa ke runtime. Runtime kemudian mengonversi data ini menjadi objek JSON dan mengirimkannya ke parameter input event fungsi. 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.

    Catatan

    Saat 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.

  • context

    Saat Function Compute menjalankan fungsi Anda, ia menyediakan parameter input fungsi context dengan 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).

      Catatan

      Fungsi 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.