All Products
Search
Document Center

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

Last Updated:Jun 03, 2026

Mode sidecar menyuntikkan kontainer LoongCollector (Logtail) khusus ke dalam setiap pod aplikasi untuk pengumpulan log per-pod. Gunakan mode ini ketika Anda memerlukan kontrol detail halus, isolasi multi-tenant, atau pengumpulan log yang terikat siklus hidup.

Cara kerja

Dalam mode sidecar, kontainer aplikasi dan kontainer LoongCollector (Logtail) berjalan berdampingan dalam satu pod, berbagi volume untuk akses log dan sinkronisasi siklus hidup.

  • Berbagi log: Kontainer aplikasi menulis log ke volume bersama (biasanya emptyDir), yang dipasang oleh kontainer LoongCollector (Logtail) dalam mode read-only untuk dikumpulkan secara real time.

  • Asosiasi konfigurasi: Setiap sidecar LoongCollector (Logtail) mendeklarasikan identitasnya melalui custom identifier unik. Kelompok mesin di konsol SLS dengan identifier yang sama mendistribusikan konfigurasi pengumpulan ke semua instans sidecar yang sesuai.

  • Sinkronisasi siklus hidup: File sinyal (cornerstone dan tombstone) dalam volume bersama mengoordinasikan shutdown kontainer. Dikombinasikan dengan graceful termination period (terminationGracePeriodSeconds), hal ini memastikan LoongCollector (Logtail) menyelesaikan pengiriman log tersisa sebelum pod keluar.

Sebelum memulai

Buat Project dan logstore untuk menyimpan log Anda. Jika sudah tersedia, lewati ke Langkah 1: Suntikkan Kontainer Sidecar LoongCollector.

  • Project: Unit manajemen resource di SLS yang mengisolasi log berdasarkan project atau layanan.

  • logstore: Unit penyimpanan untuk log.

Buat project

  1. Masuk ke Simple Log Service console.

  2. Klik Create Project dan konfigurasikan pengaturan berikut:

    • Region: Pilih wilayah sumber log Anda. Tidak dapat diubah setelah dibuat.

    • Project Name: Harus unik secara global dalam Alibaba Cloud. Tidak dapat diubah setelah dibuat.

    • Biarkan parameter lain pada pengaturan default dan klik Create. Parameter lain dijelaskan dalam Create Project.

Buat logstore

  1. Klik nama Project Anda.

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

  3. Di halaman Create logstore, konfigurasikan pengaturan inti berikut:

    • Logstore Name: Harus unik dalam Project. Tidak dapat diubah setelah dibuat.

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

    • Billing Mode:

      • Pay-by-feature: Ditagih secara terpisah untuk penyimpanan, pengindeksan, dan operasi baca/tulis. Ideal untuk penggunaan skala kecil atau tidak dapat diprediksi.

      • Pay-by-ingested-data: Ditagih hanya untuk data mentah yang diingest. Termasuk penyimpanan gratis selama 30 hari dan pemrosesan serta pengiriman data gratis. Ideal ketika retensi sekitar 30 hari atau pipeline kompleks.

    • Data Retention Period: Retensi log dalam hari. Rentang: 1 hingga 3.650 (3.650 = permanen). Default: 30.

    • Biarkan parameter lain pada pengaturan default dan klik OK. Parameter lain dijelaskan dalam Manage logstore.

Langkah 1: Suntikkan kontainer sidecar LoongCollector

Suntikkan kontainer sidecar LoongCollector ke dalam pod aplikasi Anda dengan volume bersama untuk pengumpulan log. Untuk pengujian cepat, gunakan Lampiran: Contoh YAML.

1. Modifikasi konfigurasi YAML pod

  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 mulai/berhenti 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 pemasangan volume berikut:

    Pastikan kontainer aplikasi menulis log ke direktori ${shared_volume_path} agar LoongCollector dapat mengumpulkannya.
    volumeMounts:
      # Pasang volume log bersama ke direktori output log aplikasi
      - name: ${shared_volume_name}
        mountPath: ${shared_volume_path}  # Contoh: /var/log/app
      # Pasang direktori komunikasi
      - name: tasksite
        mountPath: /tasksite  # Direktori bersama untuk komunikasi dengan kontainer LoongCollector
      # Pasang file zona waktu
      - name: tz-config
        mountPath: /etc/localtime
        readOnly: true
    
  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 application container to complete"
          until [[ -f /tasksite/tombstone ]]; do
            sleep 2
          done
          # Beri waktu untuk mengunggah log tersisa
          echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
          sleep 30
          # Hentikan layanan
          echo "[$(date)] LoongCollector: Stopping service"
          /etc/init.d/loongcollectord stop
          echo "[$(date)] LoongCollector: Shutdown complete"
      # health check
      livenessProbe:
        exec:
          command: ["/etc/init.d/loongcollectord", "status"]
        initialDelaySeconds: 30
        periodSeconds: 10
        timeoutSeconds: 5
        failureThreshold: 3
      # konfigurasi resource
      resources:
        requests:
          cpu: "100m"
          memory: "128Mi"
        limits:
          cpu: "2000m"
          memory: "2048Mi"
      # konfigurasi variabel lingkungan
      env:
        - name: ALIYUN_LOGTAIL_USER_ID
          value: "${your_aliyun_user_id}"
        - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
          value: "${your_machine_group_user_defined_id}"
        - name: ALIYUN_LOGTAIL_CONFIG
          value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
        # Aktifkan mode full drain untuk memastikan semua log dikirim sebelum pod dihentikan
        - name: enable_full_drain_mode
          value: "true"  
        # Tambahkan informasi lingkungan pod sebagai tag log
        - name: ALIYUN_LOG_ENV_TAGS
          value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
        # Secara otomatis suntikkan 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} # <-- 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. Sesuaikan logika siklus hidup kontainer aplikasi

Bergantung pada jenis workload, modifikasi kontainer aplikasi untuk mendukung keluar terkoordinasi dengan sidecar:

Tugas berumur pendek (Job/CronJob)

# 1. Tunggu LoongCollector siap
echo "[$(date)] Application: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
  sleep 1
done
echo "[$(date)] Application: LoongCollector is ready, starting application logic"
# 2. Jalankan logika aplikasi inti (pastikan log ditulis ke direktori bersama)
echo "Hello, World!" >> /app/logs/business.log
# 3. Simpan kode keluar
retcode=$?
echo "[$(date)] Application: Task completed with exit code: $retcode"
# 4. Beri tahu LoongCollector bahwa tugas aplikasi selesai
touch /tasksite/tombstone
echo "[$(date)] Application: Tombstone created, exiting"
exit $retcode

Layanan berumur panjang (Deployment / StatefulSet)

# Definisikan fungsi penanganan sinyal
_term_handler() {
    echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
    # Kirim sinyal QUIT ke Nginx untuk berhenti mulus
    if [ -n "$NGINX_PID" ]; then
        kill -QUIT "$NGINX_PID" 2>/dev/null || true
        echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
        # Tunggu Nginx berhenti secara mulus
        wait "$NGINX_PID"
        EXIT_CODE=$?
        echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
    fi
    # Beri tahu LoongCollector bahwa kontainer aplikasi telah berhenti
    echo "[$(date)] [nginx-demo] Writing tombstone file"
    touch /tasksite/tombstone
    exit $EXIT_CODE
}
# Daftarkan penanganan sinyal
trap _term_handler SIGTERM SIGINT SIGQUIT
# Tunggu LoongCollector siap
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do 
    sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting application logic"
# Mulai Nginx
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Tunggu proses Nginx
wait $NGINX_PID
EXIT_CODE=$?
# Juga beri tahu LoongCollector jika 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 tenggang terminasi

Di spec.template.spec, atur periode tenggang terminasi yang cukup lama agar LoongCollector dapat mengunggah semua log tersisa.

spec:
  # ... Konfigurasi spec lain yang sudah ada ...
  template:
    spec:
      terminationGracePeriodSeconds: 600  # Periode berhenti mulus 10 menit

4. Variabel

Parameter

Deskripsi

${your_aliyun_user_id}

ID akun Alibaba Cloud Anda. Konfigurasikan pengenal pengguna.

${your_machine_group_user_defined_id}

Pengenal kustom yang digunakan untuk membuat kelompok mesin. Contoh: nginx-log-sidecar.

Penting

Pastikan pengenal ini unik dalam wilayah Project.

${your_region_config}

Konfigurasi yang sesuai dengan wilayah dan jenis akses jaringan Project SLS Anda. Wilayah layanan.

Contoh: Jika Project Anda berada di wilayah China (Hangzhou), gunakan cn-hangzhou untuk akses jaringan internal Alibaba Cloud atau cn-hangzhou-internet untuk akses jaringan publik.

${shared_volume_name}

Nama kustom untuk volume bersama.

Penting

name di volumeMounts harus sesuai dengan name di volumes. Hal ini memastikan kedua kontainer memasang volume bersama yang sama.

${dir_containing_your_files}

Jalur pemasangan di kontainer LoongCollector tempat log teks berada.

5. Terapkan konfigurasi dan verifikasi

  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 Anda melihat dua kontainer (kontainer aplikasi dan loongcollector) dan statusnya Berjalan, penyuntikan berhasil.

Langkah 2: Buat kelompok mesin berbasis pengenal kustom

Langkah ini mendaftarkan instans sidecar LoongCollector ke SLS untuk manajemen konfigurasi pengumpulan terpusat.

Prosedur

  1. Buat kelompok mesin

    1. Buka project target. Di panel navigasi kiri, klik imageResources > Machine Groups.

    2. Di halaman Machine Groups, klik Machine group icon > Create Machine Group.

  2. Konfigurasikan kelompok mesin

    Konfigurasikan parameter berikut dan klik OK:

    • Name: Nama kelompok mesin. Tidak dapat diubah setelah dibuat. Nama harus memenuhi persyaratan berikut:

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

      • Dimulai dan diakhiri dengan huruf kecil atau angka.

      • Panjang 2 hingga 128 karakter.

    • Machine Group Identifier: Pilih Custom Identifier.

    • Custom Identifier: Masukkan nilai variabel lingkungan ALIYUN_LOGTAIL_USER_DEFINED_ID yang Anda atur untuk kontainer LoongCollector dalam file YAML di Langkah 1. Nilai harus persis sama. Jika tidak, asosiasi akan gagal.

  3. Periksa status heartbeat kelompok mesin

    Setelah membuat kelompok mesin, klik namanya untuk memeriksa status heartbeat di bagian Machine Group Status.

    • OK: LoongCollector telah terhubung ke SLS, dan kelompok mesin terdaftar.

    • FAIL:

      • Perubahan konfigurasi mungkin memerlukan waktu hingga dua menit untuk berlaku. Muat ulang halaman dan periksa kembali statusnya.

      • Jika status masih FAIL setelah dua menit, lihat Pemecahan masalah isu kelompok mesin Logtail.

Setiap pod sesuai dengan satu instans LoongCollector terpisah. Untuk manajemen detail halus, gunakan pengenal kustom berbeda untuk aplikasi atau lingkungan berbeda.

Langkah 3: Buat konfigurasi pengumpulan

Konfigurasi pengumpulan menentukan file log mana yang dikumpulkan LoongCollector, cara menguraikannya, dan konten apa yang difilter.

Prosedur

  1. Di halaman image Logstore, klik ikon image sebelum nama Logstore target untuk membuka.

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

  3. Konfigurasikan Machine Group Configurations, lalu klik Next.

    • Scenario: Pilih Kubernetes Clusters.

    • Deployment Method: Pilih Sidecar.

    • Select Machine Group: Di daftar Source Machine Group, pilih kelompok mesin yang Anda buat di Langkah 2. Klik image untuk memindahkannya ke daftar Applied Machine Group.

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

1. Konfigurasi global dan input

Definisikan nama, sumber log, dan cakupan pengumpulan untuk konfigurasi pengumpulan.

Global Configurations:

  • Configuration Name: Nama kustom untuk konfigurasi pengumpulan. Nama ini harus unik dalam project 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: Pilih Text Log Collection.

  • Logtail Deployment Mode: Pilih Sidecar.

  • File Path Type:

    • Path in Container: Kumpulkan file log dari dalam kontainer.

    • Host Path: Kumpulkan log layanan lokal dari host.

  • File Path: Jalur untuk pengumpulan log.

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

    • Windows: Jalur harus dimulai dengan huruf drive, seperti C:\Program Files\Intel\**\*.Log.

  • Maximum Directory Monitoring Depth: Menentukan kedalaman direktori maksimum untuk karakter wildcard ** di File Path. Nilai default 0 hanya memantau direktori saat ini.

2. Pemrosesan dan strukturisasi 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. Pertama, tambahkan 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 dan membantu menghasilkan ekspresi reguler dan aturan penguraian, yang menyederhanakan konfigurasi.

Kasus penggunaan 1: Proses log multiline (seperti stack log Java)

Karena log seperti stack exception Java dan objek JSON sering kali mencakup beberapa baris, mode pengumpulan default membaginya menjadi beberapa catatan tidak lengkap, yang menyebabkan kehilangan konteks. Untuk mencegah hal ini, aktifkan mode multiline dan konfigurasikan Regex to Match First Line untuk menggabungkan baris berurutan dari log yang sama menjadi satu log lengkap.

Contoh:

Log mentah tanpa pemrosesan

Dalam mode pengumpulan default, setiap baris adalah log terpisah, memecah stack trace 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: Secara otomatis menghasilkan atau memasukkan secara manual ekspresi reguler yang cocok dengan baris data lengkap. Contohnya, 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 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 dapat 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 area Processor Configurations halaman Logtail Configurations:

  1. Tambahkan plugin penguraian: Klik Add Processor, dan konfigurasikan plugin seperti plugin penguraian ekspresi reguler, delimiter, atau JSON berdasarkan format log Anda. Misalnya, untuk mengumpulkan log NGINX, pilih 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 harus persis sesuai dengan log_format di server Anda. Jika tidak, penguraian akan gagal.

  3. Deskripsi parameter konfigurasi umum: Parameter berikut umum untuk banyak plugin penguraian dan memiliki fungsi yang konsisten.

    • Original Field: Menentukan field sumber yang akan diurai. Default ke content, yaitu seluruh entri log yang dikumpulkan.

    • Retain Original Field if Parsing Fails: Direkomendasikan. Jika plugin gagal mengurai log, opsi ini mempertahankan konten log mentah di field aslinya.

    • Retain Original Field if Parsing Succeeds: Jika dipilih, opsi ini mempertahankan konten log mentah bahkan setelah penguraian berhasil.

3. Filter log

Mengumpulkan volume besar log bernilai rendah (seperti tingkat DEBUG atau INFO) membuang penyimpanan, meningkatkan biaya, mengurangi efisiensi kueri, dan menimbulkan risiko kebocoran data. Konfigurasikan kebijakan filter untuk pengumpulan log yang efisien dan aman.

Filter konten

Filter field berdasarkan konten log, seperti hanya mengumpulkan log dengan level WARNING atau ERROR.

Contoh:

Log mentah tanpa pemrosesan

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: Field log yang digunakan untuk filter.

  • Field Value: Ekspresi reguler yang digunakan untuk filter. Hanya pencocokan penuh yang didukung, bukan pencocokan kata kunci parsial.

Daftar hitam pengumpulan

Gunakan daftar hitam untuk mengecualikan direktori atau file tertentu, yang mencegah log 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 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 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/: Daftar hitam direktori tidak akan berlaku.

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

    • /home/admin/*/dir: Mengabaikan semua file dalam subdirektori bernama dir di tingkat kedua direktori /home/admin/. Misalnya, file dalam direktori /home/admin/a/dir diabaikan, tetapi file dalam direktori /home/admin/a/b/dir dikumpulkan.

Filter kontainer

Atur kondisi pengumpulan berdasarkan metadata kontainer (variabel lingkungan, label Pod, namespace, nama kontainer) untuk mengontrol log kontainer mana yang dikumpulkan.

Langkah konfigurasi: Di halaman Logtail Configurations, di area Input Configurations, aktifkan Container Filtering dan klik Add.

Beberapa kondisi memiliki hubungan "DAN". Semua pencocokan ekspresi reguler berdasarkan mesin ekspresi reguler RE2 Go, yang memiliki beberapa batasan dibandingkan mesin seperti PCRE. Ikuti panduan dalam Lampiran: Batasan ekspresi reguler (filter kontainer) saat menulis ekspresi reguler.
  • Daftar hitam/putih variabel lingkungan: Filter kontainer berdasarkan variabel lingkungannya.

  • Daftar hitam/putih label Pod K8s: Filter kontainer berdasarkan label Pod hostnya.

  • Pencocokan regex nama Pod K8s: Filter kontainer berdasarkan nama Pod-nya.

  • Pencocokan regex namespace K8s: Filter kontainer berdasarkan namespace-nya.

  • Pencocokan regex nama kontainer K8s: Filter kontainer berdasarkan namanya.

  • Daftar hitam/putih label kontainer: Filter kontainer berdasarkan labelnya. Metode ini ditujukan untuk Docker dan tidak direkomendasikan untuk Kubernetes.

4. Klasifikasi log

Dalam skenario di mana beberapa aplikasi berbagi format log yang sama, membedakan sumber log bisa sulit. Konfigurasikan topik log dan penandaan log untuk mengotomatiskan asosiasi konteks dan klasifikasi logis.

Topik log

Ketika beberapa aplikasi memiliki log dengan format yang sama tetapi jalur berbeda (seperti /apps/app-A/run.log dan /apps/app-B/run.log), hasilkan topik untuk membedakan log dari setiap layanan.

Prosedur: Global Configurations > Other Global Configurations > Log Topic Type: Pilih metode untuk menghasilkan topik. Tiga jenis berikut didukung:

  • Machine Group Topic: Ketika konfigurasi pengumpulan diterapkan ke beberapa kelompok mesin, LoongCollector secara otomatis menggunakan nama kelompok mesin server sebagai field __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 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 field 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

    Field yang dihasilkan

    Contoh Regex

    Contoh jalur yang cocok

    Contoh field yang dihasilkan

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

    Hanya satu dimensi yang diperlukan untuk membedakan sumber (seperti username atau lingkungan)

    Menghasilkan field __topic__

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

    /logs/userA/app.log

    __topic__: userA

    Beberapa grup penangkapan - tidak bernama (beberapa (.*?))

    Beberapa dimensi diperlukan untuk membedakan sumber, tetapi tidak memerlukan tag semantik

    Menghasilkan field 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 diperlukan untuk membedakan sumber, dan makna field harus jelas untuk kueri dan analisis mudah

    Menghasilkan field tag __tag__:{name}

    \/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log

    /logs/userA/svcA/app.log

    __tag__:user:userA;

    __tag__:service:svcA

Penandaan log

Aktifkan pengayaan tag log untuk mengekstrak informasi kunci dari variabel lingkungan kontainer atau label Pod Kubernetes sebagai tag untuk pengelompokan log detail halus.

Langkah konfigurasi: Di area Input Configurations halaman Logtail Configurations, aktifkan Log Tag Enrichment dan klik Add.

  • Environment Variables: Konfigurasikan nama variabel lingkungan dan nama tag. Nilai variabel lingkungan disimpan sebagai nilai tag.

    • Nama Variabel Lingkungan: Nama variabel lingkungan yang akan diekstrak.

    • Nama Tag: Nama tag.

  • Pod Labels: Konfigurasikan nama label Pod dan nama tag. Nilai label Pod disimpan sebagai nilai tag.

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

    • Nama Tag: Nama tag.

5. Konfigurasi output

Secara default, semua log dikirim ke Logstore saat ini dengan kompresi lz4. Untuk mendistribusikan log ke beberapa Logstore, konfigurasikan tujuan output tambahan.

Distribusi multi-tujuan dinamis

Penting
  • Distribusi multi-tujuan hanya tersedia untuk LoongCollector 3.0.0 dan versi lebih baru. Fitur ini tidak didukung oleh Logtail.

  • Anda dapat mengonfigurasi maksimal lima tujuan output.

  • Setelah Anda mengonfigurasi beberapa tujuan output, konfigurasi pengumpulan tidak lagi muncul dalam daftar konfigurasi pengumpulan untuk Logstore saat ini. Untuk melihat, mengubah, atau menghapus konfigurasi distribusi multi-tujuan, lihat Kelola konfigurasi distribusi multi-tujuan.

Langkah konfigurasi: Di area Output Configurations halaman Logtail Configurations.

  1. Klik image untuk memperluas konfigurasi output.

  2. Klik Add Output Targets dan lengkapi konfigurasi berikut:

    • Logstores: Pilih Logstore tujuan.

    • Compression Method: lz4 dan zstd didukung.

    • Route Settings: Rute log berdasarkan field tag. Sistem mengunggah log yang cocok ke Logstore tujuan. Jika konfigurasi ini kosong, sistem mengunggah semua log yang dikumpulkan ke tujuan ini.

      • Tag Name: Nama field tag yang digunakan untuk routing. Masukkan hanya nama field (misalnya, __path__), tanpa awalan __tag__:. Field tag terbagi menjadi dua kategori:

        Tag dijelaskan dalam Kelola tag pengumpulan LoongCollector.
        • Terkait Agen: Terkait agen pengumpulan dan independen dari plugin. Contoh termasuk __hostname__ dan __user_defined_id__.

        • Terkait plugin input: Disediakan oleh plugin input untuk memperkaya log dengan informasi kontekstual. Contoh termasuk __path__ untuk pengumpulan file dan _pod_name_ atau _container_name_ untuk pengumpulan Kubernetes.

      • Tag Value: Jika field tag log cocok dengan nilai ini, sistem mengirim log ke Logstore tujuan ini.

      • Discard this tag?: Jika diaktifkan, sistem menghapus field tag ini dari log sebelum mengunggahnya.

Langkah 4: Konfigurasikan kueri dan analisis

Setelah Anda mengonfigurasi pemrosesan log dan plugin, klik Next untuk membuka halaman Query and Analysis Configurations:

  • Indeks teks lengkap diaktifkan secara default, yang mendukung pencarian kata kunci pada konten log mentah.

  • Untuk kueri tepat berdasarkan field, 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 menerapkannya dan mulai mengumpulkan log inkremental.

  1. Verifikasi entri log baru: LoongCollector hanya mengumpulkan log inkremental. Jalankan tail -f /path/to/your/log/file dan gunakan aplikasi Anda untuk menghasilkan entri log baru.

  2. Kueri log: Buka halaman Search & Analyze Logstore target dan klik Search & Analyze. Rentang waktu default adalah 15 menit terakhir. Periksa apakah log baru muncul. Field default untuk log teks kontainer adalah sebagai berikut:

    Parameter

    Deskripsi

    tag:hostname

    Nama host kontainer.

    tag:path

    Jalur file log dalam kontainer.

    tag:container_ip

    Alamat IP kontainer.

    tag:image_name

    Nama image yang digunakan oleh kontainer.

    Catatan

    Jika beberapa image memiliki hash yang sama tetapi nama atau tag berbeda, konfigurasi pengumpulan memilih salah satu nama berdasarkan hash. Nama yang dipilih tidak dijamin sesuai dengan yang didefinisikan dalam file YAML.

    tag:pod_name

    Nama pod.

    tag:namespace

    Namespace tempat pod berada.

    tag:pod_uid

    Pengenal unik (UID) pod.

Konfigurasi utama untuk integritas log

Parameter konfigurasi berikut secara langsung memengaruhi integritas dan keandalan pengumpulan log.

Konfigurasi resource LoongCollector

Konfigurasi resource yang tepat sangat penting untuk performa pengumpulan dalam skenario volume tinggi. Parameter utama:

# Konfigurasikan resource CPU dan memori berdasarkan laju pembuatan log
resources:
  limits:
    cpu: "2000m"       
    memory: "2Gi"
# Parameter yang memengaruhi performa pengumpulan
env:
  - name: cpu_usage_limit
    value: "2"      
  - name: mem_usage_limit
    value: "2048"  
  - name: max_bytes_per_sec
    value: "209715200"
  - name: process_thread_count
    value: "8"                             
  - name: send_request_concurrency
    value: "20"                            

Untuk mengonfigurasi Logtail berdasarkan volume data Anda, lihat Jenis jaringan Logtail, parameter startup, dan file konfigurasi.

Konfigurasi kuota sisi server

Batas kuota sisi server atau masalah jaringan dapat memblokir transmisi data, menciptakan tekanan balik yang memengaruhi integritas log. Gunakan CloudLens untuk SLS untuk memantau kuota resource Project.

Optimisasi konfigurasi pengumpulan awal

Kebijakan pengumpulan file awal saat startup pod memengaruhi integritas log, terutama dalam skenario throughput tinggi.

Ukuran pengumpulan awal menentukan di mana pengumpulan dimulai dalam file baru. Default: 1024 KB.

  • Jika file lebih kecil dari 1024 KB, pengumpulan dimulai dari awalnya.

  • Jika file lebih besar dari 1024 KB, pengumpulan dimulai 1024 KB dari akhirnya.

  • Ukuran pengumpulan awal dapat berkisar dari 0 hingga 10.485.760 KB (10 GB).

enable_full_drain_mode

Parameter ini memastikan LoongCollector menyelesaikan semua pengumpulan dan transmisi data sebelum dihentikan setelah menerima sinyal SIGTERM.

# Parameter yang memengaruhi integritas pengumpulan
env:
  - name: enable_full_drain_mode
    value: "true"                          # Aktifkan mode full drain

FAQ

Kelola konfigurasi distribusi multi-tujuan

Konfigurasi distribusi multi-tujuan berlaku untuk beberapa Logstore dan harus dikelola di tingkat Project:

  1. Masuk ke Log Service console dan klik nama Project target.

  2. Di halaman Project target, di panel navigasi kiri, klik imageResources > Configurations.

    Catatan

    Halaman ini memusatkan manajemen semua konfigurasi pengumpulan dalam Project, termasuk yang tersisa setelah Logstore dihapus.

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 Impor file log historis.

Lampiran: Contoh YAML

Contoh ini menunjukkan konfigurasi Kubernetes lengkap dengan kontainer aplikasi Nginx dan kontainer sidecar LoongCollector.

Sebelum menggunakan konfigurasi ini, ganti placeholder berikut:

  1. Ganti ${your_aliyun_user_id} dengan ID akun Alibaba Cloud Anda.

  2. Ganti ${your_machine_group_user_defined_id} dengan pengenal kustom kelompok mesin yang Anda buat di Langkah 3. Nilai harus persis sama.

  3. Ganti ${your_region_config} dengan nama konfigurasi yang sesuai dengan wilayah dan jenis jaringan project SLS Anda.

    Contoh: Jika project Anda berada di wilayah China (Hangzhou), gunakan cn-hangzhou untuk akses jaringan internal atau cn-hangzhou-internet untuk akses jaringan publik.

Tugas berumur pendek (Job/CronJob)

apiVersion: batch/v1
kind: Job
metadata:
  name: demo-job
spec:
  backoffLimit: 3                   
  activeDeadlineSeconds: 3600        
  completions: 1                     
  parallelism: 1                    
  template:
    spec:
      restartPolicy: Never         
      terminationGracePeriodSeconds: 300 
      containers:
        # Kontainer aplikasi
        - name: demo-job
          image: debian:bookworm-slim
          command: ["/bin/bash", "-c"]
          args:
            - |
              # Tunggu LoongCollector siap.
              echo "[$(date)] Business: Waiting for LoongCollector to be ready..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] Business: LoongCollector is ready, starting business logic"
              # Jalankan logika aplikasi.
              echo "Hello, World!" >> /app/logs/business.log
              # Simpan kode keluar.
              retcode=$?
              echo "[$(date)] Business: Task completed with exit code: $retcode"
              # Beri tahu LoongCollector bahwa tugas selesai.
              touch /tasksite/tombstone
              echo "[$(date)] Business: Tombstone created, exiting"
              exit $retcode
          # Permintaan dan batas resource
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500"
              memory: "512Mi"
          # pemasangan volume
          volumeMounts:
            - name: app-logs
              mountPath: /app/logs
            - name: tasksite
              mountPath: /tasksite
        # Kontainer sidecar LoongCollector
        - name: loongcollector
          image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
          command: ["/bin/bash", "-c"]
          args:
            - |
              echo "[$(date)] LoongCollector: Starting initialization"
              # Mulai layanan LoongCollector.
              /etc/init.d/loongcollectord start
              # Tunggu konfigurasi diunduh dan layanan siap.
              sleep 15
              # Verifikasi status layanan.
              if /etc/init.d/loongcollectord status; then
                echo "[$(date)] LoongCollector: Service started successfully"
                touch /tasksite/cornerstone
              else
                echo "[$(date)] LoongCollector: Failed to start service"
                exit 1
              fi
              # Tunggu kontainer aplikasi selesai.
              echo "[$(date)] LoongCollector: Waiting for business container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
              # Beri waktu cukup untuk mengirim log tersisa.
              sleep 30
              echo "[$(date)] LoongCollector: Stopping service"
              /etc/init.d/loongcollectord stop
              echo "[$(date)] LoongCollector: Shutdown complete"
          # health check
          livenessProbe:
            exec:
              command: ["/etc/init.d/loongcollectord", "status"]
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          # Permintaan dan batas resource
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          # variabel lingkungan
          env:
            - name: ALIYUN_LOGTAIL_USER_ID
              value: "your-user-id"
            - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
              value: "your-user-defined-id"
            - name: ALIYUN_LOGTAIL_CONFIG
              value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
            - name: ALIYUN_LOG_ENV_TAGS
              value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
            # Suntikkan metadata pod.
            - name: "_pod_name_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: "_pod_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: "_namespace_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: "_node_name_"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          # pemasangan volume
          volumeMounts:
            - name: app-logs
              mountPath: /app/logs
              readOnly: true
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
      # Definisi volume
      volumes:
        - name: app-logs
          emptyDir: {}
        - name: tasksite
          emptyDir:
            medium: Memory
            sizeLimit: "10Mi"
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai

Layanan berumur panjang (Deployment / StatefulSet)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
  namespace: production
  labels:
    app: nginx-demo
    version: v1.0.0
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1      
      maxSurge: 1          
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
        version: v1.0.0    
    spec:
      terminationGracePeriodSeconds: 600  # Periode shutdown mulus 10 menit
      containers:
        # Kontainer aplikasi - Aplikasi Web
        - name: nginx-demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6          
          # Perintah startup dan penanganan sinyal
          command: ["/bin/sh", "-c"]
          args:
            - |
              # Definisikan penanganan sinyal.
              _term_handler() {
                  echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
                  # Kirim sinyal QUIT ke Nginx untuk berhenti mulus.
                  if [ -n "$NGINX_PID" ]; then
                      kill -QUIT "$NGINX_PID" 2>/dev/null || true
                      echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
                      # Tunggu Nginx berhenti secara mulus.
                      wait "$NGINX_PID"
                      EXIT_CODE=$?
                      echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
                  fi
                  # Beri tahu LoongCollector bahwa kontainer aplikasi telah berhenti.
                  echo "[$(date)] [nginx-demo] Writing tombstone file"
                  touch /tasksite/tombstone
                  exit $EXIT_CODE
              }
              # Daftarkan penanganan sinyal.
              trap _term_handler SIGTERM SIGINT SIGQUIT
              # Tunggu LoongCollector siap.
              echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting business logic"
              # Mulai Nginx.
              echo "[$(date)] [nginx-demo] Starting Nginx..."
              nginx -g 'daemon off;' &
              NGINX_PID=$!
              echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
              # Tunggu proses Nginx keluar.
              wait $NGINX_PID
              EXIT_CODE=$?
              # Jika proses keluar tanpa sinyal, beri tahu LoongCollector.
              if [ ! -f /tasksite/tombstone ]; then
                  echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
                  touch /tasksite/tombstone
              fi
              exit $EXIT_CODE
          # Permintaan dan batas resource
          resources:
            requests:
              cpu: "200m"
              memory: "256Mi"
            limits:
              cpu: "1000m"
              memory: "1Gi"
          # pemasangan volume
          volumeMounts:
            - name: nginx-logs
              mountPath: /var/log/nginx
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
        # Kontainer sidecar LoongCollector
        - name: loongcollector
          image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
          command: ["/bin/bash", "-c"]
          args:
            - |
              echo "[$(date)] LoongCollector: Starting initialization"
              # Mulai layanan LoongCollector.
              /etc/init.d/loongcollectord start
              # Tunggu konfigurasi diunduh dan layanan siap.
              sleep 15
              # Verifikasi status layanan.
              if /etc/init.d/loongcollectord status; then
                echo "[$(date)] LoongCollector: Service started successfully"
                touch /tasksite/cornerstone
              else
                echo "[$(date)] LoongCollector: Failed to start service"
                exit 1
              fi
              # Tunggu kontainer aplikasi selesai.
              echo "[$(date)] LoongCollector: Waiting for business container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
              # Beri waktu cukup untuk mengirim log tersisa.
              sleep 30
              echo "[$(date)] LoongCollector: Stopping service"
              /etc/init.d/loongcollectord stop
              echo "[$(date)] LoongCollector: Shutdown complete"
          # health check
          livenessProbe:
            exec:
              command: ["/etc/init.d/loongcollectord", "status"]
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          # Permintaan dan batas resource
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "2000m"
              memory: "2048Mi"
          # variabel lingkungan
          env:
            - name: ALIYUN_LOGTAIL_USER_ID
              value: "${your_aliyun_user_id}"
            - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
              value: "${your_machine_group_user_defined_id}"
            - name: ALIYUN_LOGTAIL_CONFIG
              value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
            # Aktifkan mode full drain untuk mengirim semua log saat pod berhenti.
            - name: enable_full_drain_mode
              value: "true"
            # Tambahkan informasi lingkungan pod sebagai tag log.
            - name: "ALIYUN_LOG_ENV_TAGS"
              value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
            # Dapatkan informasi pod dan node.
            - name: "_pod_name_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: "_pod_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: "_namespace_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: "_node_name_"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: "_node_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
          # pemasangan volume
          volumeMounts:
            - name: nginx-logs
              mountPath: /var/log/nginx
              readOnly: true
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
      # Definisi volume
      volumes:
        - name: nginx-logs
          emptyDir: {}
        - name: tasksite
          emptyDir:
            medium: Memory
            sizeLimit: "50Mi"
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai

Lampiran: Prosesor native

Di bagian Processor Configurations halaman Logtail Configuration, tambahkan prosesor untuk menstrukturisasi log mentah. Untuk menambahkan plugin pemrosesan ke konfigurasi pengumpulan yang sudah ada, ikuti langkah-langkah berikut:

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

  2. Klik ikon image sebelum namanya untuk membuka 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 lebih lanjut, lihat Prosesor ekstensi.
Penting

Aturan menggabungkan plugin (untuk LoongCollector / Logtail 2.0 dan versi lebih baru):

  • Prosesor native dan ekstensi dapat digunakan secara independen atau digabungkan sesuai kebutuhan.

  • Utamakan prosesor native karena menawarkan performa lebih baik dan stabilitas lebih tinggi.

  • Ketika fitur native tidak dapat memenuhi kebutuhan bisnis Anda, tambahkan prosesor ekstensi setelah prosesor native yang dikonfigurasi untuk pemrosesan tambahan.

Batasan urutan:

Semua plugin dijalankan secara berurutan sesuai urutan konfigurasinya, yang membentuk rantai pemrosesan. Catatan: Semua prosesor native harus mendahului prosesor ekstensi apa pun. Setelah Anda menambahkan prosesor ekstensi, Anda tidak dapat menambahkan prosesor native lagi.

Penguraian Regex

Gunakan ekspresi reguler untuk mengekstrak field dari log menjadi pasangan kunci-nilai untuk kueri dan analisis independen.

Contoh:

Log mentah tanpa pemrosesan

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

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

  • Regular Expression: Ekspresi reguler untuk mencocokkan konten log. Anda dapat menghasilkannya secara otomatis atau memasukkannya secara manual.

    • Hasilkan otomatis:

      • Klik Generate.

      • Di kotak Log Sample, pilih konten log yang akan diekstrak.

      • Klik Generate Regular Expression.

        Misalnya, jika Anda menempelkan log dalam format Apache Combined ke kotak Log Sample, log tersebut akan berisi field seperti IP klien, timestamp, metode dan jalur permintaan, kode status, Referer, dan User-Agent.

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

    Setelah memasukkan ekspresi, klik Validate untuk menguji apakah ekspresi tersebut mengurai konten log dengan benar.

  • Extracted Field: Atur nama field (kunci) untuk setiap bagian konten log yang diekstrak (nilai).

  • Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Kasus penggunaan 2: Log terstruktur.


Penguraian delimiter

Gunakan penguraian delimiter untuk membagi konten log menjadi pasangan kunci-nilai. Mendukung delimiter karakter tunggal dan multi-karakter.

Contoh:

Log mentah tanpa pemrosesan

Field dibagi 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

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

  • Delimiter: Karakter yang digunakan untuk membagi konten log.

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

  • Quote: Ketika nilai field berisi delimiter, Anda harus menentukan karakter quote untuk membungkus field guna mencegah pembagian salah.

  • Extracted Field: Tetapkan nama field (kunci) untuk setiap kolom secara berurutan. Nama field harus memenuhi aturan berikut:

    • Hanya boleh berisi huruf, angka, dan garis bawah (_).

    • Harus dimulai dengan huruf atau garis bawah (_).

    • Panjang maksimal 128 byte.

  • Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Kasus penggunaan 2: Log terstruktur.


Penguraian JSON

Mengurai log yang diformat sebagai objek JSON menjadi pasangan kunci-nilai.

Contoh:

Log mentah tanpa pemrosesan

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

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

  • Original Field: Nilai default adalah content. Field ini berisi log mentah yang akan diurai.

  • Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Kasus penggunaan 2: Log terstruktur.


Memperluas field JSON

Memperluas field yang berisi objek JSON bersarang menjadi beberapa pasangan kunci-nilai.

Contoh:

Log mentah tanpa pemrosesan

Kedalaman ekspansi: 0, menggunakan kedalaman ekspansi sebagai awalan

Kedalaman ekspansi: 1, menggunakan kedalaman ekspansi sebagai awalan

{"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"}}}}

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

  • Original Field: Nama field asli yang akan diperluas, misalnya content.

  • JSON Expansion Depth: Tingkat ekspansi objek JSON. Nilai 0 (default) memperluas sepenuhnya objek, 1 hanya memperluas tingkat saat ini, dan seterusnya.

  • Character to Concatenate Expanded Keys: Karakter yang digunakan untuk menggabungkan nama field selama ekspansi JSON. Default adalah garis bawah (_).

  • Name Prefix of Expanded Keys: Awalan yang ditambahkan ke nama field setelah ekspansi JSON.

  • Expand Array: Aktifkan sakelar ini untuk memperluas array menjadi pasangan kunci-nilai dengan indeks.

    Contoh: {"k":["a","b"]} diperluas menjadi  k[0]: "a", k[1]: "b".

    Untuk mengganti nama field yang diperluas (misalnya, dari prefix_s_key_k1 menjadi new_field_name), tambahkan prosesor Rename Fields untuk menyelesaikan pemetaan.
  • Untuk informasi tentang parameter lain, lihat deskripsi parameter 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

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 field log content dan simpan hasilnya di field 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 Anda, menguraikannya menjadi beberapa pasangan kunci-nilai.

Contoh:

Log mentah tanpa pemrosesan

Penguraian format log Apache Common combined

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]

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

  • Log Format: combined

  • APACHE LogFormat Configuration: Sistem secara otomatis mengisi field ini berdasarkan Log Format yang dipilih.

    Penting

    Pastikan konten yang diisi otomatis persis sesuai dengan definisi LogFormat dalam file konfigurasi Apache server Anda (biasanya /etc/apache2/apache2.conf).

  • Untuk informasi tentang parameter lain, lihat deskripsi parameter umum di Kasus penggunaan 2: Log terstruktur.


Masking data

Mask data sensitif dalam log.

Contoh:

Log mentah tanpa pemrosesan

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: Field 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 field waktu dalam log dan atur hasil penguraian sebagai field __time__ log.

Contoh:

Log mentah tanpa pemrosesan

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: Field yang berisi konten log sebelum penguraian.

  • Time Format: Atur format waktu yang sesuai dengan timestamp dalam log.

  • Time Zone: Pilih zona waktu untuk field waktu log. Secara default, ini adalah zona waktu lingkungan tempat proses LoongCollector (Logtail) berjalan.

Batasan ekspresi reguler untuk filter kontainer

Ekspresi reguler untuk filter kontainer menggunakan mesin RE2 Go, yang memiliki batasan sintaks dibandingkan PCRE.

1. Perbedaan sintaks grup bernama

Go menggunakan sintaks (?P<name>...) untuk mendefinisikan grup bernama dan tidak mendukung sintaks (?<name>...) dari PCRE.

  • Sintaks benar: (?P<year>\d{4})

  • Sintaks salah: (?<year>\d{4})

2. Fitur ekspresi reguler yang tidak didukung

Mesin RE2 tidak mendukung fitur ekspresi reguler umum berikut yang kompleks:

  • Assertion: (?=...), (?!...), (?<=...), dan (?<!...)

  • Ekspresi kondisional: (?(condition)true|false)

  • Pencocokan rekursif: (?R) dan (?0)

  • Referensi subprogram: (?&name) dan (?P>name)

  • Grup atomik: (?>...)

3. Rekomendasi

Gunakan alat seperti Regex101 untuk men-debug ekspresi reguler. Pilih mode Golang (RE2) untuk memastikan kompatibilitas. Sintaks yang tidak didukung mencegah plugin mengurai atau mencocokkan dengan benar.