Mode sidecar menyuntikkan kontainer LoongCollector (Logtail) khusus ke dalam setiap pod aplikasi untuk pengumpulan log per-pod. Mode ini ideal ketika Anda memerlukan kontrol detail halus, isolasi multi-tenant, atau pengumpulan log yang terikat siklus hidup.
Cara kerja
Dalam mode sidecar, kontainer aplikasi dan kontainer LoongCollector (Logtail) berjalan berdampingan dalam satu pod, berbagi volume untuk akses log dan sinkronisasi siklus hidup.
-
Berbagi log: Kontainer aplikasi menulis log ke volume bersama (biasanya
emptyDir), yang dipasang oleh kontainer LoongCollector (Logtail) dalam mode read-only untuk dikumpulkan secara real time. -
Asosiasi konfigurasi: Setiap sidecar LoongCollector (Logtail) mendeklarasikan identitasnya melalui
custom identifierunik. Kelompok mesin di konsol SLS dengan identifier yang sama mendistribusikan konfigurasi pengumpulan ke semua sidecar yang sesuai. -
Sinkronisasi siklus hidup: File sinyal (
cornerstonedantombstone) dalam volume bersama mengoordinasikan shutdown kontainer. Bersama dengangraceful termination period(terminationGracePeriodSeconds), mereka memastikan LoongCollector (Logtail) menyelesaikan pengiriman log tersisa sebelum pod keluar.
Sebelum memulai
Buat Proyek dan LogStore untuk menyimpan log Anda. Jika sudah memiliki keduanya, langsung ke Langkah 1: Suntikkan Kontainer Sidecar LoongCollector.
-
Project: Unit manajemen resource di SLS yang mengisolasi log berdasarkan proyek atau layanan.
-
LogStore: Unit penyimpanan untuk log.
Buat proyek
Buat LogStore
Langkah 1: Suntikkan kontainer sidecar LoongCollector
Suntikkan kontainer sidecar LoongCollector ke dalam pod aplikasi Anda dengan volume bersama untuk pengumpulan log. Untuk pengujian cepat, gunakan Lampiran: contoh YAML.
1. Modifikasi konfigurasi YAML pod
-
Definisikan volume bersama
Di
spec.template.spec.volumes, tambahkan tiga volume bersama pada level yang sama dengancontainers:volumes: # Direktori log bersama (ditulis oleh kontainer aplikasi, dibaca oleh sidecar) - name: ${shared_volume_name} # <-- Nama harus sesuai dengan nama di volumeMounts emptyDir: {} # Direktori sinyal untuk komunikasi antar-kontainer (untuk mulai/berhenti mulus) - name: tasksite emptyDir: medium: Memory # Gunakan memori sebagai medium untuk performa lebih baik sizeLimit: "50Mi" # Konfigurasi zona waktu host bersama: Menyinkronkan zona waktu untuk semua kontainer dalam pod - name: tz-config # <-- Nama harus sesuai dengan nama di volumeMounts hostPath: path: /usr/share/zoneinfo/Asia/Shanghai # Ubah zona waktu sesuai kebutuhan -
Konfigurasikan pemasangan kontainer aplikasi
Di bagian
volumeMountskontainer aplikasi Anda, sepertiyour-business-app-container, tambahkan pemasangan volume berikut:Pastikan kontainer aplikasi menulis log ke direktori
${shared_volume_path}agar LoongCollector dapat mengumpulkannya.volumeMounts: # Pasang volume log bersama ke direktori output log aplikasi - name: ${shared_volume_name} mountPath: ${shared_volume_path} # Contoh: /var/log/app # Pasang direktori komunikasi - name: tasksite mountPath: /tasksite # Direktori bersama untuk komunikasi dengan kontainer LoongCollector # Pasang file zona waktu - name: tz-config mountPath: /etc/localtime readOnly: true -
Suntikkan kontainer sidecar LoongCollector
Di array
spec.template.spec.containers, tambahkan definisi kontainer sidecar berikut:- name: loongcollector image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun command: ["/bin/bash", "-c"] args: - | echo "[$(date)] LoongCollector: Starting initialization" # Mulai layanan LoongCollector /etc/init.d/loongcollectord start # Tunggu konfigurasi diunduh dan layanan siap sleep 15 # Verifikasi status layanan if /etc/init.d/loongcollectord status; then echo "[$(date)] LoongCollector: Service started successfully" touch /tasksite/cornerstone else echo "[$(date)] LoongCollector: Failed to start service" exit 1 fi # Tunggu kontainer aplikasi selesai (melalui sinyal file tombstone) echo "[$(date)] LoongCollector: Waiting for application container to complete" until [[ -f /tasksite/tombstone ]]; do sleep 2 done # Beri waktu untuk mengunggah log tersisa echo "[$(date)] LoongCollector: Business completed, waiting for log transmission" sleep 30 # Hentikan layanan echo "[$(date)] LoongCollector: Stopping service" /etc/init.d/loongcollectord stop echo "[$(date)] LoongCollector: Shutdown complete" # health check livenessProbe: exec: command: ["/etc/init.d/loongcollectord", "status"] initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # konfigurasi resource resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "2000m" memory: "2048Mi" # konfigurasi variabel lingkungan env: - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # Aktifkan mode full drain untuk memastikan semua log dikirim sebelum pod dihentikan - name: enable_full_drain_mode value: "true" # Tambahkan informasi lingkungan pod sebagai tag log - name: ALIYUN_LOG_ENV_TAGS value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # Secara otomatis menyuntikkan metadata pod dan node sebagai tag log - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP # Pemasangan volume (dibagi dengan kontainer aplikasi) volumeMounts: # Pemasangan read-only untuk direktori log aplikasi - name: ${shared_volume_name} # <-- Nama direktori log bersama mountPath: ${dir_containing_your_files} # <-- Path ke direktori bersama di sidecar readOnly: true # Pasang direktori komunikasi - name: tasksite mountPath: /tasksite # Pasang zona waktu - name: tz-config mountPath: /etc/localtime readOnly: true
2. Sesuaikan logika siklus hidup kontainer aplikasi
Bergantung pada jenis workload, modifikasi kontainer aplikasi untuk mendukung exit terkoordinasi dengan sidecar:
Tugas berumur pendek (Job/CronJob)
# 1. Tunggu LoongCollector siap
echo "[$(date)] Application: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Application: LoongCollector is ready, starting application logic"
# 2. Jalankan logika aplikasi inti (pastikan log ditulis ke direktori bersama)
echo "Hello, World!" >> /app/logs/business.log
# 3. Simpan kode exit
retcode=$?
echo "[$(date)] Application: Task completed with exit code: $retcode"
# 4. Beri tahu LoongCollector bahwa tugas aplikasi selesai
touch /tasksite/tombstone
echo "[$(date)] Application: Tombstone created, exiting"
exit $retcode
Layanan berumur panjang (Deployment / StatefulSet)
# Definisikan fungsi penanganan sinyal
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Kirim sinyal QUIT ke Nginx untuk berhenti mulus
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
# Tunggu Nginx berhenti secara mulus
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
fi
# Beri tahu LoongCollector bahwa kontainer aplikasi telah berhenti
echo "[$(date)] [nginx-demo] Writing tombstone file"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Daftarkan penanganan sinyal
trap _term_handler SIGTERM SIGINT SIGQUIT
# Tunggu LoongCollector siap
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting application logic"
# Mulai Nginx
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Tunggu proses Nginx
wait $NGINX_PID
EXIT_CODE=$?
# Juga beri tahu LoongCollector jika exit tidak disebabkan oleh sinyal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
3. Atur periode tenggang terminasi
Di spec.template.spec, atur periode tenggang terminasi yang cukup lama agar LoongCollector dapat mengunggah semua log tersisa.
spec:
# ... Konfigurasi spec lainnya ...
template:
spec:
terminationGracePeriodSeconds: 600 # Periode berhenti mulus 10 menit4. Variabel
|
Parameter |
Deskripsi |
|
|
ID akun Alibaba Cloud Anda. Konfigurasi pengenal pengguna. |
|
|
Pengenal kustom yang digunakan untuk membuat kelompok mesin. Contoh: Penting
Pastikan pengenal ini unik dalam wilayah Proyek. |
|
|
Konfigurasi yang sesuai dengan wilayah dan jenis akses jaringan Proyek SLS Anda. Wilayah layanan. Contoh: Jika Proyek Anda berada di wilayah China (Hangzhou), gunakan |
|
|
Nama kustom untuk volume bersama. Penting
|
|
|
Path pemasangan di kontainer LoongCollector tempat log teks berada. |
5. Terapkan konfigurasi dan verifikasi
-
Jalankan perintah berikut untuk menerapkan perubahan:
kubectl apply -f <YOUR-YAML> -
Periksa status pod untuk memastikan kontainer LoongCollector berhasil disuntikkan:
kubectl describe pod <YOUR-POD-NAME>Jika Anda melihat dua kontainer (kontainer aplikasi dan
loongcollector) dengan status Running, suntikan berhasil.
Langkah 2: Buat kelompok mesin dengan pengenal kustom
Mendaftarkan instance sidecar LoongCollector ke SLS untuk manajemen konfigurasi pengumpulan terpusat.
Prosedur
-
Buat kelompok mesin
-
Buka proyek target. Di panel navigasi kiri, klik
. -
Di halaman Machine Groups, klik
> Create Machine Group.
-
-
Konfigurasikan kelompok mesin
Konfigurasikan parameter berikut dan klik OK:
-
Name: Nama kelompok mesin. Tidak dapat diubah setelah dibuat. Nama harus memenuhi persyaratan berikut:
-
Hanya berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).
-
Dimulai dan diakhiri dengan huruf kecil atau angka.
-
Panjang 2 hingga 128 karakter.
-
-
Machine Group Identifier: Pilih Custom Identifier.
-
Custom Identifier: Masukkan nilai variabel lingkungan
ALIYUN_LOGTAIL_USER_DEFINED_IDyang Anda atur untuk kontainer LoongCollector dalam file YAML di Langkah 1. Nilai harus persis sama. Jika tidak, asosiasi akan gagal.
-
-
Periksa status heartbeat kelompok mesin
Setelah membuat kelompok mesin, klik namanya untuk memeriksa status heartbeat di bagian Status Kelompok Mesin.
-
OK: LoongCollector telah terhubung ke SLS, dan kelompok mesin terdaftar.
-
FAIL:
-
Perubahan konfigurasi mungkin memerlukan waktu hingga dua menit untuk berlaku. Muat ulang halaman dan periksa status lagi.
-
Jika status masih FAIL setelah dua menit, lihat Troubleshoot Logtail machine group issues.
-
-
Setiap pod berhubungan dengan instance LoongCollector terpisah. Untuk manajemen detail halus, gunakan pengenal kustom berbeda untuk aplikasi atau lingkungan berbeda.
Langkah 3: Buat konfigurasi pengumpulan
Konfigurasi pengumpulan menentukan file log mana yang dikumpulkan LoongCollector, cara menguraikannya, dan konten mana yang difilter.
Prosedur
-
Di halaman
LogStore, klik
sebelum nama LogStore target untuk memperluas. -
Klik
di samping Data Collection. Di kotak dialog Quick Data Import, temukan kartu Kubernetes - File dan klik Integrate Now. -
Konfigurasikan Machine Group Configurations, lalu klik Next.
-
Scenario: Pilih Kubernetes Clusters.
-
Deployment Method: Pilih Sidecar.
-
Select Machine Group: Di daftar Source Machine Group, pilih kelompok mesin yang Anda buat di Langkah 2. Klik
untuk memindahkannya ke daftar Applied Machine Group.
-
-
Di halaman Logtail Configurations, konfigurasikan aturan pengumpulan Logtail.
1. Konfigurasi global dan input
Definisikan nama, sumber log, dan cakupan pengumpulan untuk konfigurasi pengumpulan.
Global Configurations:
Configuration Name: Nama kustom untuk konfigurasi pengumpulan. Harus unik dalam proyeknya. Nama tidak dapat diubah setelah dibuat. Konvensi penamaan:
Hanya boleh berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).
Harus dimulai dan diakhiri dengan huruf kecil atau angka.
Input Configurations:
-
Type: Pilih Text Log Collection.
-
Logtail Deployment Mode: Pilih Sidecar.
-
File Path Type:
-
Path in Container: Kumpulkan file log dari dalam kontainer.
-
Host Path: Kumpulkan log layanan lokal dari host.
-
dockerFile: Jika file log yang ingin Anda kumpulkan berada di dalam kontainer (lihat opsi path kontainer di atas), Anda harus mengaturdockerFile: trueuntuk konfigurasi pengumpulan. Jika tidak, Logtail memproses konfigurasi sebagai pengumpulan file biasa dan tidak dapat mendeteksi file log di dalam kontainer, yang mengakibatkan log hilang.-
Console: Di Advanced Options, pilih pengumpulan file kontainer. Atau, konsol juga menyediakan titik masuk pengumpulan data terpisah Docker File - Container.
-
CRD: Atur
dockerFile: truedi bawahinputDetail.
-
-
-
File Path: Path untuk pengumpulan log.
-
Linux: Path harus dimulai dengan garis miring (/). Contoh,
/data/mylogs/**/*.logmenentukan semua file yang memiliki ekstensi .log di direktori/data/mylogsdan subdirektorinya. -
Windows: Path harus dimulai dengan huruf drive, seperti
C:\Program Files\Intel\**\*.Log.
-
-
Maximum Directory Monitoring Depth: Menentukan kedalaman direktori maksimum untuk karakter wildcard
**di File Path. Nilai default 0 hanya memantau direktori saat ini. -
dockerFile: Menentukan apakah file target berada di dalam kontainer. Saat Anda mengumpulkan file log dari dalam kontainer dalam mode Sidecar, Anda harus mengatur parameter ini ketrue. Jika tidak, file dikumpulkan sebagai file host biasa, yang tidak sesuai dengan perilaku pengumpulan yang diharapkan. Tipe: Boolean. Wajib: Tidak. Nilai default:false.
2. Pemrosesan dan strukturisasi log
Konfigurasikan aturan pemrosesan log untuk mengubah log mentah yang tidak terstruktur menjadi data terstruktur yang dapat dicari. Ini meningkatkan efisiensi kueri dan analisis log. Kami merekomendasikan Anda menambahkan sampel log sebelum mengonfigurasi aturan:
Di halaman Logtail Configuration, di area Processor Configurations, klik Add Sample Log dan masukkan konten log yang akan dikumpulkan. Sistem mengidentifikasi format log berdasarkan sampel dan membantu menghasilkan ekspresi reguler dan aturan penguraian, yang menyederhanakan konfigurasi.
Skenario 1: Tangani log multi-baris (seperti stack trace Java)
Log seperti stack exception Java dan objek JSON sering kali mencakup beberapa baris. Dalam mode pengumpulan default, log tersebut dipisah menjadi beberapa catatan tidak lengkap, yang menyebabkan kehilangan konteks. Untuk mencegah hal ini, Anda dapat mengaktifkan mode multi-baris dan mengonfigurasi ekspresi reguler awal-baris untuk menggabungkan baris berurutan dari log yang sama menjadi satu entri lengkap.
Contoh:
Log mentah tanpa pemrosesan | Dalam mode pengumpulan default, setiap baris diperlakukan sebagai log independen. Stack trace terpecah, dan konteks hilang. | Dengan mode multi-baris diaktifkan, ekspresi reguler awal-baris mengidentifikasi log lengkap, mempertahankan struktur semantik penuh. |
| Dalam mode default, log ini dipisah menjadi 6 catatan independen: yang pertama hanya berisi pesan error | Setelah mode multi-baris diaktifkan, log error |
Prosedur: Di halaman Logtail Configuration, di area Processor Configurations, aktifkan Multi-line Mode:
Type: Pilih Custom atau Multi-line JSON.
Custom: Format log mentah tidak tetap. Anda harus mengonfigurasi Regex to Match First Line untuk mengidentifikasi baris awal setiap entri log.
Regex to Match First Line: Anda dapat menghasilkannya secara otomatis atau memasukkannya secara manual. Ekspresi reguler harus cocok dengan satu baris data lengkap. Contohnya, ekspresi reguler yang cocok dalam contoh sebelumnya adalah
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*.Generasi otomatis: Klik Generate Regex Automatically. Lalu, di kotak teks Log Sample, pilih konten log untuk diekstrak dan klik Generate Regex.
Mode pengumpulan output standar Kubernetes lama tidak mendukung fitur Add Log Sample dan generasi ekspresi reguler otomatis. Untuk menguji ekspresi reguler, buat LogStore tipe log teks, uji ekspresi reguler di LogStore tersebut, lalu tempel ekspresi reguler ke konfigurasi Logtail LogStore target.
Input manual: Klik Enter Regex Manually. Setelah memasukkan ekspresi, klik Validate.
Multi-line JSON: Saat semua log mentah dalam format JSON standar, Simple Log Service secara otomatis menangani line break dalam satu log JSON.
Processing Method If Splitting Fails:
Discard: Jika segmen teks tidak cocok dengan aturan awal-baris, segmen tersebut dibuang.
Retain Single Line: Teks yang tidak cocok dipisah dan dipertahankan dalam mode single-line aslinya.
Skenario 2: Log terstruktur
Saat log mentah berupa teks tidak terstruktur atau semi-terstruktur, seperti log akses NGINX atau log output aplikasi, kueri dan analisis langsung seringkali tidak efisien. Simple Log Service menyediakan berbagai plugin penguraian data yang dapat secara otomatis mengonversi log mentah dengan format berbeda menjadi data terstruktur. Ini memberikan fondasi kuat untuk analisis, pemantauan, dan peringatan selanjutnya.
Contoh:
Log mentah tanpa pemrosesan | Log setelah penguraian terstruktur |
| |
Langkah konfigurasi: Di area Processor Configurations halaman Logtail Configurations:
-
Tambahkan plugin penguraian: Klik Add Processor, dan konfigurasikan plugin seperti plugin penguraian ekspresi reguler, delimiter, atau JSON berdasarkan format log Anda. Misalnya, untuk mengumpulkan log NGINX, pilih .
-
NGINX Log Configuration: Salin seluruh definisi
log_formatdari file konfigurasi server Nginx Anda (nginx.conf) dan tempel ke kotak teks ini.Contoh:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';PentingDefinisi format harus persis sesuai dengan log_format di server Anda. Jika tidak, penguraian akan gagal.
-
Deskripsi parameter konfigurasi umum: Parameter berikut umum untuk banyak plugin penguraian dan memiliki fungsi konsisten.
-
Original Field: Menentukan bidang sumber yang akan diurai. Default ke
content, yaitu seluruh entri log yang dikumpulkan. -
Retain Original Field if Parsing Fails: Direkomendasikan. Jika plugin gagal mengurai log, opsi ini mempertahankan konten log mentah di bidang aslinya.
-
Retain Original Field if Parsing Succeeds: Jika dipilih, opsi ini mempertahankan konten log mentah bahkan setelah penguraian berhasil.
-
3. Filtering log
Volume besar log bernilai rendah (seperti tingkat DEBUG atau INFO) membuang penyimpanan, meningkatkan biaya, mengurangi efisiensi kueri, dan menimbulkan risiko kebocoran data. Konfigurasikan kebijakan filtering untuk pengumpulan log yang efisien dan aman.
Filtering konten
Anda dapat melakukan filter berdasarkan bidang konten log, seperti hanya mengumpulkan log dengan tingkat WARNING atau ERROR.
Contoh:
Log mentah tanpa pemrosesan | Kumpulkan hanya log |
| |
Prosedur: Di area Processor Configurations halaman Logtail Configuration
Klik Add Processor dan pilih :
Field Name: Bidang log yang akan difilter.
Field Value: Ekspresi reguler yang digunakan untuk filtering. Hanya pencocokan teks penuh yang didukung. Pencocokan kata kunci parsial tidak didukung.
Daftar hitam pengumpulan
Anda dapat menggunakan daftar hitam untuk mengecualikan direktori atau file tertentu, yang mencegah log tidak relevan atau sensitif diunggah.
Prosedur: Di halaman Logtail Configuration, di area , aktifkan Collection Blacklist dan klik Add.
Mendukung pencocokan penuh dan pencocokan wildcard untuk direktori dan nama file. Hanya karakter wildcard asterisk (*) dan tanda tanya (?) yang didukung.
File Path Blacklist: Path file yang akan diabaikan. Contoh:
/home/admin/private*.log: Mengabaikan semua file di direktori/home/admin/yang dimulai dengan "private" dan diakhiri dengan ".log"./home/admin/private*/*_inner.log: Mengabaikan file yang diakhiri dengan "_inner.log" di direktori yang dimulai dengan "private" di bawah direktori/home/admin/.
File Blacklist: Nama file yang akan diabaikan selama pengumpulan. Contoh:
app_inner.log: Mengabaikan semua file bernamaapp_inner.log.
Directory Blacklist: Path direktori tidak boleh diakhiri dengan garis miring (/). Contoh:
/home/admin/dir1/: Daftar hitam direktori tidak akan berlaku./home/admin/dir*: Mengabaikan file di semua subdirektori di bawah/home/admin/yang dimulai dengan "dir"./home/admin/*/dir: Mengabaikan semua file di subdirektori bernama "dir" di tingkat kedua di bawah direktori/home/admin/. Misalnya, file di direktori/home/admin/a/dirdiabaikan, sedangkan file di direktori/home/admin/a/b/dirdikumpulkan.
Filtering kontainer
Atur kondisi pengumpulan berdasarkan metadata kontainer (variabel lingkungan, label Pod, namespace, nama kontainer) untuk mengontrol log kontainer mana yang dikumpulkan.
Langkah konfigurasi: Di halaman Logtail Configurations, di area Input Configurations, aktifkan Container Filtering dan klik Add.
Beberapa kondisi memiliki hubungan "AND". Semua pencocokan ekspresi reguler berdasarkan mesin ekspresi reguler RE2 Go, yang memiliki beberapa keterbatasan dibandingkan mesin seperti PCRE. Ikuti panduan di Lampiran: Batasan ekspresi reguler (filtering kontainer) saat menulis ekspresi reguler.
-
Daftar hitam/putih variabel lingkungan: Filter kontainer berdasarkan variabel lingkungannya.
-
Daftar hitam/putih label Pod K8s: Filter kontainer berdasarkan label Pod hostnya.
-
Pencocokan regex nama Pod K8s: Filter kontainer berdasarkan nama Pod-nya.
-
Pencocokan regex namespace K8s: Filter kontainer berdasarkan namespace-nya.
-
Pencocokan regex nama kontainer K8s: Filter kontainer berdasarkan namanya.
-
Daftar hitam/putih label kontainer: Filter kontainer berdasarkan labelnya. Metode ini ditujukan untuk Docker dan tidak direkomendasikan untuk Kubernetes.
4. Klasifikasi log
Saat beberapa aplikasi berbagi format log yang sama, membedakan sumber log bisa sulit. Konfigurasikan topik log dan tagging log untuk mengotomatiskan asosiasi konteks dan klasifikasi logis.
Topik log
Saat beberapa aplikasi memiliki log dengan format yang sama tetapi path berbeda (seperti /apps/app-A/run.log dan /apps/app-B/run.log), hasilkan topik untuk membedakan log dari setiap layanan.
Prosedur: Di , pilih metode untuk menghasilkan topik. Tiga tipe berikut didukung:
Machine group topic: Saat konfigurasi pengumpulan diterapkan ke beberapa kelompok mesin, LoongCollector secara otomatis menggunakan nama kelompok mesin server sebagai bidang
__topic__untuk diunggah. Ini cocok untuk skenario di mana log dikategorikan berdasarkan host.Custom: Formatnya
customized://<custom_topic_name>, misalnya,customized://app-login. Ini cocok untuk skenario topik statis dengan pengenal layanan tetap.File path extraction: Ekstrak informasi kunci dari path lengkap file log untuk secara dinamis menandai sumber log. Ini cocok untuk situasi di mana beberapa pengguna atau aplikasi berbagi nama file log yang sama tetapi memiliki path berbeda. Saat beberapa pengguna atau layanan menulis log ke direktori tingkat atas berbeda tetapi sub-path dan nama file sama, sumber tidak dapat dibedakan hanya berdasarkan nama file. Misalnya:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.logDalam kasus ini, Anda dapat mengonfigurasi File path extraction dan menggunakan ekspresi reguler untuk mengekstrak informasi kunci dari path lengkap. Hasil yang cocok kemudian diunggah ke Logstore sebagai topik.
Aturan ekstraksi path file: Berdasarkan capturing groups ekspresi reguler
Saat Anda mengonfigurasi ekspresi reguler, sistem secara otomatis menentukan format bidang output berdasarkan jumlah dan penamaan capturing groups. Aturannya sebagai berikut:
Dalam ekspresi reguler untuk path file, Anda perlu meng-escape garis miring (/).
Jenis capturing group
Skenario
Bidang yang dihasilkan
Contoh regex
Contoh path yang cocok
Contoh bidang yang dihasilkan
Single capturing group (hanya satu
(.*?))Hanya satu dimensi yang dibutuhkan untuk membedakan sumber (seperti username, environment)
Menghasilkan bidang
__topic__\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__: userAMultiple non-named capturing groups (beberapa
(.*?))Beberapa dimensi dibutuhkan untuk membedakan sumber, tetapi tidak memerlukan tag semantik
Menghasilkan bidang tag
__tag__:__topic_{i}__, di mana{i}adalah nomor urut capturing group\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__userA__tag__:__topic_2__svcAMultiple named capturing groups (menggunakan
(?P<name>.*?))Beberapa dimensi dibutuhkan untuk membedakan sumber, dan Anda ingin makna bidang jelas untuk memudahkan kueri dan analisis
Menghasilkan bidang tag
__tag__:{name}\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log/logs/userA/svcA/app.log__tag__:user:userA;__tag__:service:svcA
Tagging log
Aktifkan enrichment tag log untuk mengekstrak informasi kunci dari variabel lingkungan kontainer atau label Pod Kubernetes sebagai tag untuk pengelompokan log detail halus.
Langkah konfigurasi: Di area Input Configurations halaman Logtail Configurations, aktifkan Log Tag Enrichment dan klik Add.
-
Environment Variables: Konfigurasikan nama variabel lingkungan dan nama tag. Nilai variabel lingkungan disimpan sebagai nilai tag.
-
Nama Variabel Lingkungan: Nama variabel lingkungan yang akan diekstrak.
-
Nama Tag: Nama tag.
-
-
Pod Labels: Konfigurasikan nama label Pod dan nama tag. Nilai label Pod disimpan sebagai nilai tag.
-
Nama Label Pod: Nama label Pod Kubernetes yang akan diekstrak.
-
Nama Tag: Nama tag.
-
5. Konfigurasi output
Secara default, semua log dikirim ke LogStore saat ini dengan kompresi lz4. Untuk mendistribusikan log ke beberapa LogStore, konfigurasikan tujuan output tambahan.
Distribusi multi-tujuan dinamis
-
Distribusi multi-tujuan hanya tersedia untuk LoongCollector 3.0.0 ke atas. Fitur ini tidak didukung oleh Logtail.
-
Anda dapat mengonfigurasi maksimal lima tujuan output.
-
Setelah mengonfigurasi beberapa tujuan output, konfigurasi pengumpulan tidak lagi muncul di daftar konfigurasi pengumpulan untuk LogStore saat ini. Untuk melihat, memodifikasi, atau menghapus konfigurasi distribusi multi-tujuan, lihat Manage multi-destination distribution configurations.
Langkah konfigurasi: Di area Output Configurations halaman Logtail Configurations.
-
Klik
untuk memperluas konfigurasi output. -
Klik Add Output Targets dan lengkapi konfigurasi berikut:
-
Logstores: Pilih LogStore tujuan.
-
Compression Method: lz4 dan zstd didukung.
-
Route Settings: Rute log berdasarkan bidang tag. Sistem mengunggah log yang cocok ke LogStore tujuan. Jika konfigurasi ini kosong, sistem mengunggah semua log yang dikumpulkan ke tujuan ini.
-
Tag Name: Nama bidang tag yang digunakan untuk routing. Masukkan hanya nama bidang (misalnya,
__path__), tanpa awalan__tag__:. Bidang tag terbagi menjadi dua kategori:Tag dijelaskan di Manage LoongCollector collection tags.
-
Terkait Agen: Terkait agen pengumpulan dan independen dari plugin. Contoh termasuk
__hostname__dan__user_defined_id__. -
Terkait Plugin Input: Disediakan oleh plugin input untuk memperkaya log dengan informasi kontekstual. Contoh termasuk
__path__untuk pengumpulan file dan_pod_name_atau_container_name_untuk pengumpulan Kubernetes.
-
-
Tag Value: Jika bidang tag log cocok dengan nilai ini, sistem mengirim log ke LogStore tujuan ini.
-
Discard this tag?: Jika diaktifkan, sistem menghapus bidang tag ini dari log sebelum mengunggahnya.
-
-
Langkah 4: Konfigurasi kueri dan analisis
Setelah Anda mengonfigurasi pemrosesan log dan plugin, klik Next untuk menuju halaman Query and Analysis Configurations:
Sistem mengaktifkan full-text index secara default, yang memungkinkan Anda melakukan pencarian kata kunci pada konten log asli.
Untuk melakukan kueri tepat berdasarkan bidang, tunggu Preview Data dimuat di halaman, lalu klik Automatic Index Generation. Simple Log Service menghasilkan field index berdasarkan entri pertama dalam data pratinjau.
Setelah konfigurasi selesai, klik Next untuk menyelesaikan konfigurasi pengumpulan.
Langkah 5: Lihat log yang diunggah
Setelah Anda membuat konfigurasi pengumpulan dan menerapkannya ke kelompok mesin, konfigurasi tersebut diterapkan secara otomatis dan mulai mengumpulkan log inkremental.
-
Verifikasi entri log baru: LoongCollector hanya mengumpulkan log inkremental. Jalankan
tail -f /path/to/your/log/filedan gunakan aplikasi Anda untuk menghasilkan entri log baru. -
Kueri log: Buka halaman Search & Analyze LogStore target dan klik Search & Analyze. Rentang waktu default adalah 15 menit terakhir. Periksa apakah log baru muncul. Bidang default untuk log teks kontainer adalah sebagai berikut:
Parameter
Deskripsi
tag:hostname
Nama host kontainer.
tag:path
Path file log di dalam kontainer.
tag:container_ip
Alamat IP kontainer.
tag:image_name
Nama image yang digunakan oleh kontainer.
CatatanJika beberapa image memiliki hash yang sama tetapi nama atau tag berbeda, konfigurasi pengumpulan memilih salah satu nama berdasarkan hash. Nama yang dipilih tidak dijamin sesuai dengan yang didefinisikan dalam file YAML.
tag:pod_name
Nama pod.
tag:namespace
Namespace tempat pod berada.
tag:pod_uid
Pengenal unik (UID) pod.
Konfigurasi utama untuk integritas log
Parameter konfigurasi ini secara langsung memengaruhi integritas dan keandalan pengumpulan log.
Konfigurasi resource LoongCollector
Alokasi resource yang tepat sangat penting untuk performa pengumpulan dalam skenario volume tinggi. Parameter utama:
# Konfigurasikan resource CPU dan memori berdasarkan laju pembuatan log
resources:
limits:
cpu: "2000m"
memory: "2Gi"
# Parameter yang memengaruhi performa pengumpulan
env:
- name: cpu_usage_limit
value: "2"
- name: mem_usage_limit
value: "2048"
- name: max_bytes_per_sec
value: "209715200"
- name: process_thread_count
value: "8"
- name: send_request_concurrency
value: "20"
Untuk mengonfigurasi Logtail berdasarkan volume data Anda, lihat Logtail network types, startup parameters, and configuration files.
Konfigurasi kuota sisi server
Batas kuota sisi server atau masalah jaringan dapat memblokir transmisi data, menciptakan tekanan balik yang memengaruhi integritas log. Gunakan CloudLens for SLS untuk memantau kuota resource Project.
Optimasi konfigurasi pengumpulan awal
Kebijakan pengumpulan file awal saat startup pod memengaruhi integritas log, terutama dalam skenario throughput tinggi.
Ukuran pengumpulan awal menentukan di mana pengumpulan dimulai dalam file baru. Default: 1024 KB.
-
Jika file lebih kecil dari 1024 KB, pengumpulan dimulai dari awal.
-
Jika file lebih besar dari 1024 KB, pengumpulan dimulai 1024 KB dari akhir.
-
Ukuran pengumpulan awal dapat berkisar dari 0 hingga 10.485.760 KB (10 GB).
enable_full_drain_mode
Memastikan LoongCollector menyelesaikan semua pengumpulan dan transmisi data sebelum dihentikan setelah menerima sinyal SIGTERM.
# Parameter yang memengaruhi integritas pengumpulan
env:
- name: enable_full_drain_mode
value: "true" # Aktifkan mode full drain
FAQ
Manage multi-destination distribution configurations
Konfigurasi distribusi multi-tujuan berlaku untuk beberapa LogStore dan harus dikelola di tingkat Project:
-
Masuk ke Konsol Log Service, lalu klik nama Project tujuan.
-
Di halaman Project target, di panel navigasi kiri, klik
.CatatanHalaman ini mengelola terpusat semua konfigurasi pengumpulan dalam Project, termasuk yang tersisa setelah LogStore dihapus.
Langkah selanjutnya
-
Visualisasi data: Gunakan dasbor visualisasi untuk memantau tren metrik utama.
-
Peringatan otomatis untuk anomali data: Siapkan kebijakan peringatan untuk mendeteksi anomali sistem secara real time.
-
SLS hanya mengumpulkan log inkremental. Untuk mengumpulkan log historis, lihat Import historical log files.
Lampiran: Contoh YAML
Konfigurasi Kubernetes lengkap dengan kontainer aplikasi Nginx dan kontainer sidecar LoongCollector.
Sebelum menggunakan konfigurasi ini, ganti placeholder berikut:
-
Ganti
${your_aliyun_user_id}dengan ID akun Alibaba Cloud Anda. -
Ganti
${your_machine_group_user_defined_id}dengan pengenal kustom kelompok mesin yang Anda buat di Langkah 3 . Nilai harus persis sama. -
Ganti
${your_region_config}dengan nama konfigurasi yang sesuai dengan wilayah dan jenis jaringan proyek SLS Anda.Contoh: Jika proyek Anda berada di wilayah China (Hangzhou), gunakan
cn-hangzhouuntuk akses jaringan internal ataucn-hangzhou-internetuntuk akses jaringan publik.
Tugas berumur pendek (Job/CronJob)
apiVersion: batch/v1
kind: Job
metadata:
name: demo-job
spec:
backoffLimit: 3
activeDeadlineSeconds: 3600
completions: 1
parallelism: 1
template:
spec:
restartPolicy: Never
terminationGracePeriodSeconds: 300
containers:
# Kontainer aplikasi
- name: demo-job
image: debian:bookworm-slim
command: ["/bin/bash", "-c"]
args:
- |
# Tunggu LoongCollector siap.
echo "[$(date)] Business: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Business: LoongCollector is ready, starting business logic"
# Jalankan logika aplikasi.
echo "Hello, World!" >> /app/logs/business.log
# Simpan kode exit.
retcode=$?
echo "[$(date)] Business: Task completed with exit code: $retcode"
# Beri tahu LoongCollector bahwa tugas selesai.
touch /tasksite/tombstone
echo "[$(date)] Business: Tombstone created, exiting"
exit $retcode
# Permintaan dan batas resource
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500"
memory: "512Mi"
# pemasangan volume
volumeMounts:
- name: app-logs
mountPath: /app/logs
- name: tasksite
mountPath: /tasksite
# Kontainer sidecar LoongCollector
- name: loongcollector
image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Starting initialization"
# Mulai layanan LoongCollector.
/etc/init.d/loongcollectord start
# Tunggu konfigurasi diunduh dan layanan siap.
sleep 15
# Verifikasi status layanan.
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Service started successfully"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Failed to start service"
exit 1
fi
# Tunggu kontainer aplikasi selesai.
echo "[$(date)] LoongCollector: Waiting for business container to complete"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
# Beri waktu cukup untuk mengirim log tersisa.
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# health check
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Permintaan dan batas resource
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
# variabel lingkungan
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "your-user-id"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "your-user-defined-id"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
- name: ALIYUN_LOG_ENV_TAGS
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
# Suntikkan metadata pod.
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# pemasangan volume
volumeMounts:
- name: app-logs
mountPath: /app/logs
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Definisi volume
volumes:
- name: app-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "10Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Layanan berumur panjang (Deployment / StatefulSet)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
namespace: production
labels:
app: nginx-demo
version: v1.0.0
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
version: v1.0.0
spec:
terminationGracePeriodSeconds: 600 # Periode shutdown mulus 10 menit
containers:
# Kontainer aplikasi - Aplikasi web
- name: nginx-demo
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
# Perintah startup dan penanganan sinyal
command: ["/bin/sh", "-c"]
args:
- |
# Definisikan penanganan sinyal.
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Kirim sinyal QUIT ke Nginx untuk berhenti mulus.
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
# Tunggu Nginx berhenti secara mulus.
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
fi
# Beri tahu LoongCollector bahwa kontainer aplikasi telah berhenti.
echo "[$(date)] [nginx-demo] Writing tombstone file"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Daftarkan penanganan sinyal.
trap _term_handler SIGTERM SIGINT SIGQUIT
# Tunggu LoongCollector siap.
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting business logic"
# Mulai Nginx.
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Tunggu proses Nginx keluar.
wait $NGINX_PID
EXIT_CODE=$?
# Jika proses keluar tanpa sinyal, beri tahu LoongCollector.
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
# Permintaan dan batas resource
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
# pemasangan volume
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Kontainer sidecar LoongCollector
- name: loongcollector
image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Starting initialization"
# Mulai layanan LoongCollector.
/etc/init.d/loongcollectord start
# Tunggu konfigurasi diunduh dan layanan siap.
sleep 15
# Verifikasi status layanan.
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Service started successfully"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Failed to start service"
exit 1
fi
# Tunggu kontainer aplikasi selesai.
echo "[$(date)] LoongCollector: Waiting for business container to complete"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
# Beri waktu cukup untuk mengirim log tersisa.
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# health check
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Permintaan dan batas resource
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "2000m"
memory: "2048Mi"
# variabel lingkungan
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "${your_aliyun_user_id}"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "${your_machine_group_user_defined_id}"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
# Aktifkan mode full drain untuk mengirim semua log saat pod berhenti.
- name: enable_full_drain_mode
value: "true"
# Tambahkan informasi lingkungan pod sebagai tag log.
- name: "ALIYUN_LOG_ENV_TAGS"
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
# Dapatkan informasi pod dan node.
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "_node_ip_"
valueFrom:
fieldRef:
fieldPath: status.hostIP
# pemasangan volume
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Definisi volume
volumes:
- name: nginx-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "50Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Lampiran: Prosesor native
Di halaman Logtail Configuration, di area Processor Configurations, Anda dapat menambahkan plugin pemrosesan untuk menstrukturisasi log mentah. Untuk menambahkan plugin pemrosesan ke konfigurasi pengumpulan yang ada, ikuti langkah-langkah berikut:
Di panel navigasi kiri, pilih
Logstores dan temukan Logstore tujuan.Klik
di sebelah kiri namanya untuk memperluas Logstore.Klik Logtail Configuration. Di daftar konfigurasi, temukan konfigurasi Logtail tujuan dan klik Manage Logtail Configuration di kolom Actions.
Di halaman konfigurasi Logtail, klik Edit.
Bagian ini hanya memperkenalkan plugin pemrosesan yang umum digunakan yang mencakup skenario pemrosesan log umum. Untuk fitur lebih lanjut, lihat Extension processing plug-ins.
Aturan menggabungkan plugin (berlaku untuk LoongCollector / Logtail 2.0 ke atas):
Plugin pemrosesan native dan ekstensi dapat digunakan secara independen atau dikombinasikan sesuai kebutuhan.
Kami merekomendasikan Anda menggunakan plugin pemrosesan native terlebih dahulu, karena menawarkan performa lebih baik dan stabilitas lebih tinggi.
Saat fitur native tidak dapat memenuhi kebutuhan bisnis, Anda dapat menambahkan plugin pemrosesan ekstensi setelah plugin native yang dikonfigurasi untuk melakukan pemrosesan tambahan.
Batasan urutan:
Semua plugin dijalankan secara berurutan sesuai urutan konfigurasinya, yang membentuk rantai pemrosesan. Catatan: Semua plugin pemrosesan native harus mendahului plugin pemrosesan ekstensi apa pun. Setelah Anda menambahkan plugin pemrosesan ekstensi, Anda tidak dapat menambahkan plugin pemrosesan native lagi.
Penguraian regex
Gunakan ekspresi reguler untuk mengekstrak bidang dari log menjadi pasangan kunci-nilai untuk kueri dan analisis independen.
Contoh:
Log mentah tanpa pemrosesan | Menggunakan plugin penguraian ekspresi reguler |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configurations, klik Add Processor dan pilih .
-
Regular Expression: Ekspresi reguler untuk mencocokkan konten log. Anda dapat menghasilkannya secara otomatis atau memasukkannya secara manual.
-
Hasilkan otomatis:
-
Klik Generate.
-
Di kotak Log Sample, pilih konten log untuk diekstrak.
-
Klik Generate Regular Expression.
Sebagai contoh, jika Anda menempelkan log dalam format Apache Combined ke kotak Log Sample, log tersebut akan berisi bidang seperti IP klien, timestamp, metode dan path permintaan, kode status, Referer, dan User-Agent.
-
-
Input manual: Manually Enter Regular Expression berdasarkan format log.
Setelah memasukkan ekspresi, klik Validate untuk menguji apakah ekspresi tersebut mengurai konten log dengan benar.
-
-
Extracted Field: Atur nama bidang (kunci) untuk setiap bagian konten log yang diekstrak (nilai).
-
Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Use case 2: Structured logs.
Penguraian delimiter
Gunakan penguraian delimiter untuk memisah konten log menjadi pasangan kunci-nilai. Mendukung delimiter karakter tunggal dan multi-karakter.
Contoh:
Log mentah tanpa pemrosesan | Pisahkan bidang dengan karakter yang ditentukan |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configurations, klik Add Processor dan pilih .
-
Delimiter: Karakter yang digunakan untuk memisah konten log.
Contoh: Untuk file CSV, pilih Custom dan masukkan koma (,).
-
Quote: Saat nilai bidang berisi delimiter, Anda harus menentukan karakter quote untuk membungkus bidang guna mencegah pemisahan salah.
-
Extracted Field: Tetapkan nama bidang (kunci) untuk setiap kolom secara berurutan. Nama bidang harus memenuhi aturan berikut:
-
Hanya boleh berisi huruf, angka, dan garis bawah (_).
-
Harus dimulai dengan huruf atau garis bawah (_).
-
Panjang maksimal 128 byte.
-
-
Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Use case 2: Structured logs.
Penguraian JSON
Mengurai log yang diformat sebagai objek JSON menjadi pasangan kunci-nilai.
Contoh:
Log mentah tanpa pemrosesan | Ekstraksi otomatis kunci-nilai JSON standar |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configurations, klik Add Processor dan pilih .
-
Original Field: Nilai default adalah
content. Bidang ini berisi log mentah yang akan diurai. -
Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Use case 2: Structured logs.
Memperluas bidang JSON
Memperluas bidang yang berisi objek JSON bersarang menjadi beberapa pasangan kunci-nilai.
Contoh:
Log mentah tanpa pemrosesan | Kedalaman ekspansi: 0, menggunakan kedalaman ekspansi sebagai awalan | Kedalaman ekspansi: 1, menggunakan kedalaman ekspansi sebagai awalan |
| | |
Prosedur: Di bagian Processor Configurations halaman Logtail Configurations, klik Add Processor dan pilih .
-
Original Field: Nama bidang asli yang akan diperluas, misalnya,
content. -
JSON Expansion Depth: Tingkat ekspansi objek JSON. Nilai 0 (default) memperluas objek sepenuhnya, 1 hanya memperluas level saat ini, dan seterusnya.
-
Character to Concatenate Expanded Keys: Karakter yang digunakan untuk menggabungkan nama bidang selama ekspansi JSON. Default adalah garis bawah (_).
-
Name Prefix of Expanded Keys: Awalan yang ditambahkan ke nama bidang setelah ekspansi JSON.
-
Expand Array: Aktifkan sakelar ini untuk memperluas array menjadi pasangan kunci-nilai dengan indeks.
Contoh:
{"k":["a","b"]}diperluas menjadik[0]: "a", k[1]: "b".Untuk mengganti nama bidang yang diperluas (misalnya, dari
prefix_s_key_k1menjadinew_field_name), tambahkan prosesor Rename Fields untuk menyelesaikan pemetaan. -
Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Use case 2: Structured logs.
Penguraian array JSON
Gunakan fungsi json_extract untuk mengekstrak objek JSON dari array JSON.
Contoh:
Log mentah tanpa pemrosesan | Ekstrak struktur array JSON |
| |
Prosedur: Di halaman Logtail Configuration, di area Processor Configurations, ubah Processing Method ke SPL, konfigurasikan SPL Statement, dan gunakan fungsi json_extract untuk mengekstrak objek JSON dari array JSON.
Contoh: Ekstrak elemen dari array JSON di bidang log content dan simpan hasilnya di bidang baru json1 dan json2.
* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')Penguraian log Apache
Strukturisasi konten log berdasarkan definisi dalam file konfigurasi log Apache Anda, menguraikannya menjadi beberapa pasangan kunci-nilai.
Contoh:
Log mentah tanpa pemrosesan | Format Log Umum Apache |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configurations, klik Add Processor dan pilih .
-
Log Format: combined
-
APACHE LogFormat Configuration: Sistem secara otomatis mengisi bidang ini berdasarkan Log Format yang dipilih.
PentingPastikan konten yang diisi otomatis persis sesuai dengan definisi
LogFormatdalam file konfigurasi Apache server Anda (biasanya/etc/apache2/apache2.conf). -
Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Use case 2: Structured logs.
Masking data
Mask data sensitif dalam log.
Contoh:
Log mentah tanpa pemrosesan | Hasil masking |
| |
Prosedur: Di halaman Logtail Configuration, di area Processor Configurations, klik Add Processor dan pilih :
Original Field: Bidang sumber yang berisi konten log sebelum penguraian.
Data Masking Method:
const: Mengganti konten sensitif dengan string yang ditentukan.
md5: Mengganti konten sensitif dengan Hash MD5-nya.
Replacement String: Saat Anda memilih const untuk Data Masking Method, Anda perlu memasukkan string untuk mengganti konten sensitif.
Content Expression that Precedes Replaced Content: Digunakan untuk menemukan konten sensitif. Konfigurasikan menggunakan sintaks RE2.
Content Expression to Match Replaced Content: Ekspresi untuk konten sensitif. Konfigurasikan menggunakan sintaks RE2.
Penguraian waktu
Mengurai bidang waktu dalam log dan mengatur hasil penguraian sebagai bidang __time__ log.
Contoh:
Log mentah tanpa pemrosesan | Penguraian waktu |
| Di tampilan detail log SLS, log JSON diurai dengan benar menjadi bidang terstruktur. Setiap bidang ( |
Prosedur: Di halaman Logtail Configuration, di area Processor Configurations, klik Add Processor dan pilih :
Original Field: Bidang sumber yang berisi konten log sebelum penguraian.
Time Format: Atur format waktu yang sesuai berdasarkan konten waktu dalam log.
Time Zone: Pilih zona waktu bidang waktu log. Secara default, menggunakan zona waktu mesin, yaitu zona waktu lingkungan tempat proses LoongCollector (Logtail) berjalan.
Batasan ekspresi reguler untuk filtering kontainer
Ekspresi reguler untuk filtering kontainer menggunakan mesin Go RE2, yang memiliki batasan sintaks dibandingkan PCRE.
1. Perbedaan sintaks grup bernama
Go menggunakan sintaks (?P<name>...) untuk mendefinisikan grup bernama dan tidak mendukung sintaks (?<name>...) dari PCRE.
-
Sintaks benar:
(?P<year>\d{4}) -
Sintaks salah:
(?<year>\d{4})
2. Fitur ekspresi reguler yang tidak didukung
Mesin RE2 tidak mendukung fitur ekspresi reguler umum berikut yang kompleks:
-
Assertions:
(?=...),(?!...),(?<=...), dan(?<!...) -
Conditional expressions:
(?(condition)true|false) -
Recursive matching:
(?R)dan(?0) -
Subprogram references:
(?&name)dan(?P>name) -
Atomic groups:
(?>...)
3. Rekomendasi
Gunakan alat seperti Regex101 untuk men-debug ekspresi reguler. Pilih mode Golang (RE2) untuk memastikan kompatibilitas. Sintaks yang tidak didukung mencegah penguraian atau pencocokan yang benar.