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
Function Compute: Buat layanan.
Simple Log Service: Buat proyek dan Buat logstore.
CatatanProyek log yang Anda buat harus berada di wilayah yang sama dengan fungsi yang ingin Anda buat di Langkah 1.
Prosedur
Langkah 1: Buat fungsi dalam runtime kustom
Masuk ke Konsol Function Compute. Di panel navigasi sisi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik Create Function.
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 direktoricodeadalahapp.py. Contoh kode berikut menunjukkan isi dariapp.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)CatatanAnda dapat mengubah
filename='/tmp/log/fc-flask.log'menjadi tipe log dan lokasi log sebenarnya dalam kode. Pastikan konfigurasi ini sesuai dengan jalursources.pathsyang dikonfigurasi di Langkah 2.Startup Command
/code/bootstrapCatatanFile bootstrap dibuat di Langkah 2.
Listening Port
9000
Langkah 2: Buat file bootstrap sebagai perintah mulai
Setelah fungsi dibuat, gunakan WebIDE pada tab Code untuk membuat file
bootstrapdi direktoriCODE.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.pySkrip melakukan operasi berikut:
Buat file pipelines.yml, yaitu file konfigurasi pipeline.
sourcesMenentukan jenis dan jalur log. Contoh ini menunjukkan cara mengumpulkan log dari semua file yang berakhiran .log di direktori /tmp/log.
sinkMenentukan informasi tentang Simple Log Service. Variabel dalam skrip disetel di Langkah 4.
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.
Mulai Loggie dan jalankan sebagai proses latar belakang. Log run Loggie dicetak ke file /tmp/loggie.log.
Mulai aplikasi. Dalam contoh ini, Python digunakan. Dalam skenario nyata, tentukan bahasa pemrograman yang ingin Anda gunakan.
Dapatkan izin eksekusi pada file
bootstrap.Di WebIDE, pilih dan jalankan perintah
chmod 777 bootstrapuntuk membuat file dapat dieksekusi.
Langkah 3: Tambahkan layer umum resmi Loggie
Klik tab Configurations. Di bagian Layers, klik Modify.
Di panel untuk mengubah layer, pilih 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
Klik OK.
Langkah 4: Atur variabel lingkungan
Di bagian Environment Variables dari tab Configurations, klik Modify.
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.
PentingAnda 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, danLOGGIE_SINK_SLS_TOPIC.
Klik OK. Setelah konfigurasi fungsi diperbarui, log eksekusi fungsi dapat diunggah ke Simple Log Service menggunakan Loggie.
Langkah 4: Verifikasi hasil
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.
Masuk ke Konsol Layanan Log dan kueri log berdasarkan konfigurasi wilayah, proyek, dan Logstore di file pipelines.yml. Gambar berikut menunjukkan contohnya.

body: log.state.*: metadata dari status pengumpulan log.hostnameadalah 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 konfigurasipathsdi file pipelines.yml.
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.