全部产品
Search
文档中心

Function Compute:Pemicu Layanan Log Sederhana

更新时间:Jul 06, 2025

Anda dapat membuat pemicu Layanan Log Sederhana untuk menghubungkan Simple Log Service ke Function Compute. Pemicu ini secara otomatis memicu fungsi untuk memproses log tambahan dalam Logstore sesuai dengan kebutuhan bisnis Anda.

Skenario

  • Pembersihan dan pemrosesan data

    Layanan Log Sederhana memungkinkan Anda untuk mengumpulkan, memproses, menanyakan, dan menganalisis log dengan cepat.

  • Pengiriman data

    Layanan Log Sederhana memungkinkan Anda untuk mengirimkan data ke tujuan tertentu. Dalam skenario ini, Layanan Log Sederhana berfungsi sebagai saluran data untuk layanan data besar di cloud.

Fungsi untuk pemrosesan data

Jenis fungsi

  • Fungsi template

    Untuk informasi lebih lanjut, kunjungi halaman aliyun-log-fc-functions di GitHub.

  • Fungsi kustom

    Format fungsi tergantung pada implementasinya. Untuk informasi lebih lanjut, lihat Buat fungsi kustom.

Mekanisme pemicu

Pekerjaan ekstraksi, transformasi, dan pemuatan (ETL) sesuai dengan pemicu Layanan Log Sederhana digunakan untuk memanggil fungsi. Setelah Anda membuat pekerjaan ETL untuk Logstore di Layanan Log Sederhana, timer dimulai untuk memantau data dari shard Logstore berdasarkan konfigurasi pekerjaan. Jika data ditulis ke Logstore, rekaman data triple dalam format <shard_id,begin_cursor,end_cursor> dibuat sebagai peristiwa fungsi. Kemudian, fungsi ETL yang terkait dipanggil. Simple Log Service mendorong peristiwa fungsi ke Function Compute.

Catatan

Jika tidak ada data yang ditulis ke Logstore dan sistem penyimpanan diperbarui, informasi cursor mungkin berubah. Akibatnya, fungsi ETL dipanggil untuk setiap shard tetapi tidak ada data yang ditransformasikan. Dalam kasus ini, Anda dapat menggunakan informasi cursor untuk mendapatkan data dari shard. Jika tidak ada data yang diperoleh, fungsi ETL dipanggil tetapi tidak ada data yang ditransformasikan. Anda dapat mengabaikan pemanggilan fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat fungsi kustom.

Pekerjaan ETL memanggil fungsi berdasarkan waktu. Misalnya, pekerjaan ETL memicu fungsi setiap 60 detik jika data terus-menerus ditulis ke Shard0 dari Logstore. Dalam kasus ini, shard memicu fungsi setiap 60 detik. Jika data tidak lagi ditulis ke shard, fungsi tidak dapat dipicu. Input untuk menjalankan fungsi adalah offset awal dan akhir dari cursor dalam 60 detik terakhir. Data dapat diproses berdasarkan rentang cursor 60 detik sebelumnya.

Batasan

Anda dapat mengaitkan maksimal lima kali jumlah Logstore 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 dikirimkan secara efisien ke Function Compute.

Contoh skenario

Anda dapat mengonfigurasi pemicu Layanan Log Sederhana untuk secara berkala mendapatkan data yang diperbarui dan memanggil fungsi. Pemicu Layanan Log Sederhana cocok untuk skenario di mana Anda ingin mengonsumsi data tambahan dari Logstore. Anda dapat memanggil fungsi untuk melakukan tugas pemrosesan kustom seperti tugas pembersihan data, pemrosesan data, serta mengirimkan data ke layanan pihak ketiga. Contoh ini hanya menunjukkan cara mendapatkan dan menampilkan data log.

Catatan

Fungsi yang digunakan untuk memproses data bisa berupa fungsi template yang disediakan oleh Layanan Log Sederhana atau fungsi kustom.

Prasyarat

  • Function Compute

    • Layanan telah dibuat. Untuk informasi lebih lanjut, lihat Buat layanan.

      Catatan

      Saat membuat layanan, konfigurasikan peran layanan untuk memberikan izin kepada fungsi dalam layanan. Jika Anda tidak mengonfigurasi peran layanan, kesalahan akan dilaporkan saat menguji kode fungsi. Dalam contoh ini, peran layanan adalah AliyunFCDefaultRole dan kebijakan AliyunLogReadOnlyAccess dilekatkan pada peran tersebut. Untuk informasi lebih lanjut tentang peran layanan, lihat Berikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya.

    • Fungsi telah dibuat. Untuk informasi lebih lanjut, lihat Buat fungsi.

  • Simple Log Service

    • Proyek Layanan Log Sederhana dan dua Logstore telah dibuat. Untuk informasi lebih lanjut, lihat Ikhtisar manajemen sumber daya.

      Satu Logstore digunakan untuk memproses log dan sumber data, sedangkan Logstore lainnya digunakan untuk menyimpan log yang dihasilkan oleh Function Compute.

      Catatan

      Proyek log harus berada di wilayah yang sama dengan layanan Function Compute.

Langkah 1: Buat pemicu Layanan Log Sederhana

  1. Masuk ke Konsol Function Compute.

  2. Di panel navigasi kiri, klik Services & Functions.

  3. Di bilah navigasi atas, pilih wilayah.

  4. Pada halaman Services, temukan layanan yang diinginkan dan klik Functions di kolom Actions.
  5. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
  6. Pada halaman detail fungsi, klik tab Triggers, pilih versi atau alias dari daftar drop-down Version or Alias, lalu klik Create Trigger.
  7. Di panel Create Trigger, konfigurasikan parameter dan klik OK.

    Parameter

    Deskripsi

    Contoh

    Trigger Type

    Pilih Log Service.

    Log Service

    Name

    Masukkan 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

    Log Service Project

    Nama proyek Layanan Log Sederhana yang sudah ada.

    aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****

    Logstore

    Nama Logstore yang sudah ada. Pemicu yang dibuat dalam contoh ini berlangganan data di Logstore dan mengirimkan data ke Function Compute secara berkala 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 satu pemicu jika terjadi kesalahan saat Layanan Log Sederhana memicu pemanggilan fungsi.

    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 sampai 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 saat Layanan Log Sederhana memanggil fungsi.

    function-log2

    Invocation Parameters

    Konfigurasikan parameter kustom di editor ini. Parameter ini diteruskan ke fungsi sebagai bidang parameter dari parameter event. Nilai parameter ini harus berupa string dalam format JSON.

    Secara default, parameter ini kosong.

    Tidak ada

    Role Name

    Pilih AliyunLogETLRole.

    Catatan

    Setelah Anda mengonfigurasi parameter di atas, klik OK. Pertama kali 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 yang ada, lihat Kelola pemicu.

Langkah 2: Konfigurasikan parameter input fungsi

  1. Pada halaman detail fungsi, klik tab Code, klik ikon xialatubiao di sebelah kanan Test Function, lalu 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, konfigurasikan parameter Event Name, tentukan isi event, lalu klik OK.

    Di Function Compute, event adalah parameter input. Kode berikut menunjukkan format parameter event:

    {
        "parameter": {},
        "source": {
            "endpoint": "http://cn-hangzhou-intranet.log.aliyuncs.com",
            "projectName": "aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****",
            "logstoreName": "function-log",
            "shardId": 0,
            "beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
            "endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
        },
        "jobName": "1f7043ced683de1a4e3d8d70b5a412843d81****",
        "taskId": "c2691505-38da-4d1b-998a-f1d4bb8c****",
        "cursorTime": 1529486425
    }                       

    Parameter

    Deskripsi

    Contoh

    parameter

    Nilai parameter Invocation Parameters yang Anda konfigurasikan saat membuat pemicu.

    Tidak ada

    source

    Informasi blok log yang ingin dibaca fungsi dari Layanan Log Sederhana.

    • endpoint: endpoint wilayah Alibaba Cloud tempat proyek Layanan Log Sederhana berada.

    • projectName: nama proyek Layanan Log Sederhana.

    • logstoreName: nama Logstore.

    • shardId: ID shard tertentu di Logstore.

    • beginCursor: offset dari mana konsumsi data dimulai.

    • endCursor: offset di mana konsumsi data berakhir.

    {
        "endpoint": "http://cn-hangzhou-intranet.log.aliyuncs.com",
        "projectName": "aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****",
        "logstoreName": "function-log",
        "shardId": 0,
        "beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
        "endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
    }

    jobName

    Nama pekerjaan ETL di Layanan Log Sederhana. Pemicu Layanan Log Sederhana harus sesuai dengan pekerjaan ETL di Layanan Log Sederhana.

    1f7043ced683de1a4e3d8d70b5a412843d81****

    taskId

    Untuk pekerjaan ETL, taskId adalah pengenal untuk pemanggilan fungsi deterministik.

    c2691505-38da-4d1b-998a-f1d4bb8c****

    cursorTime

    Timestamp UNIX dari waktu kedatangan log terakhir di Layanan Log Sederhana.

    1529486425

Langkah 3: Tulis dan uji kode fungsi

Setelah Anda membuat pemicu Layanan Log Sederhana, Anda dapat menulis kode fungsi dan menguji kode fungsi untuk memverifikasi apakah kode tersebut valid. Fungsi dipanggil saat Layanan Log Sederhana mengumpulkan log tambahan. Function Compute mendapatkan log yang sesuai, lalu menampilkan log yang dikumpulkan.

  1. Pada halaman detail fungsi, klik tab Code, masukkan kode fungsi di editor kode, lalu klik Deploy.

    Bagian ini menggunakan kode fungsi untuk Python sebagai contoh. Dalam kode sampel, nilai parameter access_key_id, access_key_secret, dan security_token diquery dari context.credentials.

    """
    Kode sampel ini digunakan untuk mengimplementasikan fitur berikut:
    * Parsing peristiwa Layanan Log Sederhana dari parameter event.
    * Menginisialisasi klien Layanan Log Sederhana berdasarkan informasi di atas.
    * Mendapatkan data log real-time dari Logstore sumber.
    
    
    Kode sampel ini terutama melakukan hal-hal berikut:
    * Dapatkan informasi pemrosesan SLS dari event
    * Inisialisasi 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):
    
        # Query informasi kunci dari context.credentials.
        # Access keys dapat diperoleh melalui context.credentials
        print("Isi entitas dalam context adalah: \n")
        print(context)
        creds = context.credentials
        access_key_id = creds.access_key_id
        access_key_secret = creds.access_key_secret
        security_token = creds.security_token
    
        # Parsing parameter event ke tipe data OBJECT.
        # parse event in object
        event_obj = json.loads(event.decode())
        print("Isi entitas dalam event adalah: \n")
        print(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 berdasarkan cursor awal dan akhir di Logstore sumber. Dalam contoh ini, cursor yang ditentukan mencakup semua log dari pemanggilan fungsi.
        # Baca data dari Logstore sumber dalam rentang cursor: [begin_cursor, end_cursor) dalam contoh ini, yang mencakup 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 grup log dari %s" % (log_group_cnt, log_store))
          logger.info(response.get_loggroup_list())
    
          begin_cursor = response.get_next_cursor()
    
        return 'sukses'
  2. Pada tab Code, klik Test Function.

    Setelah fungsi dieksekusi, Anda dapat melihat hasilnya di tab Code.

Pemecahan Masalah