全部产品
Search
文档中心

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

更新时间:Jan 29, 2026

Dalam lingkungan Kubernetes, mode Sidecar merupakan solusi pengumpulan log ideal untuk manajemen detail halus terhadap log aplikasi, isolasi data multi-penyewa, atau memastikan pengumpulan log 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 yang spesifik untuk pod tersebut serta menawarkan fleksibilitas dan isolasi yang kuat.

Cara kerja

Dalam mode Sidecar, kontainer aplikasi dan kontainer pengumpulan log LoongCollector (Logtail) berjalan berdampingan di dalam pod aplikasi Anda. Keduanya beroperasi bersama melalui volume bersama dan mekanisme sinkronisasi siklus hidup.

  • Berbagi log: Kontainer aplikasi menulis file log-nya ke volume bersama, biasanya volume 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, Anda dapat membuat kelompok mesin yang menggunakan pengenal yang sama. Dengan cara ini, 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 bersama 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 secara bersamaan.

Persiapan

Sebelum mengumpulkan log, Anda harus membuat proyek dan Logstore untuk mengelola serta menyimpan log. Jika Anda sudah memiliki resource ini, lewati langkah ini dan lanjutkan ke Langkah 1: Suntikkan kontainer Sidecar LoongCollector.

  • Project: Unit manajemen resource di Simple Log Service yang digunakan untuk mengisolasi dan mengelola log dari proyek atau layanan 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: Nama harus unik secara global di Alibaba Cloud. Nilai ini tidak dapat diubah setelah proyek dibuat.

    • Anda dapat membiarkan pengaturan lainnya sebagai default 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: Masukkan 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 resource seperti penyimpanan, pengindeksan, dan operasi baca/tulis. Mode ini cocok untuk skenario skala kecil atau ketika penggunaan fitur Anda 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 skenario bisnis dengan periode penyimpanan sekitar 30 hari atau pipeline pemrosesan data kompleks.

    • Data Retention Period: Menentukan jumlah hari penyimpanan log. Nilainya bisa berupa bilangan bulat antara 1 hingga 3.650. Nilai 3.650 berarti penyimpanan permanen. Default-nya adalah 30 hari.

    • Anda dapat mempertahankan 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, Anda dapat menggunakan Lampiran: Contoh YAML untuk memvalidasi proses dengan 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 media 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 konteks 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 baca-saja untuk direktori log aplikasi
        - name: ${shared_volume_name} # <-- Nama direktori log bersama
          mountPath: ${dir_containing_your_files} # <-- Jalur 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, ubah 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 dengan 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. Atur periode terminasi yang mulus

Di spec.template.spec, atur 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 mulus 10 menit

4. Deskripsi variabel

Variabel

Deskripsi

${your_aliyun_user_id}

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

${your_machine_group_user_defined_id}

Atur 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 Simple Log Service 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}

Atur nama kustom untuk volume.

Penting

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

${dir_containing_your_files}

Atur jalur 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 Simple Log Service, 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 machine group > Create Machine Group.

  2. Konfigurasikan kelompok mesin

    Konfigurasikan parameter berikut dan klik OK:

    • Name: Nama kelompok mesin. Nilai ini tidak dapat diubah setelah dibuat. Nama harus memenuhi persyaratan berikut:

      • Nama hanya boleh berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).

      • Nama harus dimulai dan diakhiri dengan huruf kecil atau angka.

      • Panjangnya harus 2 hingga 128 karakter.

    • Machine Group Identifier: Pilih Custom Identifier.

    • Custom Identifier: Masukkan nilai variabel lingkungan ALIYUN_LOGTAIL_USER_DEFINED_ID yang Anda atur 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 Simple Log Service dan kelompok mesin telah terdaftar.

    • FAIL:

      • Konfigurasi mungkin belum berlaku. Diperlukan waktu sekitar 2 menit agar konfigurasi berlaku. Anda dapat merefresh halaman dan mencoba 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

Pada langkah ini, Anda akan menentukan file log mana yang dikumpulkan LoongCollector, cara mengurai struktur log, dan cara menyaring kontennya. Kemudian, Anda akan menerapkan 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 Ingestion. Di kotak dialog Quick Data Ingestion, temukan kartu Kubernetes - File dan klik Ingest Now.

  3. Configure the machine group, lalu klik Next:

    • Scenario: Pilih Kubernetes Clusters.

    • Deployment Method: Pilih Sidecar.

    • Select machine group: Di daftar Source Machine Group, pilih kelompok mesin berbasis pengenal kustom yang Anda buat di Langkah 2, lalu klik image untuk menambahkannya ke daftar Applied Machine Group.

  4. Di halaman Logtail Configuration, konfigurasikan aturan pengumpulan Logtail.

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 Configuration:

  • Type: Text Log Collection.

  • Logtail Deployment Mode: Pilih Sidecar.

  • File Path Type:

    • Path In Container: Mengumpulkan file log dari dalam kontainer.

    • Host Path: Mengumpulkan log dari layanan lokal di host.

  • File Path: Jalur tempat log dikumpulkan.

    • Linux: Jalur harus dimulai dengan garis miring (/). Misalnya, /data/mylogs/**/*.log menentukan semua file dengan ekstensi .log di direktori /data/mylogs.

    • Windows: Jalur 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 Anda ekstrak 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.

Skenario 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 format berbeda 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: Untuk menambahkan plugin penguraian, klik Add Processor dan konfigurasikan plugin, seperti ekspresi reguler, pemisah, atau plugin penguraian JSON, berdasarkan format log. Misalnya, untuk mengumpulkan log NGINX, pilih Native Processor > Data Parsing (NGINX Mode).

  2. NGINX Log Configuration: Salin definisi log_format dari file konfigurasi server Nginx Anda (nginx.conf) secara lengkap 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 beberapa plugin penguraian data, dan fungsinya konsisten.

    • Original Field: Menentukan bidang sumber yang akan diurai. Default-nya 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 oleh plugin, misalnya karena ketidakcocokan format, opsi ini memastikan konten log mentah dipertahankan 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

Mengumpulkan volume besar log bernilai rendah atau tidak relevan, seperti log tingkat DEBUG atau INFO, membuang resource penyimpanan, meningkatkan biaya, memengaruhi efisiensi kueri, dan menimbulkan risiko kebocoran data. Anda dapat menerapkan kebijakan penyaringan detail halus untuk pengumpulan log yang efisien dan aman.

Kurangi biaya dengan menyaring konten

Saring bidang berdasarkan konten log, seperti 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 blacklist

Gunakan blacklist 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 jalur file yang akan dikecualikan. Contoh:

    • /home/admin/private*.log: Mengabaikan semua file di direktori /home/admin/ yang dimulai dengan private dan diakhiri dengan .log.

    • /home/admin/private*/*_inner.log: Mengabaikan file yang diakhiri dengan _inner.log di dalam direktori yang dimulai 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: Jalur direktori tidak boleh diakhiri dengan garis miring (/). Contoh:

    • /home/admin/dir1/: Blacklist direktori tidak akan berlaku.

    • /home/admin/dir*: Mengabaikan file di semua subdirektori yang dimulai dengan dir di bawah direktori /home/admin/ selama pengumpulan.

    • /home/admin/*/dir: Mengabaikan semua file di subdirektori bernama dir di tingkat 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

Anda dapat mengatur 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 Input Configurations, aktifkan Container Filtering, lalu klik Add.

Beberapa kondisi memiliki hubungan AND. Semua pencocokan ekspresi reguler didasarkan pada mesin ekspresi reguler RE2 Go, yang memiliki beberapa batasan dibandingkan mesin seperti PCRE. Saat menulis ekspresi reguler, ikuti panduan di Lampiran: Batasan ekspresi reguler (Penyaringan kontainer).
  • Blacklist/Whitelist Variabel Lingkungan: Tentukan kondisi untuk variabel lingkungan kontainer yang akan dikumpulkan.

  • Blacklist/Whitelist 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.

  • Blacklist/Whitelist Label Kontainer: Mengumpulkan kontainer yang labelnya memenuhi kondisi yang ditentukan. Ini digunakan untuk skenario Docker dan tidak disarankan untuk skenario Kubernetes.

4. Klasifikasi log

Ketika beberapa aplikasi atau instans berbagi format log yang sama, sulit untuk membedakan sumber log. Kurangnya konteks ini mengurangi efisiensi kueri dan analisis. Untuk mengatasi masalah ini, Anda dapat mengonfigurasi topik dan tag log untuk mengotomatiskan asosiasi konteks dan klasifikasi logis.

Konfigurasikan topik

Ketika log dari beberapa aplikasi atau instans memiliki format yang sama tetapi jalur berbeda, seperti /apps/app-A/run.log dan /apps/app-B/run.log, sulit untuk membedakan sumber log. Anda dapat menghasilkan topik berdasarkan kelompok mesin, nama kustom, atau ekstraksi jalur file untuk secara fleksibel membedakan log dari layanan atau jalur 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 jalur 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 jalur berbeda. Misalnya, ketika beberapa pengguna atau layanan menulis log ke direktori tingkat atas berbeda tetapi sub-jalur dan nama file-nya 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 jalur lengkap. Hasil yang cocok kemudian diunggah ke logstore sebagai topik.

    Aturan ekstraksi jalur 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 jalur file, Anda harus meng-escape garis miring (/).

    Jenis grup penangkapan

    Kasus penggunaan

    Bidang yang dihasilkan

    Contoh Regex

    Contoh jalur yang cocok

    Contoh bidang yang dihasilkan

    Grup penangkapan tunggal (hanya satu (.*?))

    Hanya satu dimensi yang dibutuhkan untuk membedakan sumber (seperti nama pengguna atau lingkungan)

    Menghasilkan bidang __topic__

    \/logs\/(.*?)\/app\.log

    /logs/userA/app.log

    __topic__: userA

    Beberapa grup penangkapan - tanpa nama (beberapa (.*?))

    Beberapa dimensi dibutuhkan 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>.*?)

    Beberapa dimensi dibutuhkan 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

Anda dapat mengaktifkan 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 halaman Logtail Configuration, di bagian Input Configurations, aktifkan Log Tag Enrichment dan klik Add.

  • Environment Variables: Konfigurasikan nama variabel lingkungan dan nama tag. Nilai variabel lingkungan 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 disimpan di tag.

    • Nama Label Pod: Nama label pod Kubernetes yang akan diekstrak.

    • Nama Tag: Nama tag.

5. Konfigurasi output

Secara default, semua log dikumpulkan dan dikirim ke Logstore saat ini menggunakan kompresi lz4. Untuk mendistribusikan log dari sumber yang sama ke Logstore berbeda, lakukan langkah-langkah berikut:

Distribusi multi-tujuan dinamis

Penting
  • Pengiriman multi-tujuan hanya berlaku untuk LoongCollector 3.0.0 ke atas. Logtail tidak mendukung fitur ini.

  • Anda dapat mengonfigurasi hingga lima tujuan output.

  • Setelah Anda mengonfigurasi beberapa tujuan output, konfigurasi pengumpulan ini tidak lagi ditampilkan di daftar konfigurasi pengumpulan Logstore saat ini. Untuk informasi lebih lanjut tentang cara melihat, mengubah, atau menghapus konfigurasi distribusi multi-tujuan, lihat How do I manage multi-destination distribution configurations?.

Langkah konfigurasi: Di halaman Logtail Configuration, di area Output Configuration.

  1. Klik image untuk memperluas konfigurasi output.

  2. Klik Add Output Target dan lengkapi konfigurasi berikut:

    • Logstore: Pilih Logstore target.

    • Compression Method: Mendukung lz4 dan zstd.

    • Routing Configuration: Mengarahkan log berdasarkan bidang tag-nya. Log yang memenuhi konfigurasi routing diunggah ke Logstore target. Jika konfigurasi routing kosong, semua log yang dikumpulkan diunggah ke Logstore target.

      • Tag Name: Nama bidang tag yang digunakan untuk routing. Masukkan nama bidang secara langsung, seperti __path__. Awalan __tag__: tidak diperlukan. Bidang tag dibagi menjadi dua jenis berikut:

        Untuk informasi lebih lanjut tentang tag, lihat Manage LoongCollector collection tags.
        • Terkait Agen: Terkait dengan agen pengumpulan itu sendiri dan independen dari plugin apa pun. Contoh: __hostname__ dan __user_defined_id__.

        • Terkait plugin input: Bergantung pada plugin input, yang menyediakan dan memperkaya log dengan informasi relevan. Contoh: __path__ untuk pengumpulan file, dan _pod_name_ dan _container_name_ untuk pengumpulan Kubernetes.

      • Tag Value: Jika nilai bidang tag log cocok dengan nilai ini, log dikirim ke Logstore target.

      • Discard Tag Field: Jika Anda mengaktifkan opsi ini, log yang diunggah tidak berisi bidang 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 field index 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. Anda dapat menjalankan tail -f /path/to/your/log/file dan memicu operasi bisnis untuk memastikan log baru ditulis.

  2. Kueri log: Masuk ke halaman kueri dan analisis Logstore target lalu klik Search & Analyze untuk memeriksa apakah log baru sedang diingest. Rentang waktu default adalah 15 menit terakhir. Bidang default untuk log teks kontainer adalah sebagai berikut:

    Nama Bidang

    Deskripsi

    __tag__:__hostname__

    Nama host kontainer.

    __tag__:__path__

    Jalur file log di dalam kontainer.

    __tag__:_container_ip_

    Alamat IP kontainer.

    __tag__:_image_name_

    Nama image yang digunakan oleh kontainer.

    Catatan

    Jika ada beberapa image 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 di 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 penyebaran Sidecar LoongCollector. Parameter konfigurasi berikut secara langsung memengaruhi integritas dan keandalan data log.

Konfigurasi resource LoongCollector

Dalam skenario 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. Hal ini menciptakan tekanan balik pada sisi pengumpulan file dan memengaruhi integritas log. Kami menyarankan Anda menggunakan CloudLens for SLS untuk memantau kuota resource proyek.

Optimalisasi konfigurasi pengumpulan awal

Kebijakan pengumpulan file awal saat startup pod secara langsung memengaruhi integritas data, terutama dalam skenario penulisan data berkecepatan tinggi.

Dengan mengonfigurasi ukuran pengumpulan awal, Anda dapat menentukan posisi awal untuk pengumpulan pertama dari file baru. Ukuran pengumpulan awal default adalah 1024 KB.

  • Saat pengumpulan pertama, jika file lebih kecil dari 1024 KB, pengumpulan dimulai dari awal file.

  • Saat pengumpulan pertama, jika file lebih besar dari 1024 KB, pengumpulan dimulai dari posisi 1024 KB dari akhir file.

  • Ukuran pengumpulan awal dapat berkisar antara 0 hingga 10.485.760 KB.

enable_full_drain_mode

Ini adalah parameter kunci 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

FAQ

Bagaimana cara mengelola konfigurasi distribusi multi-tujuan?

Karena konfigurasi distribusi multi-tujuan dikaitkan dengan beberapa Logstore, konfigurasi tersebut harus dikelola di halaman manajemen tingkat proyek:

  1. Masuk ke Simple Log Service console lalu klik nama proyek target.

  2. Di halaman proyek target, pilih imageResources > Configuration Management di panel navigasi sebelah kiri.

    Catatan

    Halaman ini mengelola secara terpusat semua konfigurasi pengumpulan di bawah proyek, termasuk yang tetap ada setelah Logstore dihapus secara tidak sengaja.

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. Simple Log Service 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. Contoh ini cocok untuk mengumpulkan log kontainer menggunakan mode Sidecar.

Sebelum memulai, 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 pada Langkah 3. ID kustom tersebut harus identik.

  3. Ganti ${your_region_config} dengan nama konfigurasi yang sesuai dengan wilayah dan jenis jaringan proyek Simple Log Service Anda.

    Contoh: Jika proyek Anda berada di China (Hangzhou) dan Anda menggunakan akses jaringan internal, atur nilainya ke cn-hangzhou. Jika Anda menggunakan akses jaringan publik, atur 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 mulus 10 menit
      
      containers:
        # Kontainer aplikasi - Aplikasi web
        - name: nginx-demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6          
          # Perintah startup dan penanganan sinyal
          command: ["/bin/sh", "-c"]
          args:
            - |
              # Definisikan 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 dengan 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 konteks 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 lalu 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 ke atas):

  • 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

Anda dapat mengekstrak bidang log menggunakan ekspresi reguler dan mengurai 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; ×64) 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. Anda dapat menghasilkannya secara otomatis atau memasukkannya secara manual:

    • Generasi otomatis:

      • Klik Auto-generate Regular Expression.

      • Di Log Sample, pilih konten log yang ingin Anda ekstrak.

      • Klik Generate Regular Expression.

        image

    • Masukan manual: Manually Enter A Regular Expression berdasarkan format log.

    Setelah Anda mengonfigurasi ekspresi, klik Validate untuk menguji apakah ekspresi reguler dapat mengurai konten log dengan benar.

  • Extracted Field: Atur nama bidang yang sesuai (Key) untuk konten log yang diekstrak (Value).

  • Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Skenario 2: Log terstruktur.


Penguraian berbasis pemisah

Anda dapat menstrukturkan konten log menggunakan pemisah untuk mengurai 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, lalu pilih Native Processor > Data Parsing (Delimiter Mode):

  • Delimiter: Tentukan karakter yang digunakan untuk memisahkan konten log.

    Contoh: Untuk file CSV, pilih Custom lalu masukkan koma (,).

  • Quote: Jika nilai bidang berisi pemisah, Anda harus menentukan karakter quote untuk membungkus bidang guna menghindari pemisahan yang salah.

  • Extracted Field: Atur nama bidang (Key) untuk setiap kolom sesuai urutan pemisahannya. Aturan berikut berlaku:

    • Nama bidang hanya boleh berisi huruf, angka, dan garis bawah (_).

    • Nama harus dimulai dengan huruf atau garis bawah (_).

    • Panjang maksimum adalah 128 byte.

  • Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Skenario 2: Log terstruktur.


Penguraian JSON standar

Anda dapat menstrukturkan 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 halaman Logtail Configuration, di bagian Processor Configurations, klik Add Processor, lalu 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 Skenario 2: Log terstruktur.


Penguraian JSON bersarang

Anda dapat mengurai 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, lalu pilih Extended Processor > Expand JSON Field:

  • Original Field: Nama bidang mentah yang akan diekspansi, misalnya content.

  • JSON Expansion Depth: Tingkat ekspansi objek JSON. Nilai 0 berarti objek diekspansi sepenuhnya, yang merupakan default. Nilai 1 berarti hanya tingkat saat ini yang diekspansi.

  • Character To Concatenate Expanded Keys: Karakter yang digunakan untuk menggabungkan nama bidang selama ekspansi JSON. Default-nya adalah garis bawah (_).

  • JSON Expansion Prefix: Tentukan awalan untuk nama bidang setelah ekspansi JSON.

  • Expand Array: Aktifkan opsi 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, Anda dapat menambahkan plugin Rename Fields untuk menyelesaikan pemetaan.
  • Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Skenario 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 menjadi SPL, konfigurasikan SPL Statement, lalu 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

Anda dapat menstrukturkan konten log berdasarkan definisi di file konfigurasi log Apache dengan 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 Processing Configuration halaman Logtail Configuration, klik Add Processing Plugin, lalu pilih Native Processing Plugin > APACHE Pattern Parsing:

  • Log Format: combined

  • Apache Configuration Fields: Sistem secara otomatis mengisi konfigurasi berdasarkan Log Format.

    Penting

    Pastikan konten yang diisi otomatis persis sama dengan LogFormat yang didefinisikan di file konfigurasi Apache di server. File tersebut biasanya berada di /etc/apache2/apache2.conf.

  • Untuk informasi lebih lanjut tentang parameter lainnya, lihat deskripsi parameter konfigurasi umum di Skenario 2: Log terstruktur.


Penyembunyian data

Sembunyikan data sensitif dalam log.

Contoh:

Log mentah tanpa pemrosesan apa pun

Hasil penyembunyian

[{'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 lalu 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

Urai bidang waktu dalam log dan atur 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 lalu pilih Native Processor > Time Parsing:

  • Original Field: Bidang yang berisi konten log sebelum penguraian.

  • Time Format: Atur format waktu yang sesuai dengan timestamp di 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. Anda harus menghindari 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. Anda dapat memilih mode Golang (RE2) untuk validasi guna memastikan kompatibilitas. Jika Anda menggunakan sintaks yang tidak didukung, plugin tidak akan mengurai atau mencocokkan dengan benar.