全部产品
Search
文档中心

Simple Log Service:Kumpulkan log teks dari pod Kubernetes (mode Sidecar)

更新时间:Dec 05, 2025

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 identifier yang 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 (cornerstone dan tombstone) di volume bersama. Mekanisme ini bekerja bersamaan dengan graceful 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

  1. Masuk ke Simple Log Service console.

  2. Klik Create Project dan konfigurasikan parameter berikut:

    • Region: Pilih wilayah tempat log Anda berasal. Nilai ini tidak dapat diubah setelah proyek dibuat.

    • Project Name: Harus unik secara global di Alibaba Cloud. Nilai ini tidak dapat diubah setelah proyek dibuat.

    • Pertahankan pengaturan default untuk parameter lainnya dan klik Create. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Create a project.

Buat logstore

  1. Klik nama proyek untuk masuk ke halaman detail proyek.

  2. Di panel navigasi sebelah kiri, klik imageLog Storage, lalu klik +.

  3. Di halaman Create Logstore, konfigurasikan parameter berikut:

    • Logstore Name: Tetapkan nama yang unik dalam proyek. Nama ini tidak dapat diubah setelah dibuat.

    • Logstore Type: Pilih Standard atau Query berdasarkan perbandingan fitur.

    • Billing Mode:

      • Pay-by-feature: Anda ditagih secara terpisah untuk sumber daya seperti penyimpanan, pengindeksan, dan operasi baca/tulis. Mode ini cocok untuk kasus penggunaan skala kecil atau ketika penggunaan fitur belum pasti.

      • Pay-by-ingested-data: Anda hanya ditagih berdasarkan jumlah data mentah yang diingest. Mode ini menyediakan penyimpanan gratis selama 30 hari dan fitur gratis seperti transformasi data dan pengiriman. Cocok untuk layanan dengan periode penyimpanan sekitar 30 hari atau pipeline pemrosesan data kompleks.

    • Data Retention Period: Tetapkan jumlah hari untuk menyimpan log. Nilainya berkisar antara 1 hingga 3.650. Nilai 3.650 menunjukkan penyimpanan permanen. Nilai default adalah 30 hari.

    • Pertahankan pengaturan default untuk parameter lainnya dan klik OK. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Manage a 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

  1. Definisikan volume bersama

    Di spec.template.spec.volumes, tambahkan tiga volume bersama pada level yang sama dengan containers:

    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 kebutuhan
    
  2. Konfigurasikan pemasangan kontainer aplikasi

    Di bagian volumeMounts kontainer aplikasi Anda, seperti your-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: true
    
  3. 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 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 $retcode

Layanan 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_CODE

3. 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 menit

4. Deskripsi variabel

Variabel

Deskripsi

${your_aliyun_user_id}

Tetapkan ke ID Akun Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat Configure user identifiers.

${your_machine_group_user_defined_id}

Tetapkan ID kustom untuk kelompok mesin. ID ini digunakan untuk membuat kelompok mesin kustom. Contoh: nginx-log-sidecar.

Penting

Pastikan ID ini unik dalam wilayah proyek Anda.

${your_region_config}

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 cn-hangzhou untuk akses jaringan internal atau cn-hangzhou-internet untuk akses jaringan publik.

${shared_volume_name}

Tetapkan nama kustom untuk volume.

Penting

Parameter name di bawah node volumeMounts harus sama dengan parameter name di bawah node volumes. Hal ini memastikan bahwa kontainer LoongCollector dan kontainer aplikasi dipasang pada volume yang sama.

${dir_containing_your_files}

Tetapkan path pemasangan. Ini adalah direktori dalam kontainer tempat log teks yang akan dikumpulkan berada.

5. Terapkan konfigurasi dan verifikasi hasilnya

  1. Jalankan perintah berikut untuk menerapkan perubahan:

    kubectl apply -f <YOUR-YAML>
  2. 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

  1. Buat kelompok mesin

    1. Di proyek target, klik imageResources > Machine Groups di panel navigasi sebelah kiri.

    2. Di halaman Machine Groups, klik 机器组 > Create Machine Group.

  2. 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_ID yang Anda tetapkan untuk kontainer LoongCollector di file YAML pada Langkah 1. Nilainya harus persis sama, jika tidak asosiasi akan gagal.

  3. 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

  1. Di halaman imageLogstores, klik image sebelum nama logstore target untuk memperluasnya.

  2. Klik ikon image di sebelah Data Collection. Di kotak dialog Quick Data Import, temukan kartu Kubernetes - File dan klik Integrate Now.

  3. 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 image untuk menambahkannya ke daftar kelompok mesin yang diterapkan.

  4. 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/**/*.log menentukan 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.

image

image

image

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

192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"
body_bytes_sent: 368
http_referer: -
http_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.x.x Safari/537.36
remote_addr:192.168.*.*
remote_user: -
request_length: 514
request_method: GET
request_time: 0.000
request_uri: /nginx-logo.png
status: 200
time_local: 15/Apr/2025:16:40:00

Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration:

  1. 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 Native Processor > Data Parsing (NGINX Mode).

  2. NGINX Log Configuration: Salin seluruh definisi log_format dari 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"';
    Penting

    Definisi format di sini harus persis sama dengan format yang menghasilkan log di server. Jika tidak, penguraian log akan gagal.

  3. 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 WARNING atau ERROR

{"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}
{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}
{"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}

Prosedur: Di bagian Processor Configurations halaman Logtail Configuration

Klik Add Processor dan pilih Native Processor > Data Filtering:

  • 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 Input Configurations > Other Input Configurations 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 bernama app_inner.log selama 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/dir diabaikan, tetapi file di direktori /home/admin/a/b/dir dikumpulkan.

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: Global Configurations > Other Global Configurations > Log Topic Type: 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>, seperti customized://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.log

    Konfigurasikan 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__: userA

    Beberapa 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__svcA

    Beberapa 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.

  1. Konfirmasi bahwa konten baru ditambahkan ke file log: LoongCollector hanya mengumpulkan log inkremental. Jalankan tail -f /path/to/your/log/file dan picu operasi bisnis untuk memastikan log baru sedang ditulis.

  2. 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.

    Catatan

    Jika 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

  1. Visualisasi data: Gunakan dasbor visualisasi untuk memantau tren metrik utama.

  2. Peringatan otomatis untuk anomali data: Siapkan kebijakan peringatan untuk mendeteksi anomali sistem secara real time.

  3. 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:

  1. Ganti ${your_aliyun_user_id} dengan UID Akun Alibaba Cloud Anda.

  2. Ganti ${your_machine_group_user_defined_id} dengan ID kustom kelompok mesin yang Anda buat di Langkah 2. Nilainya harus persis sama.

  3. 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 ke cn-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:

  1. Di panel navigasi sebelah kiri, pilih imageLogstores dan temukan logstore target.

  2. Klik ikon image sebelum namanya untuk memperluas logstore.

  3. Klik Logtail Configuration. Di daftar konfigurasi, temukan konfigurasi Logtail target dan klik Manage Logtail Configuration di kolom Actions.

  4. 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.
Penting

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

127.0.0.1 - - [16/Aug/2024:14:37:52 +0800] "GET /wp-admin/admin-ajax.php?action=rest-nonce HTTP/1.1" 200 41 "http://www.example.com/wp-admin/post-new.php?post_type=page" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
body_bytes_sent: 41
http_referer: http://www.example.com/wp-admin/post-new.php?post_type=page
http_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
remote_addr: 127.0.0.1
remote_user: -
request_method: GET
request_protocol: HTTP/1.1
request_uri: /wp-admin/admin-ajax.php?action=rest-nonce
status: 200
time_local: 16/Aug/2024:14:37:52 +0800

Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Native Processor > Data Parsing (Regex Mode):

  • 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.

        image

    • 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 ,

05/May/2025:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",200,18204,aliyun-sdk-java
ip:10.10.*.*
request:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1
size:18204
status:200
time:05/May/2025:13:30:28
user_agent:aliyun-sdk-java

Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Native Processor > Data Parsing (Delimiter Mode):

  • 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

{"url": "POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek********&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1", "ip": "10.200.98.220", "user-agent": "aliyun-sdk-java", "request": {"status": "200", "latency": "18204"}, "time": "05/Jan/2025:13:30:28"}
ip: 10.200.98.220
request: {"status": "200", "latency" : "18204" }
time: 05/Jan/2025:13:30:28
url: POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek******&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1
user-agent:aliyun-sdk-java

Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Native Processor > Data Parsing (JSON Mode):

  • 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

{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}
0_s_key_k1_k2_k3_k41:41
0_s_key_k1_k2_k3_k4_k51:51
0_s_key_k1_k2_k3_k4_k52:52
1_s_key:{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}

Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Extended Processor > Expand JSON Field.

  • 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

[{"key1":"value1"},{"key2":"value2"}]
json1:{"key1":"value1"}
json2:{"key2":"value2"}

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 combined parsing

1 192.168.1.10 - - [08/May/2024:15:30:28 +0800] "GET /index.html HTTP/1.1" 200 1234 "https://www.example.com/referrer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.X.X Safari/537.36"
http_referer:https://www.example.com/referrer
http_user_agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.X.X Safari/537.36
remote_addr:192.168.1.10
remote_ident:-
remote_user:-
request_method:GET
request_protocol:HTTP/1.1
request_uri:/index.html
response_size_bytes:1234
status:200
time_local:[08/May/2024:15:30:28 +0800]

Langkah konfigurasi: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Native Processor > Data Parsing (Apache Mode).

  • Log Format: combined

  • APACHE LogFormat Configuration: Sistem secara otomatis mengisi konfigurasi berdasarkan Log Format.

    Penting

    Pastikan 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

[{'account':'1812213231432969','password':'04a23f38'}, {'account':'1812213685634','password':'123a'}]
[{'account':'1812213231432969','password':'********'}, {'account':'1812213685634','password':'********'}]

Prosedur: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Native Processor > Data Masking:

  • 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

{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}

image

Prosedur: Di bagian Processor Configurations halaman Logtail Configuration, klik Add Processor dan pilih Native Processor > Time Parsing:

  • 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.