Loggie adalah agen pengumpulan log berbasis Golang yang cloud-native, dirancang untuk operasi ringan dan berkinerja tinggi. Dalam runtime kustom Function Compute, Loggie berjalan sebagai proses latar belakang di dalam instans fungsi Anda. Fungsi Anda menulis log ke file lokal, lalu Loggie membaca file tersebut dan meneruskannya ke Simple Log Service (SLS) untuk penyimpanan dan analisis.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Layanan Function Compute
Proyek SLS harus berada di wilayah yang sama dengan fungsi yang Anda buat pada Langkah 1.
Penagihan
Menyetel variabel lingkungan FC_EXTENSION_SLS_LOGGIE=true akan membekukan instans selama 10 detik setelah setiap pemanggilan agar Loggie dapat menyelesaikan pengunggahan log. Periode pembekuan ini ditagih berdasarkan aturan yang sama seperti panggilan balik Prefreeze. Untuk detailnya, lihat Aturan penagihan.
Langkah 1: Buat fungsi dalam runtime kustom
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.
Pada halaman Functions, klik Create Function.
Pada halaman Create Function, atur parameter berikut. Gunakan nilai default untuk parameter lainnya, lalu klik Create. Untuk informasi lebih lanjut, lihat Buat fungsi. Contoh
app.py:Catatan Gantifilename='/tmp/log/fc-flask.log'dengan jalur file log aktual Anda. Jalur ini harus sesuai dengan nilaisources.pathsdalam konfigurasi pipeline yang dibuat pada Langkah 2.Parameter Nilai Creation method Use Custom Runtime Function Name (di bawah Basic Settings) Masukkan nama fungsi Handler Type (di bawah Basic Settings) Event Handler Runtime Python 3.9 Code Upload Method Use Folder. Nama folder adalah code, dan file di dalamnya adalahapp.py. Lihat contoh kode di bawah.Startup Command /code/bootstrap(dibuat pada Langkah 2)Listening Port 9000 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)
Langkah 2: Buat file bootstrap
Setelah membuat fungsi, gunakan WebIDE pada tab Code untuk membuat file bootstrap di direktori CODE.
Tambahkan konten berikut ke 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. Jalankan 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.pySkrip ini melakukan hal-hal berikut:
Membuat
pipelines.yml— file konfigurasi pipeline.Bagian Deskripsi sourcesMenentukan tipe log dan jalurnya. Contoh ini mengumpulkan semua file .logdari direktori/tmp/log/.sinkMenentukan tujuan SLS. Variabel-variabel ini diatur pada Langkah 4. Membuat
loggie.yml— file konfigurasi sistem Loggie. File kosong menggunakan konfigurasi default. File ini harus ada meskipun dibiarkan kosong. Untuk konfigurasi non-default, lihat Dokumentasi referensi Loggie.Menjalankan Loggie sebagai proses latar belakang. Log runtime Loggie ditulis ke
/tmp/loggie.log.Menjalankan aplikasi. Contoh ini menggunakan Python. Ganti perintah tersebut dengan bahasa yang digunakan oleh fungsi Anda.
Setelah menambahkan konten file, berikan izin eksekusi pada file bootstrap. Di WebIDE, pilih Terminal > New Terminal, lalu jalankan:
chmod 777 bootstrapLangkah 3: Tambahkan layer umum resmi Loggie
Klik tab Configurations. Di bagian Layers, klik Modify.
Di panel, pilih Add Layer > Add Official Common Layer dan konfigurasikan layer Loggie.
Nama layer Runtime yang kompatibel Versi layer ARN Loggie Agent Custom runtime 1 (digunakan dalam contoh ini) acs:fc:{region}:official:layers/Loggie13x/versions/1Klik OK.
Langkah 4: Atur variabel lingkungan
Pada tab Configurations, buka bagian Environment Variables dan klik Modify.
Tambahkan variabel lingkungan berikut. Untuk informasi lebih lanjut, lihat Variabel lingkungan.
FC_EXTENSION_SLS_LOGGIE=true— Mengaktifkan pembekuan selama 10 detik setelah pemanggilan agar Loggie dapat menyelesaikan pengunggahan log. Lihat Penagihan untuk detail biaya. Enam variabel sink SLS yang dirujuk dalampipelines.yml:Variabel Deskripsi LOGGIE_SINK_SLS_ENDPOINTTitik akhir SLS untuk wilayah Anda LOGGIE_SINK_SLS_ACCESS_IDID AccessKey LOGGIE_SINK_SLS_ACCESS_SECRETRahasia AccessKey LOGGIE_SINK_SLS_PROJECTNama proyek SLS LOGGIE_SINK_SLS_LOGSTORENama Logstore SLS LOGGIE_SINK_SLS_TOPICTopik log Klik OK. Setelah konfigurasi disimpan, Loggie mulai meneruskan log fungsi ke SLS.
Langkah 5: Verifikasi hasil
Pada tab Code, klik Test Function. Pengiriman log pada pemanggilan pertama mungkin tertunda. Panggil fungsi beberapa kali agar Loggie dapat diinisialisasi dan mengosongkan log.
Masuk ke Konsol Layanan Log. Kueri log berdasarkan wilayah, proyek, dan Logstore yang Anda konfigurasikan dalam
pipelines.yml. Dalam hasil kueri, cari bidang-bidang berikut:Bidang Deskripsi bodyKonten log yang ditulis oleh fungsi Anda state.*Metadata tentang status pengumpulan log. Bidang hostnamedi bawahstateberisi ID instans tempat fungsi dijalankan.
Pemecahan Masalah
Loggie berjalan secara independen di dalam instans fungsi. Function Compute tidak memantau kesehatan Loggie, dan kegagalan Loggie tidak memengaruhi eksekusi fungsi. Kueri log di SLS mungkin mengalami latensi beberapa detik.
Jika log tidak muncul di SLS, gunakan langkah-langkah berikut untuk mendiagnosis masalah.
Log tidak muncul setelah fungsi dijalankan
Saat fungsi berjalan sukses, instans tetap aktif selama beberapa menit setelah pemanggilan. Masuk ke instans tersebut untuk memeriksa Loggie. Untuk petunjuknya, lihat Jalankan perintah untuk mengelola instans fungsi.
Periksa hal-hal berikut:
| Periksa | Tindakan |
|---|---|
| Loggie sedang berjalan | Jika /tmp/loggie.log tidak ada, jalankan Loggie secara manual dari command line. |
| Konfigurasi pipeline benar | Buka /code/etc/pipelines.yml dan verifikasi jalur sumber serta kredensial sink. |
| Sink SLS telah dimulai | Cari baris log yang mirip dengan pipeline sink(sink/sls)-0 invoke loop start di /tmp/loggie.log. |
| File log terdeteksi | Cari baris log yang mirip dengan start collect file: /tmp/log/fc-flask.log. Jika tidak ada, pastikan aplikasi Anda menulis file log ke jalur yang sesuai dengan pola paths di pipelines.yml. |
Fungsi gagal dijalankan
Untuk mengisolasi masalah, hapus logika startup Loggie dari file bootstrap dan uji apakah fungsi dapat berjalan sendiri. Loggie adalah ekstensi eksternal dan seharusnya tidak memengaruhi eksekusi fungsi. Jika Anda mengalami keluar proses yang tidak terduga atau timeout eksekusi, tingkatkan spesifikasi memori atau CPU untuk fungsi tersebut.
Referensi
Untuk mentransformasi log sebelum diunggah—misalnya, mengurai log JSON atau menyaring entri DEBUG—tambahkan konfigurasi interceptor ke
pipelines.yml. Untuk detailnya, lihat Referensi interceptor Loggie.