Dalam lingkungan Kubernetes, mode Sidecar merupakan solusi pengumpulan log yang ideal untuk manajemen detail halus terhadap log aplikasi, isolasi data multi-penyewa, atau memastikan pengumpulan log yang terikat erat pada siklus hidup aplikasi. Mode ini bekerja dengan menyuntikkan kontainer LoongCollector (Logtail) terpisah ke dalam pod aplikasi Anda. Pengaturan ini memungkinkan pengumpulan log khusus untuk pod tersebut serta menawarkan fleksibilitas dan isolasi yang kuat.
Cara kerja
Dalam mode Sidecar, sebuah kontainer aplikasi dan kontainer pengumpulan log LoongCollector (Logtail) berjalan berdampingan di dalam pod aplikasi Anda. Keduanya berkolaborasi melalui volume bersama dan mekanisme sinkronisasi siklus hidup.
Berbagi log: Kontainer aplikasi menulis file log-nya ke volume bersama, biasanya berupa
emptyDir. Kontainer LoongCollector (Logtail) memasang volume bersama yang sama sehingga dapat membaca dan mengumpulkan file log tersebut secara real time.Asosiasi konfigurasi: Setiap kontainer Sidecar LoongCollector (Logtail) mendeklarasikan identitasnya dengan menetapkan
custom identifieryang unik. Di konsol Simple Log Service (SLS), Anda harus membuat kelompok mesin yang menggunakan pengenal yang sama. Dengan demikian, semua instans Sidecar dengan pengenal yang sama secara otomatis menerapkan konfigurasi pengumpulan dari kelompok mesin tersebut.Sinkronisasi siklus hidup: Untuk mencegah kehilangan log saat pod dihentikan, kontainer aplikasi dan kontainer LoongCollector (Logtail) berkomunikasi melalui file sinyal (
cornerstonedantombstone) di volume bersama. Mekanisme ini bekerja bersamaan dengangraceful termination period(terminationGracePeriodSeconds) pod untuk memastikan shutdown yang mulus. Kontainer aplikasi berhenti menulis terlebih dahulu, LoongCollector menyelesaikan pengiriman semua log yang tersisa, lalu kedua kontainer keluar bersamaan.
Persiapan
Sebelum mengumpulkan log, Anda harus merencanakan dan membuat proyek serta logstore untuk mengelola dan menyimpan log. Jika Anda sudah memiliki sumber daya ini, lewati langkah ini dan lanjutkan ke Langkah 1: Suntikkan kontainer Sidecar LoongCollector.
Proyek: Unit manajemen resource di SLS yang digunakan untuk mengisolasi dan mengelola log dari proyek atau layanan yang berbeda.
Logstore: Unit penyimpanan log yang digunakan untuk menyimpan log.
Buat proyek
Buat logstore
Langkah 1: Suntikkan kontainer Sidecar LoongCollector
Suntikkan kontainer Sidecar LoongCollector ke dalam pod aplikasi dan konfigurasikan volume bersama untuk mengaktifkan pengumpulan log. Jika Anda belum menerapkan aplikasi atau sedang melakukan pengujian, gunakan Lampiran: Contoh YAML untuk memvalidasi proses secara cepat.
1. Ubah konfigurasi YAML pod aplikasi
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 shutdown yang 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 kebutuhanKonfigurasikan pemasangan kontainer aplikasi
Di bagian
volumeMountskontainer aplikasi Anda, sepertiyour-business-app-container, tambahkan item pemasangan berikut:Pastikan kontainer aplikasi menulis log ke direktori
${shared_volume_path}agar LoongCollector dapat mengumpulkan log tersebut.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: trueSuntikkan 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 business container to complete" until [[ -f /tasksite/tombstone ]]; do sleep 2 done # Beri waktu untuk mengunggah log yang 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" # Pemeriksaan kesehatan 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. Ubah logika siklus hidup kontainer aplikasi
Bergantung pada jenis workload, Anda harus mengubah kontainer aplikasi untuk mendukung keluar yang terkoordinasi dengan Sidecar.
Tugas jangka pendek (Job/CronJob)
# 1. 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"
# 2. Jalankan logika bisnis inti (pastikan log ditulis ke direktori bersama)
echo "Hello, World!" >> /app/logs/business.log
# 3. Simpan kode keluar
retcode=$?
echo "[$(date)] Business: Task completed with exit code: $retcode"
# 4. Beri tahu LoongCollector bahwa tugas bisnis selesai
touch /tasksite/tombstone
echo "[$(date)] Business: Tombstone created, exiting"
exit $retcodeLayanan jangka panjang (Deployment/StatefulSet)
# Definisikan fungsi penanganan sinyal
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Kirim sinyal QUIT ke Nginx untuk penghentian yang 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
wait $NGINX_PID
EXIT_CODE=$?
# Beri tahu LoongCollector juga jika keluar bukan karena sinyal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE3. Tetapkan periode terminasi yang mulus
Di spec.template.spec, tetapkan periode tenggang terminasi yang cukup untuk memastikan LoongCollector memiliki waktu yang cukup untuk mengunggah log yang tersisa.
spec:
# ... Konfigurasi spec lainnya yang sudah ada ...
template:
spec:
terminationGracePeriodSeconds: 600 # Periode shutdown yang mulus selama 10 menit4. Deskripsi variabel
Variabel | Deskripsi |
| Tetapkan ke ID Akun Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat Configure user identifiers. |
| Tetapkan ID kustom untuk kelompok mesin. ID ini digunakan untuk membuat kelompok mesin kustom. Contoh: Penting Pastikan ID ini unik dalam wilayah proyek Anda. |
| Tentukan konfigurasi berdasarkan wilayah proyek SLS Anda dan jenis jaringan yang digunakan untuk akses. Untuk informasi tentang wilayah, lihat Service regions. Contoh: Jika proyek Anda berada di wilayah China (Hangzhou), gunakan |
| Tetapkan nama kustom untuk volume. Penting Parameter |
| Tetapkan path pemasangan. Ini adalah direktori dalam kontainer tempat log teks yang akan dikumpulkan berada. |
5. Terapkan konfigurasi dan verifikasi hasilnya
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 status kedua kontainer (kontainer aplikasi dan
loongcollector) adalah Normal, suntikan berhasil.
Langkah 2: Buat kelompok mesin dengan ID kustom
Langkah ini mendaftarkan instans Sidecar LoongCollector ke SLS, sehingga memungkinkan Anda mengelola dan mengirimkan konfigurasi pengumpulan secara terpusat.
Prosedur
Buat kelompok mesin
Di proyek target, klik
di panel navigasi sebelah kiri.Di halaman Machine Groups, klik .
Konfigurasikan kelompok mesin
Konfigurasikan parameter berikut dan klik OK:
Name: Nama kelompok mesin. Nilai ini tidak dapat diubah setelah dibuat. Konvensi penamaan sebagai berikut:
Hanya boleh berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).
Harus dimulai dan diakhiri dengan huruf kecil atau angka.
Panjangnya harus antara 2 hingga 128 karakter.
Machine Group Identifier: Pilih Custom Identifier.
Custom Identifier: Masukkan nilai variabel lingkungan
ALIYUN_LOGTAIL_USER_DEFINED_IDyang Anda tetapkan untuk kontainer LoongCollector di file YAML pada Langkah 1. Nilainya harus persis sama, jika tidak asosiasi akan gagal.
Periksa status heartbeat kelompok mesin
Setelah kelompok mesin dibuat, klik namanya dan periksa status heartbeat di area status kelompok mesin.
OK: Menunjukkan bahwa LoongCollector berhasil terhubung ke SLS dan kelompok mesin telah terdaftar.
FAIL:
Konfigurasi mungkin belum berlaku. Diperlukan waktu sekitar 2 menit agar konfigurasi berlaku. Muat ulang halaman dan coba lagi nanti.
Jika status masih FAIL setelah 2 menit, lihat Troubleshoot Logtail machine group issues untuk mendiagnosis masalah.
Setiap pod sesuai dengan satu instans LoongCollector terpisah. Kami menyarankan Anda menggunakan ID kustom yang berbeda untuk layanan atau lingkungan yang berbeda guna memfasilitasi manajemen detail halus.
Langkah 3: Buat konfigurasi pengumpulan
Definisikan file log mana yang dikumpulkan oleh LoongCollector, cara mengurai struktur log, dan cara menyaring konten. Lalu, ikat konfigurasi tersebut ke kelompok mesin.
Prosedur
Di halaman
Logstores, klik
sebelum nama logstore target untuk memperluasnya.Klik ikon
di sebelah Data Collection. Di kotak dialog Quick Data Import, temukan kartu Kubernetes - File dan klik Integrate Now.Konfigurasikan kelompok mesin, lalu klik Next:
Scenario: Pilih Kubernetes Clusters.
Deployment Method: Pilih Sidecar.
Select Machine Group: Di daftar Source Machine Group, pilih kelompok mesin dengan ID kustom yang Anda buat di Langkah 2, lalu klik
untuk menambahkannya ke daftar kelompok mesin yang diterapkan.
Di halaman Logtail Configuration, konfigurasikan aturan pengumpulan Logtail sebagai berikut.
1. Konfigurasi global dan input
Definisikan nama konfigurasi pengumpulan, sumber log, dan cakupan pengumpulan.
Global Configurations:
Configuration Name: Nama kustom untuk konfigurasi pengumpulan. Nama ini harus unik dalam proyek dan 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: Text Log Collection.
Logtail Deployment Mode: Pilih Sidecar
File Path Type:
Path in Container: Kumpulkan file log dari dalam kontainer.
Host Path: Kumpulkan log dari layanan lokal di host.
File Path: Path tempat log dikumpulkan.
Linux: Path harus dimulai dengan garis miring (/). Misalnya,
/data/mylogs/**/*.logmenentukan semua file dengan ekstensi .log di direktori/data/mylogs.Windows: Path harus dimulai dengan huruf drive. Misalnya,
C:\Program Files\Intel\**\*.Log.
Maximum Directory Monitoring Depth: Kedalaman direktori maksimum yang dapat dicocokkan oleh karakter wildcard
**di File Path. Nilai default adalah 0, yang berarti hanya direktori saat ini yang dipantau.
2. Pemrosesan dan penstrukturan log
Konfigurasikan aturan pemrosesan log untuk mengubah log mentah yang tidak terstruktur menjadi data terstruktur yang dapat dicari. Hal ini meningkatkan efisiensi kueri dan analisis log. Kami menyarankan Anda terlebih dahulu menambahkan contoh log:
Di bagian Processor Configurations halaman Logtail Configuration, klik Add Sample Log dan masukkan konten log yang akan dikumpulkan. Sistem mengidentifikasi format log berdasarkan contoh tersebut dan membantu menghasilkan ekspresi reguler serta aturan penguraian, yang menyederhanakan konfigurasi.
Kasus penggunaan 1: Proses log multiline (seperti log stack Java)
Karena log seperti stack exception Java dan objek JSON sering kali mencakup beberapa baris, mode pengumpulan default membaginya menjadi beberapa catatan yang tidak lengkap, sehingga menyebabkan kehilangan konteks. Untuk mencegah hal ini, aktifkan mode multiline dan konfigurasikan Regex to Match First Line untuk menggabungkan baris-baris berurutan dari log yang sama menjadi satu log lengkap.
Contoh:
Log mentah tanpa pemrosesan apa pun | Dalam mode pengumpulan default, setiap baris adalah log terpisah, memecah jejak stack dan kehilangan konteks | Dengan mode multiline diaktifkan, Regex to Match First Line mengidentifikasi log lengkap, mempertahankan struktur semantik penuhnya. |
|
|
|
Prosedur: Di bagian Processor Configurations halaman Logtail Configuration, aktifkan Multi-line Mode:
Untuk Type, pilih Custom atau Multi-line JSON.
Custom: Untuk log mentah dengan format variabel, konfigurasikan Regex to Match First Line untuk mengidentifikasi baris awal setiap log.
Regex to Match First Line: Hasilkan secara otomatis atau masukkan secara manual ekspresi reguler yang mencocokkan baris data lengkap. Misalnya, ekspresi reguler untuk contoh sebelumnya adalah
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*.Generasi otomatis: Klik Generate. Lalu, di kotak teks Log Sample, pilih konten log yang ingin diekstrak dan klik Automatically Generate.
Masukan manual: Klik Manually Enter Regular Expression. Setelah memasukkan ekspresi, klik Validate.
Multi-line JSON: SLS secara otomatis menangani jeda baris dalam satu log mentah jika log tersebut dalam format JSON standar.
Processing Method If Splitting Fails:
Discard: Membuang segmen teks jika tidak cocok dengan aturan awal baris.
Retain Single Line: Mempertahankan teks yang tidak cocok pada baris terpisah.
Kasus penggunaan 2: Log terstruktur
Ketika log mentah berupa teks tidak terstruktur atau semi-terstruktur, seperti log akses NGINX atau log output aplikasi, kueri dan analisis langsung sering kali tidak efisien. SLS menyediakan berbagai plugin penguraian data yang secara otomatis mengonversi log mentah dengan berbagai format menjadi data terstruktur. Hal ini memberikan fondasi data yang kuat untuk analisis, pemantauan, dan peringatan selanjutnya.
Contoh:
Log mentah | Log terstruktur |
| |
Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration:
Tambahkan plugin penguraian: Klik Add Processor, lalu konfigurasikan plugin penguraian ekspresi reguler, penguraian pemisah, dan penguraian JSON sesuai dengan format log. Sebagai contoh, untuk mengumpulkan log NGINX, pilih .
NGINX Log Configuration: Salin seluruh definisi
log_formatdari file konfigurasi server Nginx Anda (nginx.conf) dan tempelkan 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 di sini harus persis sama dengan format yang menghasilkan log di server. Jika tidak, penguraian log akan gagal.
Deskripsi parameter konfigurasi umum: Parameter berikut muncul di berbagai plugin penguraian data, dan fungsinya konsisten.
Original Field: Menentukan bidang sumber yang akan diurai. Nilai default adalah
content, yaitu seluruh entri log yang dikumpulkan.Retain Original Field if Parsing Fails: Kami menyarankan Anda mengaktifkan opsi ini. Jika log tidak dapat diurai dengan sukses oleh plugin (misalnya, karena ketidakcocokan format), opsi ini memastikan konten log mentah tidak hilang tetapi dipertahankan sepenuhnya di bidang mentah yang ditentukan.
Retain Original Field if Parsing Succeeds: Jika dipilih, konten log mentah dipertahankan bahkan jika log berhasil diurai.
3. Penyaringan log
Saat pengumpulan log, mengumpulkan volume besar log bernilai rendah atau tidak relevan (seperti log tingkat DEBUG/INFO) secara sembarangan tidak hanya membuang sumber daya penyimpanan dan meningkatkan biaya, tetapi juga memengaruhi efisiensi kueri dan menimbulkan risiko kebocoran data. Terapkan kebijakan penyaringan detail halus untuk pengumpulan log yang efisien dan aman.
Kurangi biaya dengan menyaring konten
Saring bidang berdasarkan konten log, misalnya hanya mengumpulkan log dengan level WARNING atau ERROR.
Contoh:
Log mentah tanpa pemrosesan apa pun | Kumpulkan hanya log |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configuration
Klik Add Processor dan pilih :
Field Name: Bidang log yang digunakan untuk penyaringan.
Field Value: Ekspresi reguler yang digunakan untuk penyaringan. Hanya pencocokan penuh yang didukung, bukan pencocokan kata kunci parsial.
Kontrol cakupan pengumpulan dengan daftar hitam
Gunakan daftar hitam untuk mengecualikan direktori atau file tertentu, sehingga mencegah log yang tidak relevan atau sensitif diunggah.
Prosedur: Di bagian halaman Logtail Configuration, aktifkan Collection Blacklist dan klik Add.
Mendukung pencocokan penuh dan wildcard untuk direktori dan nama file. Satu-satunya karakter wildcard yang didukung adalah tanda bintang (*) dan tanda tanya (?).
File Path Blacklist: Menentukan path file yang akan dikecualikan. Contoh:
/home/admin/private*.log: Mengabaikan semua file di direktori/home/admin/yang diawali dengan private dan diakhiri dengan .log./home/admin/private*/*_inner.log: Mengabaikan file yang diakhiri dengan _inner.log di dalam direktori yang diawali dengan private di bawah direktori/home/admin/.
File Blacklist: Daftar nama file yang diabaikan selama pengumpulan. Contoh:
app_inner.log: Mengabaikan semua file bernamaapp_inner.logselama pengumpulan.
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 yang diawali dengan dir di bawah direktori/home/admin/selama pengumpulan./home/admin/*/dir: Mengabaikan semua file di subdirektori bernama dir pada level kedua direktori/home/admin/. Misalnya, file di direktori/home/admin/a/dirdiabaikan, tetapi file di direktori/home/admin/a/b/dirdikumpulkan.
Penyaringan kontainer
Tetapkan kondisi pengumpulan berdasarkan metadata kontainer (seperti variabel lingkungan, label pod, namespace, dan nama kontainer) untuk mengontrol secara tepat log kontainer mana yang dikumpulkan.
Langkah konfigurasi: Di halaman Logtail Configuration, di area Processor Configurations, aktifkan Container Filtering dan klik Add.
Beberapa kondisi memiliki hubungan "DAN". Semua pencocokan ekspresi reguler didasarkan pada mesin ekspresi reguler RE2 Go, yang memiliki beberapa keterbatasan dibandingkan mesin seperti PCRE. Ikuti panduan di Lampiran: Batasan ekspresi reguler (Penyaringan kontainer) saat menulis ekspresi reguler.
Daftar Hitam/Putih Variabel Lingkungan: Tentukan kondisi untuk variabel lingkungan kontainer yang akan dikumpulkan.
Daftar Hitam/Putih Label Pod K8s: Tentukan kondisi untuk label pod tempat kontainer yang akan dikumpulkan berada.
Pencocokan Regex Nama Pod K8s: Tentukan kontainer yang akan dikumpulkan berdasarkan nama pod.
Pencocokan Regex Namespace K8s: Tentukan kontainer yang akan dikumpulkan berdasarkan nama namespace.
Pencocokan Regex Nama Kontainer K8s: Tentukan kontainer yang akan dikumpulkan berdasarkan nama kontainer.
Daftar Hitam/Putih Label Kontainer: Kumpulkan kontainer yang label kontainernya memenuhi kondisi. Digunakan untuk kasus penggunaan Docker. Tidak disarankan untuk kasus penggunaan Kubernetes.
4. Klasifikasi log
Dalam kasus penggunaan di mana beberapa aplikasi atau instans berbagi format log yang sama, sulit membedakan sumber log. Hal ini menyebabkan kurangnya konteks selama kueri dan mengurangi efisiensi analisis. Untuk mengatasi hal ini, konfigurasikan topik dan tag log untuk mencapai asosiasi konteks otomatis dan klasifikasi logis.
Konfigurasikan topik
Ketika log dari beberapa aplikasi atau instans memiliki format yang sama tetapi path berbeda (seperti /apps/app-A/run.log dan /apps/app-B/run.log), sulit membedakan sumber log yang dikumpulkan. Hasilkan topik berdasarkan kelompok mesin, nama kustom, atau ekstraksi path file untuk secara fleksibel membedakan log dari layanan atau path yang berbeda.
Prosedur: : Pilih metode untuk menghasilkan topik. Tiga jenis 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 kasus penggunaan di mana log dibagi berdasarkan host.Custom: Menggunakan format
customized://<custom_topic_name>, seperticustomized://app-login. Format ini cocok untuk kasus penggunaan topik statis dengan pengenal bisnis 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. Misalnya, ketika beberapa pengguna atau layanan menulis log ke direktori tingkat atas yang berbeda tetapi sub-path dan nama filenya identik, sumber tidak dapat dibedakan hanya berdasarkan nama file:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.logKonfigurasikan File Path Extraction dan gunakan ekspresi reguler untuk mengekstrak informasi kunci dari path lengkap. Hasil yang cocok kemudian diunggah ke logstore sebagai topik.
Aturan ekstraksi path file: Berdasarkan grup penangkapan ekspresi reguler
Saat Anda mengonfigurasi ekspresi reguler, sistem secara otomatis menentukan format bidang output berdasarkan jumlah dan penamaan grup penangkapan. Aturannya sebagai berikut:
Dalam ekspresi reguler untuk path file, Anda harus meng-escape garis miring (/).
Jenis grup penangkapan
Kasus penggunaan
Bidang yang dihasilkan
Contoh Regex
Contoh path yang cocok
Contoh bidang yang dihasilkan
Grup penangkapan tunggal (hanya satu
(.*?))Hanya diperlukan satu dimensi untuk membedakan sumber (seperti nama pengguna atau lingkungan)
Menghasilkan bidang
__topic__\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__: userABeberapa grup penangkapan - tidak bernama (beberapa
(.*?))Diperlukan beberapa dimensi untuk membedakan sumber, tetapi tidak memerlukan tag semantik
Menghasilkan bidang tag
__tag__:__topic_{i}__, di mana{i}adalah nomor urut grup penangkapan\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__userA__tag__:__topic_2__svcABeberapa grup penangkapan - bernama (menggunakan
(?P<name>.*?)Diperlukan beberapa dimensi untuk membedakan sumber, dan makna bidang harus 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
Penambahan tag log
Aktifkan fitur penambahan tag log untuk mengekstrak informasi kunci dari variabel lingkungan kontainer atau label pod Kubernetes dan menambahkannya sebagai tag. Hal ini memungkinkan pengelompokan log secara detail halus.
Langkah konfigurasi: Di bagian Input Configurations halaman Logtail Configuration, aktifkan Log Tag Enrichment dan klik Add.
Environment Variables: Konfigurasikan nama variabel lingkungan dan nama tag. Nilai variabel lingkungan akan disimpan di nama tag.
Nama Variabel Lingkungan: Tentukan nama variabel lingkungan yang akan diekstrak.
Nama Tag: Nama tag variabel lingkungan.
Pod Labels: Konfigurasikan nama label pod dan nama tag. Nilai label pod akan disimpan di nama tag.
Nama Label Pod: Nama label pod Kubernetes yang akan diekstrak.
Nama Tag: Nama tag.
Langkah 4: Konfigurasikan pengaturan kueri dan analisis
Setelah Anda mengonfigurasi pemrosesan log dan plugin, klik Next untuk masuk ke halaman Query and Analysis Configurations:
Indeks teks lengkap diaktifkan secara default, yang mendukung pencarian kata kunci pada konten log mentah.
Untuk kueri presisi berdasarkan bidang, tunggu Preview Data dimuat, lalu klik Automatic Index Generation. SLS menghasilkan indeks bidang berdasarkan entri pertama dalam data pratinjau.
Setelah konfigurasi selesai, klik Next untuk menyelesaikan seluruh proses pengumpulan.
Langkah 5: Lihat log yang diunggah
Setelah Anda membuat konfigurasi pengumpulan dan menerapkannya ke kelompok mesin, sistem secara otomatis mengirimkan konfigurasi dan mulai mengumpulkan log inkremental.
Konfirmasi bahwa konten baru ditambahkan ke file log: LoongCollector hanya mengumpulkan log inkremental. Jalankan
tail -f /path/to/your/log/filedan picu operasi bisnis untuk memastikan log baru sedang ditulis.Kueri log: Masuk ke halaman kueri dan analisis logstore target dan klik Search & Analyze (rentang waktu default adalah 15 menit terakhir) untuk melihat apakah log baru masuk. Bidang default untuk log teks kontainer adalah sebagai berikut:
Bidang
Deskripsi
__tag__:__hostname__
Nama host kontainer.
__tag__:__path__
Path file log di dalam kontainer.
__tag__:_container_ip_
Alamat IP kontainer.
__tag__:_image_name_
Nama citra yang digunakan oleh kontainer.
CatatanJika ada beberapa citra dengan hash yang sama tetapi nama atau tag berbeda, konfigurasi pengumpulan akan memilih salah satu nama berdasarkan hash untuk pengumpulan. Tidak dapat dijamin bahwa nama yang dipilih akan konsisten dengan yang didefinisikan dalam file YAML.
__tag__:_pod_name_
Nama pod.
__tag__:_namespace_
Namespace tempat pod berada.
__tag__:_pod_uid_
Pengenal unik (UID) pod.
Catatan konfigurasi utama untuk integritas pengumpulan log
Memastikan integritas pengumpulan log adalah tujuan inti dari penerapan Sidecar LoongCollector. Parameter konfigurasi berikut secara langsung memengaruhi integritas dan keandalan data log.
Konfigurasi resource LoongCollector
Dalam kasus penggunaan volume data tinggi, konfigurasi resource yang wajar merupakan dasar untuk memastikan performa pengumpulan di sisi klien. Parameter konfigurasi utama adalah sebagai berikut:
# 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 informasi lebih lanjut tentang hubungan antara volume data spesifik dan konfigurasi yang sesuai, lihat Logtail network types, startup parameters, and configuration files.
Konfigurasi kuota sisi server
Batas kuota sisi server atau anomali jaringan dapat menghambat pengiriman data di sisi klien, yang menciptakan tekanan balik pada sisi pengumpulan file dan memengaruhi integritas log. Kami menyarankan Anda menggunakan CloudLens untuk SLS guna memantau kuota resource proyek.
Optimisasi konfigurasi pengumpulan awal
Kebijakan pengumpulan file awal saat startup pod secara langsung memengaruhi integritas data, terutama dalam kasus penggunaan penulisan data berkecepatan tinggi.
Dengan mengonfigurasi ukuran pengumpulan awal, tentukan posisi awal untuk pengumpulan pertama dari file baru. Ukuran pengumpulan awal default adalah 1.024 KB.
Saat pengumpulan pertama, jika file lebih kecil dari 1.024 KB, pengumpulan dimulai dari awal konten file.
Saat pengumpulan pertama, jika file lebih besar dari 1.024 KB, pengumpulan dimulai dari posisi 1.024 KB dari akhir file.
Ukuran pengumpulan awal dapat berkisar antara 0 hingga 10.485.760 KB.
enable_full_drain_mode
Ini adalah parameter utama untuk memastikan integritas data. Parameter ini menjamin bahwa LoongCollector menyelesaikan semua pengumpulan dan pengiriman data saat menerima sinyal SIGTERM.
# Parameter yang memengaruhi integritas pengumpulan
env:
- name: enable_full_drain_mode
value: "true" # Aktifkan mode full drain
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
Contoh ini menunjukkan konfigurasi Deployment Kubernetes lengkap yang mencakup kontainer aplikasi (Nginx) dan kontainer Sidecar LoongCollector. Cocok untuk mengumpulkan log kontainer menggunakan mode Sidecar.
Sebelum menggunakannya, lakukan tiga penggantian utama berikut:
Ganti
${your_aliyun_user_id}dengan UID Akun Alibaba Cloud Anda.Ganti
${your_machine_group_user_defined_id}dengan ID kustom kelompok mesin yang Anda buat di Langkah 2. Nilainya 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 China (Hangzhou) dan Anda menggunakan akses jaringan internal, tetapkan nilainya ke
cn-hangzhou. Jika Anda menggunakan akses jaringan publik, tetapkan nilainya kecn-hangzhou-internet.
Tugas jangka 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 bisnis
echo "Hello, World!" >> /app/logs/business.log
# Simpan kode keluar
retcode=$?
echo "[$(date)] Business: Task completed with exit code: $retcode"
# Beri tahu LoongCollector bahwa tugas bisnis selesai
touch /tasksite/tombstone
echo "[$(date)] Business: Tombstone created, exiting"
exit $retcode
# 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 mengirimkan log yang tersisa
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# Pemeriksaan kesehatan
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: "500m"
memory: "512Mi"
# Konfigurasi 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_"
# Penyuntikan informasi 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 jangka 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 yang mulus selama 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 fungsi penanganan sinyal
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Kirim sinyal QUIT ke Nginx untuk penghentian yang 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
wait $NGINX_PID
EXIT_CODE=$?
# Beri tahu LoongCollector juga jika keluar bukan karena sinyal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
# Konfigurasi 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 mengirimkan log yang tersisa
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# Pemeriksaan kesehatan
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 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: Detail plugin penguraian native
Di bagian Processor Configurations halaman Logtail Configuration, tambahkan prosesor untuk menstrukturkan log mentah. Untuk menambahkan plugin pemrosesan ke konfigurasi pengumpulan yang sudah ada, ikuti langkah-langkah berikut:
Di panel navigasi sebelah kiri, pilih
Logstores dan temukan logstore target.Klik ikon
sebelum namanya untuk memperluas logstore.Klik Logtail Configuration. Di daftar konfigurasi, temukan konfigurasi Logtail target 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 kasus penggunaan pemrosesan log umum. Untuk fitur lainnya, lihat Extended processors.
Aturan menggabungkan plugin (untuk LoongCollector / Logtail 2.0 dan yang lebih baru):
Prosesor native dan extended dapat digunakan secara independen atau digabungkan sesuai kebutuhan.
Utamakan prosesor native karena menawarkan performa dan stabilitas yang lebih baik.
Saat fitur native tidak dapat memenuhi kebutuhan bisnis Anda, tambahkan prosesor extended setelah prosesor native yang dikonfigurasi untuk pemrosesan tambahan.
Batasan urutan:
Semua plugin dieksekusi secara berurutan sesuai urutan konfigurasinya, yang membentuk rantai pemrosesan. Catatan: Semua prosesor native harus mendahului prosesor extended apa pun. Setelah Anda menambahkan prosesor extended, Anda tidak dapat menambahkan prosesor native lagi.
Penguraian ekspresi reguler
Ekstrak bidang log menggunakan ekspresi reguler dan uraikan log menjadi pasangan kunci-nilai. Setiap bidang dapat dikueri dan dianalisis secara independen.
Contoh:
Log mentah tanpa pemrosesan apa pun | Menggunakan plugin penguraian ekspresi reguler |
| |
Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih :
Regular Expression: Digunakan untuk mencocokkan log. Hasilkan secara otomatis atau masukkan secara manual:
Generasi otomatis:
Klik Generate.
Di Log Sample, pilih konten log yang akan diekstrak.
Klik Generate Regular Expression.

Masukan manual: Manually Enter Regular Expression berdasarkan format log.
Setelah konfigurasi, klik Validate untuk menguji apakah ekspresi reguler dapat mengurai konten log dengan benar.
Extracted Field: Tetapkan nama bidang (Key) yang sesuai untuk konten log yang diekstrak (Value).
Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Kasus penggunaan 2: Log terstruktur.
Penguraian berbasis pemisah
Struktur konten log menggunakan pemisah, menguraikannya menjadi beberapa pasangan kunci-nilai. Pemisah karakter tunggal maupun multi-karakter didukung.
Contoh:
Log mentah tanpa pemrosesan apa pun | Bidang dipisahkan oleh karakter yang ditentukan |
| |
Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih :
Delimiter: Tentukan karakter yang digunakan untuk memisahkan konten log.
Contoh: Untuk file CSV, pilih Custom dan masukkan koma (,).
Quote: Saat nilai bidang berisi pemisah, Anda harus menentukan karakter quote untuk membungkus bidang guna menghindari pemisahan yang salah.
Extracted Field: Tetapkan nama bidang (Key) untuk setiap kolom sesuai urutan pemisahannya. Aturan berikut berlaku:
Nama bidang hanya boleh berisi huruf, angka, dan garis bawah (_).
Harus dimulai dengan huruf atau garis bawah (_).
Panjang maksimum: 128 byte.
Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Kasus penggunaan 2: Log terstruktur.
Penguraian JSON standar
Struktur log JSON bertipe Objek dengan menguraikannya menjadi pasangan kunci-nilai.
Contoh:
Log mentah tanpa pemrosesan apa pun | Ekstraksi otomatis pasangan kunci-nilai JSON standar |
| |
Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih :
Original Field: Nilai default adalah `content`. Bidang ini digunakan untuk menyimpan konten log mentah yang akan diurai.
Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Kasus penggunaan 2: Log terstruktur.
Penguraian JSON bersarang
Uraikan log JSON bersarang menjadi pasangan kunci-nilai dengan menentukan kedalaman ekspansi.
Contoh:
Log mentah tanpa pemrosesan apa pun | Kedalaman ekspansi: 0, menggunakan kedalaman ekspansi sebagai awalan | Kedalaman ekspansi: 1, menggunakan kedalaman ekspansi sebagai awalan |
| | |
Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih .
Original Field: Nama bidang mentah yang akan diekspansi, misalnya
content.JSON Expansion Depth: Tingkat ekspansi objek JSON. 0 berarti diekspansi sepenuhnya (default), 1 berarti level saat ini, dan seterusnya.
Character to Concatenate Expanded Keys: Penghubung untuk nama bidang selama ekspansi JSON. Nilai default adalah garis bawah (_).
Name Prefix of Expanded Keys: Tentukan awalan untuk nama bidang setelah ekspansi JSON.
Expand Array: Aktifkan ini untuk mengekspansi array menjadi pasangan kunci-nilai dengan indeks.
Contoh:
{"k":["a","b"]}diekspansi menjadi{"k[0]":"a","k[1]":"b"}.Untuk mengganti nama bidang yang diekspansi (misalnya, dari prefix_s_key_k1 menjadi new_field_name), tambahkan plugin Rename Fields untuk menyelesaikan pemetaan.
Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Kasus penggunaan 2: Log terstruktur.
Penguraian array JSON
Gunakan fungsi json_extract function untuk mengekstrak objek JSON dari array JSON.
Contoh:
Log mentah tanpa pemrosesan apa pun | Ekstrak struktur array JSON |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configuration, ubah Processing Mode 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
Struktur konten log berdasarkan definisi dalam file konfigurasi log Apache, menguraikannya menjadi beberapa pasangan kunci-nilai.
Contoh:
Log mentah tanpa pemrosesan apa pun | Format Log Umum Apache |
| |
Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih .
Log Format: combined
APACHE LogFormat Configuration: Sistem secara otomatis mengisi konfigurasi berdasarkan Log Format.
PentingPastikan untuk memeriksa konten yang diisi otomatis untuk memastikan persis sama dengan LogFormat yang didefinisikan dalam file konfigurasi Apache di server (biasanya terletak di /etc/apache2/apache2.conf).
Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Kasus penggunaan 2: Log terstruktur.
Penyembunyian data
Sembunyikan data sensitif dalam log.
Contoh:
Log mentah tanpa pemrosesan apa pun | Hasil masking |
| |
Prosedur: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih :
Original Field: Bidang yang berisi konten log sebelum penguraian.
Data Masking Method:
const: Mengganti konten sensitif dengan string konstan.
md5: Mengganti konten sensitif dengan hash MD5-nya.
Replacement String: Jika Data Masking Method diatur ke const, masukkan string untuk mengganti konten sensitif.
Content Expression that Precedes Replaced Content: Ekspresi yang digunakan untuk menemukan konten sensitif, yang dikonfigurasi menggunakan sintaks RE2.
Content Expression to Match Replaced Content: Ekspresi reguler yang digunakan untuk mencocokkan konten sensitif. Ekspresi harus ditulis dalam sintaks RE2.
Penguraian waktu
Uraikan bidang waktu dalam log dan tetapkan hasil penguraian sebagai bidang __time__ log.
Contoh:
Log mentah tanpa pemrosesan apa pun | Penguraian waktu |
|
|
Prosedur: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih :
Original Field: Bidang yang berisi konten log sebelum penguraian.
Time Format: Tetapkan format waktu yang sesuai dengan stempel waktu dalam log.
Time Zone: Pilih zona waktu untuk bidang waktu log. Secara default, ini adalah zona waktu lingkungan tempat proses LoongCollector (Logtail) berjalan.
Lampiran: Batasan ekspresi reguler (Penyaringan kontainer)
Ekspresi reguler yang digunakan untuk penyaringan kontainer didasarkan pada mesin RE2 Go, yang memiliki beberapa batasan sintaks dibandingkan mesin lain seperti PCRE. Perhatikan hal berikut saat menulis ekspresi reguler:
1. Perbedaan sintaks grup bernama
Go menggunakan sintaks (?P<name>...) untuk mendefinisikan grup bernama dan tidak mendukung sintaks (?<name>...) dari PCRE.
Contoh yang benar:
(?P<year>\d{4})Sintaks yang salah:
(?<year>\d{4})
2. Fitur ekspresi reguler yang tidak didukung
Fitur ekspresi reguler umum tetapi kompleks berikut tidak tersedia di RE2. Hindari menggunakannya:
Assertions:
(?=...),(?!...),(?<=...), atau(?<!...)Conditional expressions:
(?(condition)true|false)Recursive matching:
(?R)atau(?0)Subprogram references:
(?&name)atau(?P>name)Atomic groups:
(?>...)
3. Rekomendasi
Kami menyarankan Anda menggunakan alat seperti Regex101 untuk men-debug ekspresi reguler. Pilih mode Golang (RE2) untuk validasi guna memastikan kompatibilitas. Jika Anda menggunakan sintaks yang tidak didukung yang disebutkan di atas, plugin tidak akan mengurai atau mencocokkan dengan benar.
> Create Machine Group


