Loggie adalah agen pengumpulan log cloud-native berkinerja tinggi dan ringan yang ditulis dalam Go. Gunakan agen ini dalam fungsi runtime kustom untuk mengumpulkan log dari file dan mengunggahnya ke Simple Log Service (SLS) guna penyimpanan dan analisis kustom.
Cara kerja
Agen Loggie berjalan sebagai proses latar belakang independen di dalam instans fungsi, bersamaan dengan aplikasi Anda. Saat fungsi dimulai, file bootstrap menjalankan Loggie di latar belakang, lalu menjalankan aplikasi Anda. Loggie terus-menerus memantau file log yang ditulis oleh aplikasi Anda dan mengirimkannya ke SLS.
Karena Loggie berjalan secara independen, gangguan pada agen tidak memengaruhi eksekusi fungsi Anda.
Mengaktifkan Agen Loggie menambahkan penundaan 10 detik setelah setiap pemanggilan berakhir, sebelum instans dibekukan. Periode tunggu ini dikenai tagihan dengan laju yang sama seperti fase pemanggilan. Untuk informasi selengkapnya, lihat Billing.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Proyek Simple Log Service dan Logstore di wilayah yang sama dengan fungsi Anda. Lihat Mengelola proyek dan Membuat Logstore.
Langkah 1: Buat fungsi
-
Login ke Konsol Function Compute. Di bilah navigasi kiri, pilih Function Management > Function.
-
Di bilah navigasi atas, pilih wilayah. Pada halaman Function, klik Create Function.
-
Pada kotak dialog, pilih Web Function, lalu klik Create Web Function.
-
Pada halaman Create Function, konfigurasikan parameter berikut. Gunakan nilai default untuk semua parameter lainnya, lalu klik Create. Untuk referensi lengkap parameter, lihat Membuat fungsi. Untuk Code Upload Method, unggah folder bernama
codeyang berisiapp.py. Contohapp.pyberikut menunjukkan aplikasi Flask yang menulis log ke/tmp/log/fc-flask.log:Nilai
filenamedalamlogging.basicConfigharus sesuai dengan pengaturansources.pathsdalam filepipelines.ymlyang Anda buat di Langkah 2.Parameter
Nilai
Function Name (di bawah Basic Configurations)
Masukkan nama
Runtime (di bawah Code)
Custom Runtime
Code Upload Method (di bawah Code)
Upload Folder
Startup Command (di bawah Code)
/code/bootstrapListening Port (di bawah Code)
9000from 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)File
bootstrapyang dirujuk sebagai perintah startup akan dibuat di Langkah 2.
Langkah 2: Buat file bootstrap
-
Setelah fungsi dibuat, buka tab Code dan gunakan WebIDE untuk membuat file
bootstrapdi direktoricode. Skripbootstrapberikut menjalankan Loggie sebagai proses latar belakang, lalu menjalankan aplikasi:-
Membuat
pipelines.yml— file konfigurasi pipeline Loggie. Bloksourcesmengumpulkan semua file.logdari/tmp/log/. MenyeteladdonMeta: truemenambahkan metadata default tentang status pengumpulan log ke setiap entri log. Bloksinkmengirim log ke SLS menggunakan variabel lingkungan yang disetel di Langkah 4. Untuk referensi konfigurasi lengkapsources, lihat Konfigurasi sumber umum dan addonMeta. -
Membuat
loggie.yml— file konfigurasi sistem Loggie. File kosong menggunakan konfigurasi default. Fileloggie.ymlharus ada, meskipun kosong. Untuk parameter kustom, lihat Konfigurasi sistem Loggie. -
Menjalankan Loggie sebagai proses latar belakang. Log runtime Loggie sendiri ditulis ke
/tmp/loggie.log. -
Menjalankan aplikasi. Contoh ini menggunakan Python. Sesuaikan perintahnya untuk runtime aktual Anda.
#!/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. Jalankan Agen Loggie 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. Jalankan aplikasi. exec python app.py -
-
Atur izin eksekusi pada file
bootstrap. Di terminal WebIDE, jalankan:chmod 777 bootstrap -
Klik Deploy.
Langkah 3: Tambahkan lapisan publik Agen Loggie
-
Buka tab Configuration. Di bawah Advanced Settings, klik Modify.
-
Di bagian Layer, klik Add Layer > Add Public Layer, lalu pilih lapisan Agen Loggie:
Nama lapisan
Runtime yang kompatibel
Versi
ARN
Loggie Agent
custom runtime
1
acs:fc:{region}:official:layers/Loggie13x/versions/1 -
Klik Deploy.
Langkah 4: Setel variabel lingkungan
-
Buka tab Configuration. Di bawah Advanced Settings, klik Modify.
-
Di bagian Environment Variables, tambahkan variabel berikut. Untuk detail konfigurasi, lihat Mengonfigurasi variabel lingkungan. Setel
FC_EXTENSION_SLS_LOGGIE=true. Ini mencegah instans fungsi langsung membeku setelah pemanggilan — ia menunggu 10 detik untuk memastikan Loggie selesai mengunggah log. Setel variabel koneksi SLS yang dirujuk dalampipelines.yml:PentingWaktu tunggu 10 detik dikenai tagihan dengan laju yang sama seperti fase pemanggilan. Lihat Billing.
Variabel
Deskripsi
Sumber nilai
LOGGIE_SINK_SLS_ENDPOINTTitik akhir SLS
LOGGIE_SINK_SLS_ACCESS_IDID AccessKey
LOGGIE_SINK_SLS_ACCESS_SECRETRahasia AccessKey
LOGGIE_SINK_SLS_PROJECTNama proyek SLS
Konsol SLS Anda
LOGGIE_SINK_SLS_LOGSTORELogstore untuk menyimpan log
Konsol SLS Anda
LOGGIE_SINK_SLS_TOPICTopik log (nilai kustom)
Tentukan sendiri
-
Klik Deploy. Setelah konfigurasi fungsi diperbarui, log eksekusi dapat diunggah ke Simple Log Service melalui Loggie.
Langkah 5: Verifikasi hasil
-
Pada tab Code, klik Test Function. Setelah konfigurasi selesai, log mungkin tertunda pada pengujian pertama. Panggil fungsi beberapa kali lagi untuk menghasilkan data log.
-
Login ke Konsol Simple Log Service dan cari log menggunakan wilayah, proyek, dan Logstore yang ditentukan dalam
pipelines.yml. Hasil yang berhasil mencakup bidang berikut:-
body: Konten pesan log. -
state.*: Metadata tentang status pengumpulan log. Bidanghostnameadalah ID instans fungsi.
-
Jika tidak ada log yang muncul setelah beberapa menit, lihat Pemecahan Masalah.
Pemecahan Masalah
Platform Function Compute tidak dapat mendeteksi apakah Agen Loggie berjalan dengan benar.
Fungsi berjalan sebagaimana mestinya tetapi log tidak muncul
Jika fungsi berjalan dengan benar, instansnya tetap aktif selama beberapa menit setelah pemanggilan. Login ke instans untuk memeriksa Agen Loggie. Untuk detailnya, lihat Operasi command-line instans.
-
Tidak ada log Loggie di `/tmp/loggie.log`: Coba jalankan agen secara manual dari command line.
-
Log Loggie ada: Periksa hal berikut:
-
Konfirmasi bahwa
pipelines.ymldikonfigurasi dengan benar. -
Konfirmasi sink SLS berhasil dimulai. Cari entri log yang mirip dengan
pipeline sink(sink/sls)-0 invoke loop start. -
Konfirmasi pengumpulan log sedang berjalan. Cari
start collect file: /tmp/log/fc-flask.log. Jika entri ini tidak ada, periksa apakah file log ada di path yang ditentukan dalamsources.paths.
-
Ingesti log dapat tertunda saat pertama kali terhubung ke Logstore. Log yang diambil muncul dengan penundaan beberapa detik. Jika log Loggie tampak normal, panggil fungsi beberapa kali lagi dan tunggu beberapa menit sebelum melakukan kueri ke SLS.
Fungsi gagal berjalan
Loggie berjalan sebagai ekstensi eksternal dan biasanya tidak memengaruhi eksekusi fungsi. Jika fungsi itu sendiri gagal:
-
Hapus logika startup Loggie dari file
bootstrapuntuk memastikan fungsi berjalan dengan benar tanpa Loggie. -
Jika Anda melihat error keluar proses atau timeout, tingkatkan alokasi memori atau CPU fungsi.
Langkah selanjutnya
Pada contoh ini, Loggie mengunggah log yang dikumpulkan apa adanya, tanpa pemrosesan apa pun.
-
Untuk memproses log sebelum diunggah — seperti menguraikan entri berformat JSON atau memfilter log DEBUG — tambahkan interceptor ke
pipelines.yml. Lihat Loggie-Interceptor. -
Untuk dokumentasi Loggie lengkap, lihat Dokumentasi Loggie.