全部产品
Search
文档中心

Function Compute:Gunakan Loggie dalam runtime kustom

更新时间:Jul 02, 2025

Loggie adalah agen berbasis Golang yang digunakan untuk mengumpulkan log. Fiturnya ringan dan berperforma tinggi. Anda dapat menggunakan Loggie dalam fungsi di runtime kustom untuk mengumpulkan log dari file dan mengunggahnya ke Simple Log Service untuk penyimpanan dan analisis kustom.

Sebelum Anda memulai

Prosedur

Langkah 1: Buat fungsi dalam runtime kustom

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik Create Function.

  4. Pada halaman Create Function, konfigurasikan parameter berikut, gunakan nilai default untuk parameter lainnya, lalu klik Create. Untuk informasi lebih lanjut, lihat Buat fungsi.

    • Metode pembuatan: Pilih Use Custom Runtime.

    • Basic Settings: Masukkan nama fungsi di bidang Function Name dan pilih Event Handler untuk Handler Type.

    • Code: Konfigurasikan lingkungan runtime dan informasi terkait kode dari fungsi.

      Parameter

      Contoh

      Runtime

      Python 3.9

      Code Upload Method

      Pilih Use Folder. Nama folder yang akan diunggah adalah code, dan file di direktori code adalah app.py. Contoh kode berikut menunjukkan isi dari app.py:

      from flask import Flask
      from flask import request
      import logging
      import os
      
      REQUEST_ID_HEADER = 'x-fc-request-id'
      
      app = Flask(__name__)
      
      format_str = '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
      logging.basicConfig(filename='/tmp/log/fc-flask.log', filemode='w', 
          format=format_str, encoding='utf-8', level=logging.DEBUG)
      @app.route("/invoke", methods = ["POST"])
      def hello_world():
          rid = request.headers.get(REQUEST_ID_HEADER)
          logger = logging.getLogger()
      
          print("FC Invoke Start RequestId: " + rid)
          logger.info("FC Invoke Start RequestId: " + rid)
      
          data = request.stream.read()
          print(str(data))
          logger.info("receive event: {}".format(str(data)))
          
          print("FC Invoke End RequestId: " + rid)
          logger.info("FC Invoke Start RequestId: " + rid)
          return "Hello, World!"
      
      if __name__ == '__main__':
          app.run(host='0.0.0.0',port=9000)
      Catatan

      Anda dapat mengubah filename='/tmp/log/fc-flask.log' menjadi tipe log dan lokasi log sebenarnya dalam kode. Pastikan konfigurasi ini sesuai dengan jalur sources.paths yang dikonfigurasi di Langkah 2.

      Startup Command

      /code/bootstrap

      Catatan

      File bootstrap dibuat di Langkah 2.

      Listening Port

      9000

Langkah 2: Buat file bootstrap sebagai perintah mulai

  1. Setelah fungsi dibuat, gunakan WebIDE pada tab Code untuk membuat file bootstrap di direktori CODE.

    Contoh kode berikut menunjukkan isi dari file bootstrap.

    #!/bin/bash
    
    #1. Buat file pipelines.yml.
    mkdir -p /tmp/log /code/etc
    cat << EOF > /code/etc/pipelines.yml
    pipelines:
      - name: demo
        sources:
          - type: file
            name: fc-demo
            addonMeta: true
            fields:
              topic: "loggie"
            fieldsUnderRoot: true
            paths:
              - "/tmp/log/*.log"
        sink:
          type: sls
          endpoint: ${LOGGIE_SINK_SLS_ENDPOINT}
          accessKeyId: ${LOGGIE_SINK_SLS_ACCESS_ID}
          accessKeySecret: ${LOGGIE_SINK_SLS_ACCESS_SECRET}
          project: ${LOGGIE_SINK_SLS_PROJECT}
          logstore: ${LOGGIE_SINK_SLS_LOGSTORE}
          topic: ${LOGGIE_SINK_SLS_TOPIC}
    EOF
    
    #2. Buat file loggie.yml.
    cat << EOF > /code/etc/loggie.yml
    EOF
    
    #3. Mulai Loggie dan jalankan sebagai proses latar belakang.
    /opt/bin/loggie -config.system=/code/etc/loggie.yml -config.pipeline=/code/etc/pipelines.yml > /tmp/loggie.log 2>&1 &
    
    #4. Mulai aplikasi.
    exec python app.py

    Skrip melakukan operasi berikut:

    1. Buat file pipelines.yml, yaitu file konfigurasi pipeline.

      • sources

        Menentukan jenis dan jalur log. Contoh ini menunjukkan cara mengumpulkan log dari semua file yang berakhiran .log di direktori /tmp/log.

      • sink

        Menentukan informasi tentang Simple Log Service. Variabel dalam skrip disetel di Langkah 4.

    2. Buat file loggie.yml, yaitu file konfigurasi Loggie.

      Jika file ini kosong, konfigurasi default digunakan. Dalam contoh ini, konfigurasi default digunakan. Namun, file loggie.yml harus ada. Jika file tidak kosong, lihat Ikhtisar untuk konfigurasi rinci.

    3. Mulai Loggie dan jalankan sebagai proses latar belakang. Log run Loggie dicetak ke file /tmp/loggie.log.

    4. Mulai aplikasi. Dalam contoh ini, Python digunakan. Dalam skenario nyata, tentukan bahasa pemrograman yang ingin Anda gunakan.

  2. Dapatkan izin eksekusi pada file bootstrap.

    Di WebIDE, pilih Terminal > New Terminal dan jalankan perintah chmod 777 bootstrap untuk membuat file dapat dieksekusi.

Langkah 3: Tambahkan layer umum resmi Loggie

  1. Klik tab Configurations. Di bagian Layers, klik Modify.

  2. Di panel untuk mengubah layer, pilih Add Layer > Add Official Common Layer dan konfigurasikan layer Loggie.

    Tabel berikut memberikan informasi tentang layer umum Loggie.

    Nama Layer

    Runtime kompatibel

    Versi layer

    ARN

    Loggie Agent

    Runtime kustom

    Contoh ini menggunakan versi layer 1.

    acs:fc:{region}:official:layers/Loggie13x/versions/1

  3. Klik OK.

Langkah 4: Atur variabel lingkungan

  1. Di bagian Environment Variables dari tab Configurations, klik Modify.

  2. Di panel untuk mengubah variabel lingkungan, tambahkan variabel lingkungan berikut. Untuk informasi lebih lanjut tentang cara mengonfigurasi variabel lingkungan, lihat Variabel lingkungan.

    • Atur variabel lingkungan FC_EXTENSION_SLS_LOGGIE=true.

      Setelah Anda menambahkan variabel lingkungan ini, instance dibekukan 10 detik setelah fungsi dipanggil. Ini memastikan bahwa Loggie dapat melaporkan log seperti yang diharapkan.

      Penting

      Anda dikenakan biaya untuk menggunakan variabel lingkungan FC_EXTENSION_SLS_LOGGIE=true. Aturan penagihan variabel lingkungan ini sama dengan aturan penagihan Prefreeze hooks. Untuk informasi lebih lanjut, lihat Aturan penagihan.

    • Atur variabel lingkungan di file pipelines.yml, termasuk LOGGIE_SINK_SLS_ENDPOINT, LOGGIE_SINK_SLS_ACCESS_ID, LOGGIE_SINK_SLS_ACCESS_SECRET, LOGGIE_SINK_SLS_PROJECT, LOGGIE_SINK_SLS_LOGSTORE, dan LOGGIE_SINK_SLS_TOPIC.

  3. Klik OK. Setelah konfigurasi fungsi diperbarui, log eksekusi fungsi dapat diunggah ke Simple Log Service menggunakan Loggie.

Langkah 4: Verifikasi hasil

  1. Pada tab Code, klik Test Function.

    Anda mungkin mengalami beberapa penundaan dalam pengunggahan log jika Anda menguji fungsi untuk pertama kalinya. Kami sarankan Anda menguji fungsi beberapa kali lagi.

  2. Masuk ke Konsol Layanan Log dan kueri log berdasarkan konfigurasi wilayah, proyek, dan Logstore di file pipelines.yml. Gambar berikut menunjukkan contohnya.

    image.png

    • body: log.

    • state.*: metadata dari status pengumpulan log. hostname adalah ID instance tempat fungsi berjalan.

Pemecahan masalah

Loggie berjalan secara independen di instance fungsi. Function Compute tidak dapat mendeteksi apakah Loggie berjalan seperti yang diharapkan. Eksekusi fungsi tidak terpengaruh meskipun Loggie gagal berfungsi.

Saat Anda mengkueri log yang terkait dengan Loggie di Simple Log Service, latensi beberapa detik mungkin terjadi. Jika Anda tidak dapat menemukan log yang terkait dengan Loggie di Simple Log Service, lakukan operasi berikut untuk memecahkan masalah:

Fungsi berjalan seperti yang diharapkan

Dalam kasus ini, instance tetap hidup selama beberapa menit setelah fungsi dipanggil. Anda dapat masuk ke instance untuk melihat status dan log Loggie. Untuk informasi lebih lanjut tentang cara masuk ke instance, lihat Jalankan perintah untuk mengelola instance fungsi.

  • Jika log tidak ada, Anda dapat memulai Loggie di baris perintah.

  • Jika log ada, pecahkan masalah berdasarkan log.

    • Periksa apakah file pipelines.yml dikonfigurasi dengan benar.

    • Periksa apakah sink Simple Log Service berhasil dimulai. Log serupa dengan pipeline sink(sink/sls)-0 invoke loop start.

    • Periksa apakah file log diperoleh. Log serupa dengan start collect file: /tmp/log/fc-flask.log. Jika tidak ada log serupa yang tersedia, periksa apakah file log dihasilkan berdasarkan konfigurasi paths di file pipelines.yml.

Catatan

Pertama kali Anda terhubung ke Simple Log Service Logstore, latensi mungkin terjadi. Jika tidak ada anomali yang ditemukan dalam log, Anda dapat memanggil fungsi beberapa kali dan menunggu beberapa menit sebelum Anda mengkueri log.

Fungsi gagal berjalan

Jika fungsi gagal berjalan, Anda dapat menghapus logika startup dari Loggie untuk memeriksa apakah fungsi berjalan seperti yang diharapkan. Dalam kebanyakan kasus, Loggie tidak memengaruhi jalannya fungsi karena Loggie adalah ekstensi eksternal. Jika keluar tak terduga dari proses atau waktu eksekusi habis terjadi, Anda dapat meningkatkan memori atau meningkatkan spesifikasi CPU.

Referensi

  • Untuk informasi lebih lanjut tentang Loggie, kunjungi Situs web Loggie.

  • Dalam contoh ini, Loggie mengumpulkan log dan mengunggahnya tanpa pemrosesan apa pun. Jika Anda ingin memproses log sebelum mengunggahnya, misalnya, mengurai log format JSON atau menghapus log DEBUG, Anda dapat menambahkan konfigurasi Interceptor di file pipelines.yml. Untuk informasi lebih lanjut, lihat Ikhtisar.