All Products
Search
Document Center

Simple Log Service:Kumpulkan log kontainer menggunakan CRD Kubernetes

Last Updated:Aug 29, 2026

Definisikan konfigurasi pengumpulan log sebagai CRD Kubernetes untuk kontrol versi, penerapan berbasis lingkungan, dan rilis otomatis dengan kubectl atau pipeline CI/CD di seluruh kluster ACK dan kluster yang dikelola sendiri. LoongCollector memuat ulang perubahan konfigurasi secara langsung tanpa restart.

CRD AliyunLogConfig lama sudah tidak digunakan lagi. Gunakan AliyunPipelineConfig sebagai gantinya. Lihat Jenis CRD untuk perbandingan.
Penting

Konfigurasi pengumpulan berbasis CRD hanya dapat dimodifikasi dengan memperbarui CRD tersebut. Perubahan yang dilakukan di konsol SLS tidak disinkronkan dan tidak berlaku.

Berlaku untuk

  • Lingkungan operasional

    • Kluster ACK (edisi managed dan dedicated) serta kluster Kubernetes yang dikelola sendiri.

    • Versi Kubernetes harus 1.16.0 atau lebih baru dan mendukung Mount propagation: HostToContainer.

    • runtime kontainer (hanya Docker dan Containerd)

      • Docker:

        • Memerlukan akses ke docker.sock.

        • Pengumpulan output standar hanya mendukung driver log JSON-file.

        • Hanya driver penyimpanan overlay dan overlay2 yang didukung. Untuk jenis driver penyimpanan lainnya, Anda harus memasang direktori log secara manual.

      • Containerd: Memerlukan akses ke containerd.sock.

  • Kebutuhan sumber daya: LoongCollector (Logtail) berjalan dengan kelas prioritas 'system-cluster-critical'. Jangan lakukan penerapan jika kluster tidak memiliki sumber daya yang cukup — hal ini dapat menyebabkan Pod di-eject dari node.

    • CPU: Cadangkan minimal 0,1 Core.

    • Memory: Cadangkan minimal 150 MB untuk komponen pengumpulan dan minimal 100 MB untuk komponen controller.

    • Penggunaan aktual tergantung pada laju pengumpulan, direktori dan file yang dipantau, serta kemacetan pengiriman. Pastikan penggunaan tetap di bawah 80% dari batas yang dikonfigurasi.

  • Kebutuhan izin: Untuk melakukan penerapan, Akun Alibaba Cloud atau Pengguna RAM harus memiliki izin AliyunLogFullAccess.

    Untuk membuat kebijakan kustom, lihat kebijakan sistem AliyunCSManagedLogRolePolicy. Salin izin dari kebijakan ini dan berikan kepada Pengguna RAM atau role target untuk mengonfigurasi izin detail halus.

Alur kerja konfigurasi pengumpulan

  1. Instal LoongCollector: Terapkan LoongCollector sebagai DaemonSet untuk menjalankan kontainer pengumpulan di setiap node kluster. Konfigurasi ini memusatkan pengumpulan log untuk semua kontainer di node tersebut.

  2. Create a LogStore: LogStore adalah unit penyimpanan untuk data log. Beberapa LogStore dapat dibuat dalam satu Project.

  3. Buat file YAML konfigurasi pengumpulan: Gunakan kubectl untuk terhubung ke kluster. Anda dapat membuat file konfigurasi pengumpulan dengan salah satu dari dua cara berikut:

    • Metode 1: Gunakan generator konfigurasi pengumpulan

      Gunakan generator konfigurasi pengumpulan di konsol Layanan Log untuk mengonfigurasi parameter secara visual dan menghasilkan file YAML standar secara otomatis.

    • Metode 2: Tulis file YAML secara manual

      Tulis file YAML secara manual berdasarkan contoh dalam dokumen ini. Bangun secara bertahap: mulai dari konfigurasi minimal, tambahkan logika pemrosesan, lalu aktifkan fitur lanjutan.

      Untuk skenario kompleks yang tidak tercakup dalam dokumen ini atau field yang memerlukan kustomisasi mendalam, lihat Referensi parameter AliyunPipelineConfig untuk daftar lengkap field, aturan nilai, dan detail kemampuan plugin.

    Konfigurasi pengumpulan lengkap biasanya mencakup bagian-bagian berikut:

    • Konfigurasi minimal (Wajib): Konfigurasi ini membangun pipa data dari kluster ke Layanan Log dan terdiri dari dua bagian:

      • Input (inputs): Menentukan sumber log. Untuk log kontainer, sumbernya mencakup dua jenis berikut. Untuk mengumpulkan jenis log lain, seperti hasil kueri MySQL, lihat Plugin input.

        • Output standar kontainer (stdout dan stderr): Log yang dicetak aplikasi kontainer ke konsol.

        • File log teks: File log yang ditulis ke jalur tertentu di dalam kontainer.

      • Output (flushers): Menentukan tujuan log. Log yang dikumpulkan dikirim ke LogStore yang ditentukan.

        Jika Project atau LogStore tujuan belum ada, sistem akan membuatnya secara otomatis. Anda juga dapat membuat Project dan LogStore secara manual terlebih dahulu.
    • Konfigurasi pemrosesan umum (Opsional): Tentukan field processors untuk melakukan penguraian terstruktur (seperti penguraian ekspresi reguler atau delimiter), penyamaran data, atau penyaringan pada log mentah.

      Dokumen ini hanya menjelaskan plugin pemrosesan native yang mencakup skenario pemrosesan log umum. Untuk fitur tambahan, lihat Plugin pemrosesan lanjutan.
    • Konfigurasi lanjutan lainnya (Opsional): Mengaktifkan fitur lanjutan seperti pengumpulan log multi-baris dan pengayaan tag log untuk memenuhi kebutuhan pengumpulan yang lebih spesifik.

    Contoh struktur:

    apiVersion: telemetry.alibabacloud.com/v1alpha1 # Gunakan nilai default. Jangan ubah.
    kind: ClusterAliyunPipelineConfig               # Gunakan nilai default. Jangan ubah.
    metadata:
      name: test-config                             # Tetapkan nama resource, yang harus unik dalam kluster Kubernetes saat ini.
    spec:
      project:                                      # Tetapkan nama Project tujuan.
        name: k8s-your-project                      
      config:                                       # Tetapkan konfigurasi pengumpulan Logtail.
        inputs:                                     # Tetapkan plugin input untuk konfigurasi pengumpulan Logtail.
          ...
        processors:                                 # Tetapkan plugin pemrosesan untuk konfigurasi pengumpulan Logtail.
          ...
        flushers:                                   # Tetapkan plugin output untuk konfigurasi pengumpulan Logtail.
          ...
  4. Terapkan konfigurasi

    kubectl apply -f <your_yaml>

Instal LoongCollector (Logtail)

LoongCollector adalah agen pengumpulan log generasi berikutnya dari SLS, merupakan versi peningkatan dari Logtail. Keduanya tidak dapat berjalan bersamaan. Untuk menginstal Logtail sebagai gantinya, lihat Instal dan konfigurasikan Logtail.

Ikuti langkah-langkah berikut untuk instalasi dasar LoongCollector. Untuk parameter detail, lihat Instalasi dan konfigurasi. Jika LoongCollector atau Logtail sudah terinstal, lewati ke pembuatan logstore.

Kluster ACK

Anda dapat menginstal LoongCollector dari konsol Container Service for Kubernetes (ACK). Secara default, log dikirim ke Project Simple Log Service di bawah Akun Alibaba Cloud saat ini.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster target untuk membuka halaman detailnya.

  3. Di panel navigasi sebelah kiri, klik Add-ons.

  4. Di tab Logs and Monitoring, temukan loongcollector, lalu klik Install.

    Catatan

    Saat membuat kluster, di halaman Component Configurations, pilih kotak centang Enable Log Service. Anda kemudian dapat memilih untuk Create Project atau Select Project.

    Setelah instalasi selesai, Simple Log Service secara otomatis membuat resource terkait di wilayah kluster ACK Anda. Lihat resource tersebut di Konsol Simple Log Service.

    Jenis resource

    Nama resource

    Deskripsi

    Project

    k8s-log-${cluster_id}

    Mengisolasi log dari layanan berbeda.

    Untuk membuat Project guna manajemen resource log yang lebih fleksibel, lihat Buat Project.

    machine group

    k8s-group-${cluster_id}

    Sekelompok node pengumpulan log.

    Penting

    LoongCollector tidak membuat logstore bernama config-operation-log. Jika logstore dengan nama tersebut sudah ada, LoongCollector berhenti menulis log ke dalamnya.

Kluster yang dikelola sendiri

  1. Hubungkan ke kluster Kubernetes Anda. Kemudian, jalankan perintah yang sesuai untuk wilayah Anda guna mengunduh LoongCollector dan dependensinya:

    Untuk wilayah di Tiongkok daratan:

    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh

    Untuk wilayah di luar Tiongkok daratan:

    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. Buka direktori loongcollector-custom-k8s-package dan modifikasi file konfigurasi ./loongcollector/values.yaml.

    # ===================== Parameter wajib =====================
    # Project tempat log dikirim. Contoh: k8s-log-custom-sd89ehdq.
    projectName: ""
    # Wilayah Project. Contoh: cn-shanghai.
    region: ""
    # UID Akun Alibaba Cloud yang memiliki Project. Masukkan nilai dalam tanda kutip. Contoh: "123456789"
    aliUid: ""
    # Jenis jaringan. Nilai valid: Internet (jaringan publik) dan Intranet (jaringan internal). Default: Internet.
    net: Internet
    # ID AccessKey dan secret untuk Akun Alibaba Cloud atau Pengguna RAM yang memiliki kebijakan AliyunLogFullAccess.
    accessKeyID: ""
    accessKeySecret: ""
    # ID kluster kustom. ID hanya boleh berisi huruf besar, huruf kecil, angka, dan tanda hubung (-).
    clusterID: ""
  3. Di direktori loongcollector-custom-k8s-package, jalankan perintah berikut untuk menginstal LoongCollector dan dependensinya:

    bash k8s-custom-install.sh install
  4. Setelah instalasi selesai, periksa status komponen.

    Jika pod gagal dimulai, verifikasi konfigurasi values.yaml dan pastikan image yang diperlukan telah ditarik.
    # Periksa status pod
    kubectl get po -n kube-system | grep loongcollector-ds

    Simple Log Service juga secara otomatis membuat resource berikut. Lihat resource tersebut di Konsol Simple Log Service.

    Jenis resource

    Nama resource

    Deskripsi

    Project

    Nilai projectName yang Anda tentukan di file values.yaml

    Mengisolasi log dari layanan berbeda.

    machine group

    k8s-group-${cluster_id}

    Sekelompok node pengumpulan log.

    Penting

    LoongCollector tidak membuat logstore bernama config-operation-log. Jika logstore dengan nama tersebut sudah ada, LoongCollector berhenti menulis log ke dalamnya.

Buat Logstore

Jika Anda sudah membuat logstore, lewati langkah ini dan lanjutkan ke konfigurasi pengumpulan.

  1. Masuk ke Konsol Layanan Log dan klik project target.

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

  3. Di halaman Buat Logstore, konfigurasikan parameter inti berikut:

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

    • Logstore Type: Pilih Standard atau Query berdasarkan spesifikasinya.

    • Billing Mode:

      • Pay-by-feature: Anda ditagih secara terpisah untuk setiap resource, seperti penyimpanan, pengindeksan, dan operasi baca/tulis. Cocok untuk kasus penggunaan skala kecil atau ketika penggunaan fitur tidak pasti.

      • Pay-by-ingested-data: Anda hanya ditagih berdasarkan jumlah data mentah yang diingest. Mode ini menyediakan periode penyimpanan gratis selama 30 hari dan fitur gratis seperti transformasi dan pengiriman data. Model biaya sederhana ini ideal untuk kasus di mana periode penyimpanan mendekati 30 hari atau pipa pemrosesan data kompleks.

    • Data Retention Period: Tetapkan jumlah hari untuk menyimpan log. Nilainya berkisar antara 1 hingga 3650 hari. Nilai 3650 berarti penyimpanan permanen. Default-nya adalah 30 hari.

  4. Biarkan pengaturan lainnya pada nilai default lalu klik OK. Kelola logstore.

Konfigurasi minimal

Di <a baseurl="t3010624_v1_5_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#c801b53fd5xu4" id="2ba88d5208b3d">spec.config</a>, Anda mengonfigurasi plugin input dan output untuk mendefinisikan sumber dan tujuan log.

Output standar kontainer

Tujuan: Mengumpulkan log output standar kontainer (stdout/stderr) yang dicetak langsung ke konsol.

inputs (plugin masukan)

Menentukan sumber log. Saat ini, Anda hanya dapat mengonfigurasi satu plugin input.

  • Type String (Wajib)

    Atur ke input_container_stdio.

  • IgnoringStderr boolean (Opsional)

    Apakah mengabaikan aliran error standar (stderr). Default: false.

    • true: Tidak mengumpulkan stderr.

    • false: Mengumpulkan stderr.

  • IgnoringStdout boolean (Opsional)

    Apakah mengabaikan aliran output standar (stdout). Default: false.

    • true: Tidak mengumpulkan stdout.

    • false: Mengumpulkan stdout.

Contoh

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  # Tetapkan nama resource unik dalam kluster Kubernetes. 
  # Nama ini juga digunakan untuk konfigurasi pengumpulan Logtail yang dibuat.
  name: new-stdio-config
spec:
  project:
    name: test-not-exist
  logstores:
    - name: new-stdio-logstore

  # Definisikan konfigurasi pengumpulan dan pemrosesan untuk LoongCollector (Logtail).
  config:
    # --- plugin input: Menentukan sumber log ---
    inputs:
      # Gunakan plugin input_container_stdio untuk mengumpulkan log output standar kontainer.
      - Type: input_container_stdio
        IgnoringStderr: false
        IgnoringStdout: false

    # --- plugin pemrosesan (Opsional): Menentukan cara mengurai dan memproses log ---
    processors: []

    # --- plugin output: Menentukan tujuan log ---
    flushers: # Konfigurasikan satu atau beberapa flusher untuk menentukan tujuan log. Contoh ini mengirim log ke dua Logstore.
      - Type: flusher_sls    # Tentukan plugin output SLS.
        Logstore: new-stdio-logstore1
      - Type: flusher_sls    # Tentukan plugin output SLS.
        Logstore: new-stdio-logstore2
        

flushers (plugin output)

Mengirim log yang dikumpulkan ke Logstore tertentu dalam Project. Anda dapat mengonfigurasi hingga lima plugin output.

  • Type String (Wajib)

    Atur ke flusher_sls.

  • Logstore String (Wajib)

    Nama Logstore tujuan, yang menentukan tempat penyimpanan log.

    Catatan
    • Penyimpanan log yang ditentukan harus sudah ada atau dideklarasikan di <a baseurl="t3010624_v1_6_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#471f2ca341s6j" id="4335117646mhr">spec.logstores</a>.

    • Saat Anda mengonfigurasi beberapa tujuan output, konfigurasi tidak lagi ditampilkan di daftar konfigurasi Logstore. Untuk mengelola konfigurasi multi-tujuan, lihat Bagaimana cara mengelola konfigurasi multi-tujuan?.

File teks kontainer

Tujuan: Mengumpulkan log yang ditulis ke jalur file tertentu di dalam kontainer, seperti access.log atau app.log.

inputs (plugin input)

Menentukan sumber log. Saat ini, Anda hanya dapat mengonfigurasi satu plugin input.

  • Type String (Wajib)

    Atur ke input_file.

  • FilePaths String (Wajib)

    Daftar jalur ke file log.

    • Saat ini, Anda hanya dapat mengonfigurasi satu jalur.

    • Anda dapat menggunakan karakter wildcard berikut:

      • *: Mencocokkan nama file dalam direktori tingkat tunggal.

      • **: Mencocokkan subdirektori multi-level secara rekursif. Hanya dapat digunakan sekali dan harus ditempatkan sebelum nama file.

  • MaxDirSearchDepth integer (Opsional)

    Kedalaman direktori maksimum untuk pencarian rekursif saat jalur berisi **. Default: 0. Nilai valid: 0 hingga 1.000.

  • FileEncoding String (Opsional)

    Encoding file. Default: utf8. Nilai valid:

    • utf8

    • gbk

  • EnableContainerDiscovery boolean (Opsional)

    Apakah mengaktifkan penemuan kontainer. Default: true.

    Catatan

    Parameter ini hanya berlaku saat LoongCollector (Logtail) berjalan dalam mode DaemonSet dan jalur file yang ditentukan berada di dalam kontainer.

Contoh

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  name: easy-row-config
spec:
  # Tentukan Project tujuan tempat log dikirim.
  project:
    name: test-not-exist
  logstores:
    - name: easy-row-logstore

  # Definisikan konfigurasi pengumpulan dan pemrosesan untuk LoongCollector (Logtail).
  config:
    # Contoh log (opsional)
    sample: ''
    # --- plugin input: Menentukan sumber log ---
    inputs:
      # Gunakan plugin input_file untuk mengumpulkan file log teks dari kontainer.
      - Type: input_file         
        # ... Konfigurasi spesifik untuk plugin input ...
        # Jalur file di dalam kontainer.
        FilePaths:
          - /var/log/text1.log
        # Kedalaman pemantauan direktori maksimum.
        MaxDirSearchDepth: 0
        FileEncoding: utf8  
        # Aktifkan fitur penemuan kontainer.
        EnableContainerDiscovery: true
        

    # --- plugin pemrosesan (Opsional): Menentukan cara mengurai dan memproses log ---
    processors: []    

    # --- plugin output: Menentukan tujuan log ---
    flushers: # Konfigurasikan satu atau beberapa flusher untuk menentukan tujuan log. Contoh ini mengirim log ke dua Logstore.
      - Type: flusher_sls        # Tentukan plugin output SLS.
        Logstore: easy-row-logstore1
      - Type: flusher_sls        # Tentukan plugin output SLS.
        Logstore: easy-row-logstore2

flushers (plugin output)

Mengirim log yang dikumpulkan ke Logstore tertentu dalam Project. Anda dapat mengonfigurasi hingga lima plugin output.

  • Type String (Wajib)

    Atur ke flusher_sls.

  • Logstore String (Wajib)

    Nama Logstore tujuan, yang menentukan tempat penyimpanan log.

    Catatan
    • Penyimpanan log yang ditentukan harus ada atau dideklarasikan di <a baseurl="t3010624_v1_6_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#471f2ca341s6j" id="0d8eb5204eevu">spec.logstores</a>.

    • Saat Anda mengonfigurasi beberapa tujuan output, konfigurasi tidak lagi ditampilkan di daftar konfigurasi Logstore. Untuk mengelola konfigurasi multi-tujuan, lihat Bagaimana cara mengelola konfigurasi multi-tujuan?.

Konfigurasi umum

Setelah menyelesaikan konfigurasi minimal, tambahkan plugin processor untuk mengurai, menyamarkan, atau menyaring log mentah.

Konfigurasi Inti: Untuk mengonfigurasi plugin pemrosesan, tambahkan processors ke <a baseurl="t3010624_v1_5_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#c801b53fd5xu4" id="49324d8ed176z">spec.config</a>, yang memungkinkan Anda untuk mengaktifkan beberapa plugin secara bersamaan.

Topik ini hanya mencakup plugin pemrosesan native yang menangani kasus penggunaan pemrosesan log umum. Untuk fitur tambahan, lihat plugin pemrosesan lanjutan.
Penting

Untuk Logtail 2.0+ dan LoongCollector, ikuti panduan pengurutan plugin berikut:

  • Utamakan plugin native.

  • Jika plugin native tidak memenuhi kebutuhan Anda, konfigurasikan plugin ekstensi untuk dijalankan setelahnya.

  • Plugin native hanya dapat dijalankan sebelum plugin ekstensi.

Konfigurasi terstruktur

Penguraian regex

Mengekstraksi field log menggunakan ekspresi reguler dan mengurai log menjadi pasangan kunci-nilai.

Parameter

Contoh

Type String (Wajib)

Diperbaiki menjadi processor_parse_regex_native.

 # ... di bawah spec.config ...
 processors:
  # Gunakan prosesor penguraian ekspresi reguler untuk mengurai konten log.
  - Type: processor_parse_regex_native
    # Tentukan field sumber, biasanya content.
    SourceKey: content

    # Ekspresi reguler untuk mencocokkan dan mengekstraksi field log.
    Regex: >-
      (\S+)\s-\s(\S+)\s$$([^]]+)$$\s"
      (\w+)\s(\S+)\s([^"]+)"
      \s(\d+)\s(\d+)\s"
      ([^"]+)"\s"
      ([^"]+).*

    # Daftar field yang diekstraksi, sesuai dengan grup regex secara berurutan.
    Keys:
      - remote_addr
      - remote_user
      - time_local
      - request_method
      - request_uri
      - request_protocol
      - status
      - body_bytes_sent
      - http_referer
      - http_user_agent

    # Apakah mempertahankan field sumber jika penguraian gagal.
    KeepingSourceWhenParseFail: true

    # Apakah mempertahankan field sumber jika penguraian berhasil.
    KeepingSourceWhenParseSucceed: true

    # Jika field sumber dipertahankan, Anda dapat menentukan nama baru untuknya.
    RenamedSourceKey: fail

SourceKey String (Wajib)

Nama field sumber.

Regex String (Wajib)

Ekspresi reguler untuk mengurai log.

Keys String (Wajib)

Daftar kunci untuk field yang diekstraksi.

KeepingSourceWhenParseFail boolean (Opsional)

Apakah mempertahankan field sumber saat penguraian gagal. Default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Apakah mempertahankan field sumber saat penguraian berhasil. Default: false.

RenamedSourceKey String (Opsional)

Nama baru untuk field sumber jika dipertahankan. Jika dihilangkan, field sumber tidak diganti namanya.

Penguraian delimiter

Mengurai log menjadi pasangan kunci-nilai menggunakan delimiter karakter tunggal atau multi-karakter.

Parameter

Contoh

Type String (Wajib)

Diperbaiki menjadi processor_parse_delimiter_native.

# ... di bawah spec.config ...
processors:
  # Konfigurasi prosesor penguraian delimiter
  - Type: processor_parse_delimiter_native
    # Field sumber, biasanya content
    SourceKey: content

    Separator: ','

    Quote: '"'

    # Tentukan nama untuk field yang diekstraksi secara berurutan.
    Keys:
      - time
      - ip
      - request
      - status
      - size
      - user_agent

SourceKey String (Wajib)

Nama field sumber.

Separator String (Wajib)

Delimiter field. Misalnya, file CSV menggunakan koma (,).

Keys [String] (Wajib)

Daftar kunci untuk field yang diekstraksi.

Quote String (Opsional)

Karakter quote yang digunakan untuk membungkus field yang berisi karakter khusus, seperti delimiter.

AllowingShortenedFields boolean (Opsional)

Apakah mengizinkan jumlah field yang diekstraksi lebih sedikit daripada Keys. Default: true. Jika tidak diizinkan, operasi dianggap sebagai kegagalan penguraian.

OverflowedFieldsTreatment String (Opsional)

Perilaku saat jumlah field yang diekstraksi lebih banyak daripada Keys. Default: extend. Nilai valid:

  • extend: Mempertahankan field berlebih dan menambahkannya ke log sebagai field terpisah. Field tersebut diberi nama _column$i_, di mana $i adalah indeks field berlebih, dimulai dari 0.

  • keep: Mempertahankan field berlebih, tetapi menambahkan konten berlebih ke log sebagai satu field bernama _column0_.

  • discard: Membuang field berlebih.

KeepingSourceWhenParseFail boolean (Opsional)

Apakah mempertahankan field sumber jika penguraian gagal. Default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Apakah mempertahankan field sumber saat penguraian berhasil. Default: false.

RenamedSourceKey String (Opsional)

Nama baru untuk field sumber jika dipertahankan. Jika dihilangkan, field sumber tidak diganti namanya.

Penguraian JSON standar

Mengurai objek JSON dari field log menjadi pasangan kunci-nilai.

Parameter

Contoh

Type String (Wajib)

Tetap ke processor_parse_json_native.

# ... di bawah spec.config ...
processors:
  # Konfigurasi prosesor penguraian JSON
  - Type: processor_parse_json_native
    # Field sumber dari log mentah
    SourceKey: content
    KeepingSourceWhenParseFail: true
    RenamedSourceKey: raw_log

SourceKey String (Wajib)

Nama field sumber.

KeepingSourceWhenParseFail boolean (Opsional)

Apakah mempertahankan field sumber saat penguraian gagal. Default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Apakah mempertahankan field sumber saat penguraian berhasil. Default: false.

RenamedSourceKey String (Opsional)

Nama baru untuk field sumber jika dipertahankan. Jika dihilangkan, field sumber tidak diganti namanya.

Catatan

Nama parameter dalam YAML CRD menggunakan camelCase, seperti RenamedSourceKey. Nama dalam snake_case, seperti renamed_source_key, tidak valid.

Penguraian JSON bersarang

Meratakan objek JSON bersarang menjadi pasangan kunci-nilai dan memungkinkan Anda menentukan kedalaman ekspansi.

Parameter

Contoh

Type String (Wajib)

Tetap ke processor_json.

# ... di bawah spec.config ...
processors:
  # Konfigurasikan prosesor ekspansi field JSON.
  - Type: processor_json
    # Tentukan field sumber untuk diurai.
    SourceKey: content
    
    ExpandDepth: 0

    ExpandConnector: '_'

    Prefix: expand

    IgnoreFirstConnector: false

    # Apakah mengembangkan elemen array menjadi field terpisah.
    ExpandArray: false

    # Apakah mempertahankan konten field asli.
    KeepSource: true

    # Apakah melaporkan error jika field sumber tidak ditemukan.
    NoKeyError: true

    # Apakah menggunakan nama field sumber sebagai awalan untuk nama field yang diekspansi.
    UseSourceKeyAsPrefix: false

    # Apakah mempertahankan data log mentah jika penguraian JSON gagal.
    KeepSourceIfParseError: true

SourceKey String (Wajib)

Nama field sumber.

ExpandDepth integer (Opsional)

Kedalaman ekspansi maksimum untuk objek JSON bersarang. Default: 0.

  • 0: Mengembangkan objek hingga level terdalam yang dapat diurai.

  • 1: Hanya mengembangkan level teratas objek, dan seterusnya.

ExpandConnector String (Opsional)

Konektor yang digunakan antara kunci saat meratakan objek JSON bersarang. Default: garis bawah (_).

Prefix String (Opsional)

Awalan yang ditambahkan ke semua nama field yang diekspansi.

IgnoreFirstConnector String (Opsional)

Apakah menghilangkan konektor sebelum field level teratas. Default: false.

ExpandArray boolean (Opsional)

Apakah mengembangkan tipe array. Default: false.

  • false (default): Tidak mengembangkan array.

  • true: Array dikembangkan. Misalnya, {"k":["1","2"]} dikembangkan menjadi {"k[0]":"1","k[1]":"2"}.

Catatan

Parameter ini didukung di Logtail 1.8.0 dan versi lebih baru.

KeepSource boolean (Opsional)

Apakah mempertahankan field asli dalam log yang diurai. Default: true.

  • true: Pertahankan

  • false: Buang

NoKeyError boolean (Opsional)

Apakah melaporkan error jika field sumber yang ditentukan tidak ditemukan. Default: true.

  • true: Laporkan error.

  • false: Jangan laporkan error.

UseSourceKeyAsPrefix boolean (Opsional)

Jika diatur ke true, menggunakan nama field sumber sebagai awalan untuk semua nama field yang diekspansi.

KeepSourceIfParseError boolean (Opsional)

Apakah mempertahankan log mentah saat penguraian gagal. Default: true.

  • true: Pertahankan

  • false: Buang

Penguraian array JSON

Gunakan fungsi json_extract untuk mengekstraksi objek JSON dari array JSON. Fungsi JSON.

Parameter

Contoh

Type String (Wajib)

Jenis plugin. Jenis plugin SPL adalah processor_spl.

# ... di bawah spec.config ...
processors:
  # Gunakan skrip SPL untuk memproses field log.
  - Type: processor_spl
    # Batas waktu eksekusi skrip dalam milidetik.
    TimeoutMilliSeconds: 1000

    # Skrip SPL, digunakan untuk mengekstraksi elemen dari array JSON di field content.
    Script: >-
      * | extend
        json1 = json_extract(content, '$[0]'),
        json2 = json_extract(content, '$[1]')

Script String (Wajib)

Skrip SPL yang digunakan untuk mengekstraksi elemen dari array JSON di field content.

TimeoutMilliSeconds integer (Opsional)

Batas waktu eksekusi skrip dalam milidetik. Nilainya harus antara 0 hingga 10.000. Nilai default: 1.000.

Penguraian log NGINX

Mengurai log NGINX menjadi pasangan kunci-nilai berdasarkan definisi log_format Anda. Jika format default tidak memenuhi kebutuhan Anda, Anda dapat menggunakan format kustom.

Parameter

Contoh

Type String (Wajib)

Tetap ke processor_parse_regex_native.

# ... di bawah spec.config ...
processors:
  # Konfigurasi prosesor penguraian log NGINX
  - Type: processor_parse_regex_native
    # Field sumber dari log mentah
    SourceKey: content
    
    # Aturan penguraian ekspresi reguler
    Regex: >-
      (\S*)\s*-\s*(\S*)\s*\[
      (\d+/\S+/\d+:\d+:\d+:\d+)\s+\S+\]
      \s*"(\S+)\s+(\S+)\s+\S+"
      \s*(\S*)\s*(\S*)\s*(\S*)\s*(\S*)
      \s*"([^"]*)"\s*"([^"]*)".*
    
    # Peta field yang diekstraksi
    Keys:
      - remote_addr
      - remote_user
      - time_local
      - request_method
      - request_uri
      - request_time
      - request_length
      - status
      - body_bytes_sent
      - http_referer
      - http_user_agent
    
    # Konfigurasi khusus NGINX
    Extra:
      Format: >-
        log_format main  '$remote_addr - $remote_user [$time_local]
        "$request" ''$request_time $request_length ''$status
        $body_bytes_sent "$http_referer" ''"$http_user_agent"';
      LogType: NGINX

SourceKey String (Wajib)

Nama field sumber.

Regex String (Wajib)

Ekspresi reguler untuk mengurai log NGINX.

Keys String (Wajib)

Daftar kunci untuk field yang diekstraksi.

Extra

  • Format String (Wajib)

    Direktif log_format dari file konfigurasi NGINX Anda.

    Di lingkungan produksi, log_format ini harus konsisten dengan definisi di file konfigurasi Nginx (biasanya terletak di /etc/nginx/nginx.conf).
  • LogType String (Wajib)

    Tetap ke NGINX.

KeepingSourceWhenParseFail boolean (Opsional)

Apakah mempertahankan field asli jika penguraian gagal. Default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Apakah mempertahankan field asli saat penguraian berhasil. Default: false.

RenamedSourceKey String (Opsional)

Nama baru untuk field sumber jika dipertahankan. Jika dihilangkan, field sumber tidak diganti namanya.

Penguraian log Apache

Mengurai log Apache menjadi pasangan kunci-nilai berdasarkan format yang ditentukan di file konfigurasi Apache Anda.

Parameter

Contoh

Type String (Wajib)

Tetap ke processor_parse_regex_native.

# ... di bawah spec.config ...
processors:
  # Konfigurasikan prosesor penguraian log Apache Combined (berdasarkan ekspresi reguler).
  - Type: processor_parse_regex_native
    # Field sumber, biasanya content.
    SourceKey: content

    # Ekspresi reguler untuk mencocokkan dan mengekstraksi log dalam format Apache combined.
    Regex: >-
      ([0-9.-]+)\s                          # remote_addr
      ([\w.-]+)\s                           # remote_ident
      ([\w.-]+)\s                           # remote_user
      (\[[^\[\]]+\]|-)\s                    # time_local
      "((?:[^"]|\")+)"\s                     # request_method + request_uri + request_protocol
      "((?:[^"]|\")+)"\s                     # request_uri (tangkapan duplikat? periksa logika)
      "((?:[^"]|\")+)"\s                     # request_protocol
      (\d{3}|-)\s                           # status
      (\d+|-)\s                             # response_size_bytes
      "((?:[^"]|\")+)"\s                     # http_referer
      "((?:[^"]|\"|')+)"                     # http_user_agent

    # Daftar field yang diekstraksi, sesuai dengan grup regex secara berurutan.
    Keys:
      - remote_addr
      - remote_ident
      - remote_user
      - time_local
      - request_method
      - request_uri
      - request_protocol
      - status
      - response_size_bytes
      - http_referer
      - http_user_agent

    # Informasi plugin tambahan (opsional, digunakan untuk menggambarkan format log).
    Extra:
      Format: >-
        LogFormat "%h %l %u %t \"%r\" %>s %b
        \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogType: Apache
      SubType: combined

SourceKey String (Wajib)

Nama field sumber.

Regex String (Wajib)

Ekspresi reguler untuk mengurai log Apache.

Keys String (Wajib)

Daftar kunci untuk field yang diekstraksi.

Extra

  • Format String (Wajib)

    Direktif LogFormat dari file konfigurasi Apache Anda.

  • LogType String (Wajib)

    Diperbaiki menjadi Apache.

  • SubType String (Wajib)

    Format log.

    • common

    • combined

    • custom

KeepingSourceWhenParseFail boolean (Opsional)

Apakah mempertahankan field asli jika penguraian gagal. Default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Apakah mempertahankan field asli saat penguraian berhasil. Default: false.

RenamedSourceKey String (Opsional)

Nama baru untuk field sumber jika dipertahankan. Jika dihilangkan, field sumber tidak diganti namanya.

Penyamaran data

Gunakan plugin processor_desensitize_native untuk menyamarkan data sensitif dalam log Anda.

Parameter

Contoh

Type String (Wajib)

Atur ke processor_desensitize_native.

# ... di bawah spec.config ...
processors:
  # Konfigurasikan plugin penyamaran log native
  - Type: processor_desensitize_native

    # Nama field sumber
    SourceKey: content

    # Metode penyamaran, seperti 'const' yang mengganti data sensitif dengan string tetap
    Method: const

    # String untuk mengganti data sensitif
    ReplacingString: '********'

    # Ekspresi reguler untuk konten yang mendahului data sensitif
    ContentPatternBeforeReplacedString: 'password'':'''

    # Ekspresi reguler untuk data sensitif yang akan diganti
    ReplacedContentPattern: '[^'']*'

    # Menentukan apakah mengganti semua kecocokan. Default adalah true.
    ReplacingAll: true

SourceKey String (Wajib)

Nama field sumber.

Method String (Wajib)

Metode penyamaran. Nilai yang didukung:

  • const: Mengganti data sensitif dengan string konstan.

  • md5: Mengganti data sensitif dengan hash MD5-nya.

ReplacingString String (Opsional)

String konstan yang mengganti data sensitif. Parameter ini wajib saat Method diatur ke const.

ContentPatternBeforeReplacedString String (Wajib)

Ekspresi reguler untuk konten yang mendahului data sensitif.

ReplacedContentPattern String (Wajib)

Ekspresi reguler yang mencocokkan data sensitif.

ReplacingAll boolean (Opsional)

Apakah mengganti semua kecocokan. Default: true.

Penyaringan konten

Konfigurasikan plugin processor_filter_regex_native untuk mencocokkan nilai field log terhadap ekspresi reguler dan hanya mempertahankan log yang cocok.

Parameter

Contoh

Type String (wajib)

Jenis plugin. Nilai ini harus processor_filter_regex_native.

# ...di bawah spec.config...
processors:
  # Konfigurasikan plugin penyaringan ekspresi reguler (untuk penyamaran log atau penyaringan kata sensitif).
  - Type: processor_filter_regex_native

    # Definisikan daftar ekspresi reguler untuk mencocokkan konten field log.
    FilterRegex:
      # Contoh: Mencocokkan nilai field log yang berisi "WARNING" atau "ERROR".
      - WARNING|ERROR

    # Tentukan nama field log yang akan disaring. Contoh ini menyaring field 'level'.
    FilterKey:
      - level

FilterRegex String (wajib)

Daftar ekspresi reguler untuk mencocokkan nilai field log.

FilterKey String (wajib)

Daftar nama field log untuk menerapkan pola FilterRegex.

Penguraian waktu

Urai field waktu dalam log dan gunakan hasilnya sebagai field __time__ log.

Field utama

Contoh

Type String (Wajib)

Jenis plugin. Atur keprocessor_parse_timestamp_native.

# ...di bawah spec.config...
processors:
  # Konfigurasikan plugin penguraian waktu native.
  - Type: processor_parse_timestamp_native
    # Field sumber yang berisi timestamp, biasanya 'content'.
    SourceKey: content

    # Format timestamp sumber. Harus persis sesuai dengan format log.
    SourceFormat: '%Y-%m-%d %H:%M:%S'
    
    SourceTimezone: 'GMT+00:00'

SourceKey String (Wajib)

Nama field sumber.

SourceFormat String (Wajib)

Format waktu. Ini harus persis sesuai dengan format waktu dalam log.

SourceTimezone String (Opsional)

Zona waktu timestamp sumber. Default: zona waktu mesin yang menjalankan LoongCollector.

Format:

  • GMT+HH:MM: Zona waktu di timur GMT

  • GMT-HH:MM: Zona waktu di barat GMT

Konfigurasi lanjutan

Setelah menyelesaikan konfigurasi minimal, gunakan pengaturan lanjutan ini untuk pengumpulan yang lebih detail:

  • Konfigurasikan pengumpulan log multi-baris: Aktifkan mode multi-baris dengan regex pola awal untuk mengumpulkan entri yang mencakup beberapa baris (seperti stack trace) sebagai satu catatan log.

  • Konfigurasikan jenis topik log: Tetapkan topik ke aliran log untuk memudahkan pengorganisasian dan pengambilan.

  • Tentukan kontainer untuk pengumpulan (penyaringan dan daftar hitam): Gunakan daftar putih dan daftar hitam untuk mengumpulkan log hanya dari kontainer dan jalur tertentu.

  • Perkaya log dengan tag: Tambahkan metadata dari variabel lingkungan dan label pod ke log Anda sebagai tag.

Konfigurasikan pengumpulan log multi-baris

Secara default, SLS membagi log baris per baris, memecah entri multi-baris seperti stack trace menjadi catatan terpisah.

Aktifkan mode multi-baris dan konfigurasikan regex pola awal untuk mengelompokkan entri multi-baris menjadi satu catatan log.

Konfigurasi utama: Tambahkan parameter Multiline ke konfigurasi <a baseurl="t3010624_v1_5_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#c801b53fd5xu4" id="f3ede8f0e8rnz">spec.config.inputs</a>.

Detail field

Contoh

Multiline

Mengaktifkan pengumpulan log multi-baris.

  • Mode

    Mode pengumpulan. Nilai default adalah custom.

    • custom: Gunakan ekspresi reguler kustom untuk mencocokkan awal baris.

    • JSON: Format JSON multi-baris.

  • StartPattern

    Ekspresi reguler untuk awal baris. Parameter ini wajib saat Mode diatur ke custom.

# ...di bawah spec.config...
inputs:
  - Type: input_file
    # Aktifkan pengumpulan log multi-baris.
    Multiline:
      # Pemilihan mode: custom menunjukkan ekspresi reguler kustom untuk mencocokkan awal baris.
      Mode: custom
      # Ekspresi reguler mencocokkan awal setiap entri log, yang menandai awal log baru.
      StartPattern: '\d+-\d+-\d+\s\d+:\d+:\d+'

Jenis topik log

Konfigurasi utama: Tambahkan parameter global ke <a baseurl="t3010624_v1_5_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#c801b53fd5xu4" id="bd8af01817orq">spec.config</a> untuk mengatur topik log.

Detail field

Contoh

TopicType

Jenis topik. Nilai valid:

  • machine_group_topic: Menggunakan topik dari kelompok mesin tempat konfigurasi ini diterapkan. Ini membantu membedakan log dari kelompok mesin berbeda.

  • filepath: Mengekstraksi topik dari jalur file. Ini membantu membedakan data log dari pengguna atau aplikasi berbeda.

  • custom: Menggunakan topik log statis kustom.

Topik kelompok mesin

spec: 
  config:
    global: 
    # Gunakan topik kelompok mesin tempat konfigurasi ini diterapkan sebagai topik log.
      TopicType: machine_group_topic              

Ekstraksi jalur file

spec:  
  config:
    global: 
      TopicType: filepath
    # Format topik. Wajib saat TopicType adalah filepath atau custom.
    # Hasil ekstraksi adalah __topic__: userA, __topic__: userB, dan __topic__: userC.
      TopicFormat: \/data\/logs\/(.*)\/serviceA\/.*

Kustom

spec:  
  config:
    global: 
      TopicType: custom
    # Format topik. Wajib saat TopicType adalah filepath atau custom.
      TopicFormat: customized://

TopicFormat

Format topik. Parameter ini wajib saat TopicType diatur ke filepath atau custom.

Penyaringan dan daftar hitam kontainer

Penyaringan

Kumpulkan log hanya dari kontainer yang memenuhi kondisi tertentu. Beberapa kondisi digabungkan dengan logika AND. Kondisi kosong diabaikan. Semua kondisi mendukung ekspresi reguler.

Konfigurasi utama: Konfigurasikan parameter penyaringan kontainer di bawah ContainerFilters pada bagian <a baseurl="t3010624_v1_5_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#c801b53fd5xu4" id="aa519613f0gdu">spec.config.inputs</a>.

Rincian Kolom

Contoh

ContainerFilters

Pengaturan penyaringan kontainer.

  • Daftar putih/hitam label pod K8s

    • IncludeK8sLabel

      Daftar putih label pod K8s. Mengumpulkan log dari kontainer dengan label pod tertentu.

    • ExcludeK8sLabel

      Daftar hitam label pod K8s. Mengecualikan log dari kontainer dengan label pod tertentu.

  • Daftar putih/hitam variabel lingkungan

    • IncludeEnv

      Daftar putih variabel lingkungan.

    • ExcludeEnv

      Daftar hitam variabel lingkungan.

  • Pencocokan regex untuk nama pod/namespace/kontainer

    • K8sNamespaceRegex

      Mencocokkan nama namespace dengan ekspresi reguler.

    • K8sPodRegex

      Mencocokkan nama pod dengan ekspresi reguler.

    • K8sContainerRegex

      Mencocokkan nama kontainer dengan ekspresi reguler.

Semua pencocokan ekspresi reguler berdasarkan mesin RE2 bahasa Go, yang memiliki batasan tertentu dibandingkan mesin seperti PCRE. Tulis ekspresi reguler Anda sesuai panduan di Lampiran: Batasan ekspresi reguler untuk penyaringan kontainer.
# ...di bawah spec.config...
inputs:
  - Type: input_file # atau input_container_stdio
    # Saat jenis plugin input adalah input_file, Anda harus mengatur EnableContainerDiscovery ke true.
    EnableContainerDiscovery: true
    # Penyaringan kontainer
    ContainerFilters:
      # Daftar putih label pod K8s: Menentukan kontainer dari mana log dikumpulkan.
      IncludeK8sLabel:
        # Contoh: Cocokkan semua pod yang memiliki label app dengan nilai nginx atau redis.
        app: ^(nginx|redis)$

      # Daftar hitam label pod K8s: Mengecualikan pengumpulan log dari kontainer yang memenuhi kondisi tertentu.
      ExcludeK8sLabel:
        # Contoh: Kecualikan semua pod dengan label app:test.
        app: test
      
      # Daftar putih variabel lingkungan.
      IncludeEnv:
        # Cocokkan semua kontainer dengan NGINX_SERVICE_PORT=80 atau NGINX_SERVICE_PORT=6379.
        NGINX_SERVICE_PORT: ^(80|6379)$

      # Daftar hitam variabel lingkungan.
      ExcludeEnv:
        # Kecualikan semua kontainer dengan ENVIRONMENT=test.
        ENVIRONMENT: test
      
      # Cocokkan nama namespace. Contoh: Cocokkan semua kontainer di namespace default dan nginx.
      K8sNamespaceRegex: ^(default|nginx)$
      # Cocokkan nama pod. Contoh: Cocokkan kontainer di semua pod yang namanya dimulai dengan nginx-log-demo.
      K8sPodRegex: ^(nginx-log-demo.*)$
      # Cocokkan nama kontainer. Contoh: Cocokkan semua kontainer bernama container-test.
      K8sContainerRegex: ^(container-test)$

Daftar hitam

Kecualikan file yang memenuhi kriteria tertentu. Untuk melakukan ini, tambahkan parameter berikut di bawah config.inputs dalam konfigurasi YAML Anda sesuai kebutuhan:

Detail field

Contoh

# ...di bawah spec.config...
inputs:
  - Type: input_file
    # Daftar hitam jalur file. Mengecualikan file berdasarkan kondisi yang ditentukan. Jalur harus berupa jalur mutlak dan mendukung karakter wildcard *.
    ExcludeFilePaths:
      - /var/log/*.log

    # Daftar hitam nama file. Mengecualikan file berdasarkan kondisi yang ditentukan. Mendukung karakter wildcard *.
    ExcludeFiles:
      - test

    # Daftar hitam direktori. Mengecualikan direktori berdasarkan kondisi yang ditentukan. Jalur harus mutlak dan mendukung karakter wildcard *.
    ExcludeDirs:
      - /var/log/backup*               

ExcludeFilePaths

Daftar hitam jalur file. Mengecualikan file yang cocok dengan jalur mutlak tertentu. Jalur dapat mencakup karakter wildcard *.

ExcludeFiles

Daftar hitam nama file. Mengecualikan file dengan nama yang cocok. Nama dapat mencakup karakter wildcard *.

ExcludeDirs

Daftar hitam direktori. Mengecualikan direktori berdasarkan jalur tertentu. Jalur harus mutlak dan dapat mencakup karakter wildcard *.

Perkayaan log dengan tag

Konfigurasi utama: Di <a baseurl="t3010624_v1_5_0.xdita" data-node="6128095" data-root="16376" data-tag="xref" href="t3145878.xdita#c801b53fd5xu4" id="c7eb12a5deg0j">spec.config.inputs</a>, konfigurasikan ExternalEnvTag dan ExternalK8sLabelTag untuk memetakan variabel lingkungan kontainer dan label Pod ke tag log.

Detail field

Contoh

ExternalEnvTag

Memetakan nilai variabel lingkungan tertentu ke tag log. Formatnya adalah <nama_variabel_lingkungan>: <nama_tag>.

# ...di bawah spec.config...
inputs:
  - Type: input_file # atau input_container_stdio
    ExternalEnvTag:
      <nama_variabel_lingkungan>: <nama_tag>
    
    ExternalK8sLabelTag:
      <nama_label_pod>: <nama_tag>          

ExternalK8sLabelTag

Memetakan nilai label pod Kubernetes ke tag log. Formatnya adalah <nama_label_pod>: <nama_tag>.

Contoh konfigurasi

Kasus penggunaan 1: Uraikan log akses Nginx

Konfigurasi ini mengurai log Nginx dan menyusun kontennya menjadi beberapa pasangan kunci-nilai berdasarkan definisi log_format.

Contoh YAML lengkap

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  name: nginx-config
spec:
  config:
    aggregators: []
    global: {}
    inputs:
      - Type: input_file
        FilePaths:
          - /root/log/text1.log
        MaxDirSearchDepth: 0
        FileEncoding: utf8
        EnableContainerDiscovery: true
    processors:
      - Type: processor_parse_regex_native
        SourceKey: content
        Regex: >-
          (\S*)\s*-\s*(\S*)\s*\[(\d+/\S+/\d+:\d+:\d+:\d+)\s+\S+\]\s*"(\S+)\s+(\S+)\s+\S+"\s*(\S*)\s*(\S*)\s*(\S*)\s*(\S*)\s*"([^"]*)"\s*"([^"]*)".*
        Keys:
          - remote_addr
          - remote_user
          - time_local
          - request_method
          - request_uri
          - request_time
          - request_length
          - status
          - body_bytes_sent
          - http_referer
          - http_user_agent
        Extra:
          Format: >-
            log_format main  '$remote_addr - $remote_user [$time_local]
            "$request" ''$request_time $request_length ''$status
            $body_bytes_sent "$http_referer" ''"$http_user_agent"';
          LogType: NGINX
    flushers:
      - Type: flusher_sls
        Logstore: my-log-logstore
    sample: >-
      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"
  project:
    name: my-log-project
  logstores:
    - name: my-log-logstore
    

Kasus penggunaan 2: Proses log multi-baris

Secara default, SLS memperlakukan setiap baris sebagai entri log terpisah, memecah log multi-baris seperti stack trace menjadi beberapa catatan.

Aktifkan mode multi-baris dengan regex pola awal untuk mengelompokkan semua baris log multi-baris menjadi satu entri.

Contoh YAML lengkap

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  name: multiline-config
spec:
  config:
    aggregators: []
    global: {}
    inputs:
      - Type: input_file
        FilePaths:
          - /root/log/text1.log
        MaxDirSearchDepth: 0
        FileEncoding: utf8
        Multiline:
          StartPattern: '\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*'
          Mode: custom
          UnmatchedContentTreatment: single_line
        EnableContainerDiscovery: true
    processors: []
    flushers:
      - Type: flusher_sls
        Logstore: my-log-logstore
    sample: |-
      [2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
          at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
          at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
          at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
  project:
    name: my-log-project
  logstores:
    - name: my-log-logstore

FAQ

Mengelola distribusi multi-tujuan

Konfigurasi distribusi multi-tujuan dikaitkan dengan beberapa Logstore dan harus dikelola di halaman manajemen tingkat project:

  1. Masuk ke Konsol Simple Log Service dan klik nama project target.

  2. Di halaman project, di panel navigasi sebelah kiri, klik imageResources > Configurations.

    Catatan

    Halaman ini mencantumkan semua konfigurasi pengumpulan dalam project, termasuk konfigurasi sisa dari Logstore yang dihapus secara tidak sengaja.

Kirim log ACK ke project lintas akun

Instal LoongCollector (Logtail) secara manual di kluster ACK dan konfigurasikan dengan kredensial akun target untuk mengirim log ke project di akun Alibaba Cloud lain.

Kasus penggunaan: Kumpulkan log dari kluster ACK ke project di bawah akun terpisah untuk struktur organisasi, isolasi izin, atau pemantauan terpusat.

Prosedur: Prosedur ini menunjukkan cara menginstal LoongCollector secara manual. Untuk mempelajari cara menginstal Logtail, lihat Instal dan konfigurasikan Logtail.

  1. Hubungkan ke kluster Kubernetes Anda. Kemudian, jalankan perintah yang sesuai untuk wilayah Anda guna mengunduh LoongCollector dan dependensinya:

    Untuk wilayah di Tiongkok daratan:

    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh

    Untuk wilayah di luar Tiongkok daratan:

    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. Buka direktori loongcollector-custom-k8s-package dan modifikasi file konfigurasi ./loongcollector/values.yaml.

    # ===================== Parameter wajib =====================
    # Project tempat log dikirim. Contoh: k8s-log-custom-sd89ehdq.
    projectName: ""
    # Wilayah Project. Contoh: cn-shanghai.
    region: ""
    # UID Akun Alibaba Cloud yang memiliki Project. Masukkan nilai dalam tanda kutip. Contoh: "123456789"
    aliUid: ""
    # Jenis jaringan. Nilai valid: Internet (jaringan publik) dan Intranet (jaringan internal). Default: Internet.
    net: Internet
    # ID AccessKey dan secret untuk Akun Alibaba Cloud atau Pengguna RAM yang memiliki kebijakan AliyunLogFullAccess.
    accessKeyID: ""
    accessKeySecret: ""
    # ID kluster kustom. ID hanya boleh berisi huruf besar, huruf kecil, angka, dan tanda hubung (-).
    clusterID: ""
  3. Di direktori loongcollector-custom-k8s-package, jalankan perintah berikut untuk menginstal LoongCollector dan dependensinya:

    bash k8s-custom-install.sh install
  4. Setelah instalasi selesai, periksa status komponen.

    Jika pod gagal dimulai, verifikasi konfigurasi values.yaml dan pastikan image yang diperlukan telah ditarik.
    # Periksa status pod
    kubectl get po -n kube-system | grep loongcollector-ds

    Simple Log Service juga secara otomatis membuat resource berikut. Lihat resource tersebut di Konsol Simple Log Service.

    Jenis resource

    Nama resource

    Deskripsi

    Project

    Nilai projectName yang Anda tentukan di file values.yaml

    Mengisolasi log dari layanan berbeda.

    machine group

    k8s-group-${cluster_id}

    Sekelompok node pengumpulan log.

    Penting

    LoongCollector tidak membuat logstore bernama config-operation-log. Jika logstore dengan nama tersebut sudah ada, LoongCollector berhenti menulis log ke dalamnya.

Pengumpulan ganda untuk satu sumber

Secara default, SLS membatasi setiap sumber log hanya untuk satu konfigurasi pengumpulan guna mencegah duplikasi:

  • File log teks hanya dapat cocok dengan satu konfigurasi pengumpulan Logtail.

  • Output standar kontainer (stdout) hanya dapat cocok dengan satu konfigurasi pengumpulan output standar.

  1. Masuk ke Konsol Simple Log Service dan buka project target.

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

  3. Klik ikon image di sebelah nama logstore untuk memperluasnya.

  4. Klik Logtail Configuration. Di daftar konfigurasi, temukan konfigurasi Logtail target lalu klik Manage Logtail Configuration di kolom Actions.

  5. Di halaman Konfigurasi Logtail, klik Edit dan gulir ke bagian Input Configurations:

    • Untuk mengumpulkan log file teks, aktifkan Allow File to Be Collected for Multiple Times.

    • Untuk mengumpulkan output standar kontainer, aktifkan Allow Collection by Different Logtail Configurations.

Lampiran: Batasan regex (penyaringan kontainer)

Ekspresi reguler untuk penyaringan kontainer menggunakan mesin RE2 Go, yang memiliki batasan sintaks dibandingkan PCRE:

1. Perbedaan sintaks grup bernama

Go menggunakan sintaks (?P<name>...) untuk grup bernama. Tidak mendukung sintaks (?<name>...) yang digunakan di PCRE.

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

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

2. Fitur ekspresi reguler yang tidak didukung

RE2 tidak mendukung fitur ekspresi reguler umum berikut yang kompleks. Hindari penggunaannya:

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

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

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

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

  • Grup atomik: (?>...)

3. Rekomendasi

Saat men-debug regex dengan alat seperti Regex101, pilih mode Golang (RE2). Sintaks yang tidak didukung mencegah plugin mengurai atau mencocokkan dengan benar.