全部产品
Search
文档中心

Simple Log Service:Kumpulkan log kontainer (output standar dan file) dari kluster menggunakan CRD Kubernetes

更新时间:Mar 04, 2026

Mendefinisikan pengaturan pengumpulan log sebagai CustomResourceDefinition (CRD) Kubernetes menyatukan manajemen di seluruh kluster, termasuk Container Service for Kubernetes (ACK) dan kluster yang dikelola sendiri. Pendekatan ini menggantikan proses manual yang tidak konsisten dan rentan kesalahan dengan otomatisasi berbasis versi melalui kubectl dan pipeline CI/CD. Hot reloading bawaan LoongCollector menerapkan perubahan secara instan tanpa perlu restart, sehingga langsung meningkatkan efisiensi operasional dan kemudahan pemeliharaan sistem.

CRD AliyunLogConfig lama tidak lagi dipelihara. Gunakan CRD AliyunPipelineConfig yang baru sebagai gantinya. Untuk perbandingan antara versi baru dan lama, lihat Jenis CRD.
Penting

Konfigurasi pengumpulan yang dibuat menggunakan CRD hanya dapat dimodifikasi dengan memperbarui CRD yang sesuai. Perubahan yang dilakukan di konsol Simple Log Service (SLS) tidak disinkronkan ke CRD dan tidak berlaku.

Catatan penggunaan

  • Lingkungan operasi:

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

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

    • Runtime kontainer (hanya Docker dan Containerd)

      • Docker:

        • Memerlukan izin akses untuk docker.sock.

        • Pengumpulan output standar hanya mendukung driver log JSON.

        • Hanya mendukung driver penyimpanan overlay dan overlay2. Untuk tipe lainnya, Anda harus memasang direktori log secara manual.

      • Containerd: Memerlukan izin akses untuk containerd.sock.

  • Kebutuhan resource: LoongCollector (Logtail) berjalan dengan prioritas tinggi `system-cluster-critical`. Jangan men-deploy-nya jika resource kluster tidak mencukupi, karena dapat mengusir Pod yang sudah ada di node tersebut.

    • CPU: Cadangkan minimal 0,1 Core.

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

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

  • Izin: Akun Alibaba Cloud atau Pengguna RAM yang digunakan untuk deployment 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: Deploy LoongCollector sebagai DaemonSet untuk memastikan kontainer pengumpulan berjalan di setiap node dalam kluster. Hal ini memungkinkan pengumpulan terpadu log dari semua kontainer di node tersebut.

  2. Create a logstore: Logstore adalah unit penyimpanan untuk data log. Beberapa logstore dapat dibuat dalam satu proyek.

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

    • Metode 1: Gunakan generator konfigurasi pengumpulan

      Gunakan generator konfigurasi pengumpulan di konsol SLS untuk memasukkan parameter secara visual dan menghasilkan file YAML standar secara otomatis.

    • Metode 2: Tulis file YAML secara manual

      Tulis file YAML berdasarkan contoh dan alur kerja dalam topik ini. Mulailah dengan konfigurasi minimal dan tambahkan logika pemrosesan serta fitur lanjutan secara bertahap.

      Untuk informasi lebih lanjut tentang kasus penggunaan kompleks yang tidak dibahas dalam topik ini atau field yang memerlukan kustomisasi mendalam, lihat Parameter AliyunPipelineConfig untuk daftar lengkap field, aturan nilai, dan kemampuan plugin.

    Konfigurasi pengumpulan lengkap biasanya mencakup bagian-bagian berikut:

    • Konfigurasi minimal (Wajib): Membangun saluran data dari kluster ke SLS. Terdiri dari dua bagian:

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

        • Output standar kontainer (stdout dan stderr): Konten log yang dicetak program kontainer ke konsol.

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

      • Output (flushers): Mendefinisikan target log. Mengirim log yang dikumpulkan ke logstore yang ditentukan.

        Jika proyek atau logstore target tidak ada, sistem akan membuatnya secara otomatis. Anda juga dapat membuat proyek dan logstore secara manual terlebih dahulu.
    • Konfigurasi pemrosesan umum (Opsional): Mendefinisikan field processors untuk melakukan penguraian terstruktur (seperti penguraian ekspresi reguler atau delimiter), penyembunyian, atau penyaringan pada log mentah.

      Topik ini hanya menjelaskan plugin pemrosesan native yang mencakup kasus penggunaan umum. Untuk fitur lainnya, lihat Plugin pemrosesan ekstensi.
    • Konfigurasi lanjutan lainnya (Opsional): Mengimplementasikan fitur seperti pengumpulan log multi-baris dan penguatan tag log untuk memenuhi kebutuhan pengumpulan yang lebih detail halus.

    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. Harus unik dalam kluster Kubernetes.
    spec:
      project:                                      # Tetapkan nama proyek target.
        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 baru yang diluncurkan oleh SLS. Ini merupakan versi peningkatan dari Logtail. Keduanya tidak dapat berjalan bersamaan. Untuk menginstal Logtail, lihat Instal dan konfigurasi Logtail.

Topik ini hanya menjelaskan langkah instalasi dasar LoongCollector. Untuk parameter detail, lihat Instalasi dan konfigurasi. Jika Anda telah menginstal LoongCollector atau Logtail, lewati langkah ini dan lanjutkan untuk membuat logstore guna menyimpan log yang dikumpulkan.

Kluster ACK

Instal LoongCollector dari konsol Container Service for Kubernetes (ACK). Secara default, log dikirim ke proyek SLS di bawah akun Alibaba Cloud saat ini.

  1. Masuk ke Konsol Manajemen Container Service . Di panel navigasi sebelah 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 dan klik Install.

    Catatan

    Untuk kluster baru, di bagian Advanced Options, pilih Enable Log Service. Lalu Create Project atau Select Project.

    Setelah instalasi selesai, SLS secara otomatis membuat resource terkait di wilayah tempat kluster ACK berada. Masuk ke Konsol Simple Log Service untuk melihatnya.

    Jenis resource

    Nama resource

    Fungsi

    Proyek

    k8s-log-${cluster_id}

    Unit manajemen resource yang mengisolasi log untuk layanan berbeda.

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

    Kelompok mesin

    k8s-group-${cluster_id}

    Kumpulan node pengumpul log.

    Penting

    LoongCollector tidak akan 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 dan jalankan perintah yang sesuai untuk wilayah Anda guna mengunduh LoongCollector dan komponen dependennya:

    Wilayah di Tiongkok:

    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

    Wilayah di luar Tiongkok:

    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 =====================
    # Nama proyek yang mengelola log yang dikumpulkan. Contoh: k8s-log-custom-sd89ehdq.
    projectName: ""
    # Wilayah proyek. Contoh untuk Shanghai: cn-shanghai
    region: ""
    # UID akun Alibaba Cloud yang memiliki proyek. Sertakan UID dalam tanda kutip. Contoh: "123456789"
    aliUid: ""
    # Jenis jaringan. Parameter opsional: Internet (jaringan publik) dan Intranet (jaringan internal). Nilai default: Internet.
    net: Internet
    # ID AccessKey dan Rahasia AccessKey akun Alibaba Cloud atau Pengguna RAM. Akun atau pengguna harus memiliki kebijakan sistem 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 komponen dependennya:

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

    Jika Pod gagal dimulai, periksa apakah konfigurasi values.yaml sudah benar dan apakah image terkait berhasil ditarik.
    # Periksa status Pod.
    kubectl get po -n kube-system | grep loongcollector-ds

    SLS juga secara otomatis membuat resource berikut. Masuk ke Konsol Simple Log Service untuk melihatnya.

    Jenis resource

    Nama resource

    Fungsi

    Proyek

    Nilai projectName yang didefinisikan dalam file values.yaml

    Unit manajemen resource yang mengisolasi log untuk layanan berbeda.

    Kelompok mesin

    k8s-group-${cluster_id}

    Kumpulan node pengumpul log.

    Penting

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

Buat logstore

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

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

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

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

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

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

    • Billing Mode:

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

      • pay-by-ingested-data: Ditagih hanya berdasarkan jumlah data mentah yang diingest. Menyediakan periode penyimpanan gratis 30 hari dan fitur gratis seperti transformasi dan pengiriman data. Model biaya sederhana dan cocok untuk kasus penggunaan dengan periode penyimpanan mendekati 30 hari atau pipeline pemrosesan data kompleks.

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

  4. Pertahankan pengaturan default untuk konfigurasi lainnya dan klik OK. Untuk informasi lebih lanjut tentang konfigurasi lainnya, lihat Kelola logstore.

Konfigurasi minimal

Di spec.config, Anda mengonfigurasi plugin input (inputs) dan output (flushers) untuk menentukan jalur inti pengumpulan log: sumber log dan tujuannya.

Output standar kontainer - versi baru

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

inputs plugin

Titik awal konfigurasi pengumpulan. Mendefinisikan sumber log. Saat ini, hanya satu plugin input yang dapat dikonfigurasi.

  • Type String (Wajib)

    Jenis plugin. Tetapkan ke input_container_stdio.

  • IgnoringStderr boolean (Opsional)

    Menentukan apakah aliran error standar (stderr) diabaikan. Nilai default: false.

    • true: Tidak mengumpulkan stderr.

    • false: Mengumpulkan stderr.

  • IgnoringStdout boolean (Opsional)

    Menentukan apakah aliran output standar (stdout) diabaikan. Nilai default: false.

    • true: Tidak mengumpulkan stdout.

    • false: Mengumpulkan stdout.

Contoh

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  # Tetapkan nama resource. Harus unik dalam kluster Kubernetes dan juga menjadi nama 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 LoongCollector (Logtail).
  config:
    # --- Plugin input: Menentukan dari mana log dikumpulkan ---
    inputs:
      # Gunakan plugin input_container_stdio untuk mengumpulkan output standar kontainer.
      - Type: input_container_stdio
        IgnoringStderr: false
        IgnoringStdout: false

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

    # --- Plugin output: Menentukan ke mana log dikirim ---
    flushers: # Jika Anda tidak perlu mengirim ke beberapa target, cukup konfigurasi satu flusher.
    - Type: flusher_sls    # Menentukan penggunaan plugin output SLS.
    Logstore: new-stdio-logstore1
    - Type: flusher_sls    # Menentukan penggunaan plugin output SLS.
    Logstore: new-stdio-logstore2
 

flushers plugin output

Konfigurasikan plugin flusher_sls untuk mengirim log yang dikumpulkan ke logstore tertentu dalam proyek. Saat ini, hingga lima plugin output dapat dikonfigurasi.

  • Type String (Wajib)

    Jenis plugin. Tetapkan ke flusher_sls.

  • Logstore String (Wajib)

    Nama logstore target. Ini menentukan lokasi penyimpanan aktual log.

    Catatan

Kumpulkan file teks kontainer

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

inputs plugin

Titik awal konfigurasi pengumpulan. Mendefinisikan sumber log. Saat ini, hanya satu plugin input yang dapat dikonfigurasi.

  • Type String (Wajib)

    Jenis plugin. Tetapkan ke input_file.

  • FilePaths String (Wajib)

    Daftar jalur ke file log yang ingin dikumpulkan.

    • Saat ini, hanya satu jalur yang dapat dikonfigurasi.

    • Mendukung karakter wildcard:

      • *: Mencocokkan nama file dalam direktori tingkat tunggal.

      • **: Mencocokkan rekursif subdirektori multi-level. Hanya dapat muncul sekali dan harus berada sebelum nama file.

  • MaxDirSearchDepth integer (Opsional)

    Saat jalur berisi **, menentukan kedalaman direktori maksimum. Nilai default: 0. Rentang nilai: 0 hingga 1000.

  • FileEncoding String (Opsional)

    Format encoding file. Nilai default: utf8. Nilai yang didukung:

    • utf8

    • gbk

  • EnableContainerDiscovery boolean (Opsional)

    Menentukan apakah fitur penemuan kontainer diaktifkan. Nilai default: true.

    Catatan

    Parameter ini hanya berlaku saat LoongCollector (Logtail) berjalan dalam mode DaemonSet dan jalur file pengumpulan adalah jalur di dalam kontainer.

Contoh

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

  # Definisikan konfigurasi pengumpulan dan pemrosesan LoongCollector (Logtail).
  config:
    # Contoh log (opsional)
    sample: ''
    # --- Plugin input: Menentukan dari mana log dikumpulkan ---
    inputs:
      # Gunakan plugin input_file untuk mengumpulkan file teks 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 ke mana log dikirim ---
    flushers: # Jika Anda tidak perlu mengirim ke beberapa target, cukup konfigurasi satu flusher.
    - Type: flusher_sls        # Menentukan penggunaan plugin output SLS.
    Logstore: easy-row-logstore1
    - Type: flusher_sls        # Menentukan penggunaan plugin output SLS.
    Logstore: easy-row-logstore2

flushers plugin output

Konfigurasikan plugin flusher_sls untuk mengirim log yang dikumpulkan ke logstore tertentu dalam proyek. Saat ini, hingga lima plugin output dapat dikonfigurasi.

  • Type String (Wajib)

    Jenis plugin. Tetapkan ke flusher_sls.

  • Logstore String (Wajib)

    Nama logstore target. Ini menentukan lokasi penyimpanan aktual log.

    Catatan

Konfigurasi pemrosesan umum

Setelah menyelesaikan konfigurasi minimal, tambahkan plugin pemrosesan untuk melakukan penguraian terstruktur, penyembunyian, atau penyaringan pada log mentah.

Konfigurasi inti: Tambahkan processors ke spec.config untuk mengonfigurasi plugin pemrosesan. Beberapa plugin dapat ditambahkan sekaligus.

Topik ini hanya menjelaskan plugin pemrosesan native yang mencakup kasus penggunaan umum. Untuk informasi lebih lanjut tentang fitur lainnya, lihat Plugin pemrosesan ekstensi.
Penting

Untuk Logtail versi 2.0 dan yang lebih baru serta komponen LoongCollector, kami merekomendasikan aturan kombinasi plugin berikut:

  • Gunakan plugin native terlebih dahulu.

  • Jika plugin native tidak memenuhi kebutuhan Anda, konfigurasikan plugin ekstensi setelah plugin native.

  • Plugin native hanya dapat digunakan sebelum plugin ekstensi.

Konfigurasi terstruktur

Penguraian ekspresi reguler

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

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_parse_regex_native.

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

    # Ekspresi reguler digunakan 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

    # Menentukan apakah field sumber dipertahankan jika penguraian gagal.
    KeepingSourceWhenParseFail: true

    # Menentukan apakah field sumber dipertahankan jika penguraian berhasil.
    KeepingSourceWhenParseSucceed: true

    # Jika field sumber dipertahankan, tentukan nama baru untuknya.
    RenamedSourceKey: fail

SourceKey String (Wajib)

Nama field sumber.

Regex String (Wajib)

Ekspresi reguler untuk mencocokkan log.

Keys String (Wajib)

Daftar field yang diekstraksi.

KeepingSourceWhenParseFail boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian gagal. Nilai default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian berhasil. Nilai default: false.

RenamedSourceKey String (Opsional)

Jika field sumber dipertahankan, ini adalah nama field yang digunakan untuk menyimpan field sumber. Secara default, nama tidak diubah.

Penguraian delimiter

Menstrukturkan konten log menggunakan delimiter, mengurai menjadi beberapa pasangan kunci-nilai. Mendukung delimiter karakter tunggal dan multi-karakter.

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_parse_delimiter_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasi plugin penguraian delimiter
  - Type: processor_parse_delimiter_native
    # Sumber field mentah, biasanya content
    SourceKey: content

    Separator: ','

    Quote: '"'

    # Definisikan nama 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, CSV menggunakan koma (,).

Keys [String] (Wajib)

Daftar field yang diekstraksi.

Quote String (Opsional)

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

AllowingShortenedFields boolean (Opsional)

Menentukan apakah jumlah field yang diekstraksi boleh kurang dari jumlah kunci. Nilai default: true. Jika tidak diizinkan, skenario ini dianggap sebagai kegagalan penguraian.

OverflowedFieldsTreatment String (Opsional)

Menentukan perilaku saat jumlah field yang diekstraksi lebih besar dari jumlah kunci. Nilai default: extend. Nilai yang didukung:

  • extend: Mempertahankan field tambahan. Setiap field tambahan ditambahkan ke log sebagai field terpisah. Nama field untuk field tambahan adalah _column$i_, di mana $i mewakili nomor urut field tambahan, dimulai dari 0.

  • keep: Mempertahankan field tambahan, tetapi menambahkan konten tambahan sebagai satu field ke log. Nama field adalah _column0_.

  • discard: Membuang field tambahan.

KeepingSourceWhenParseFail boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian gagal. Nilai default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian berhasil. Nilai default: false.

RenamedSourceKey String (Opsional)

Jika field sumber dipertahankan, ini adalah nama field yang digunakan untuk menyimpan field sumber. Secara default, nama tidak diubah.

Penguraian JSON standar

Menstrukturkan log JSON bertipe objek, mengurai menjadi pasangan kunci-nilai.

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_parse_json_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasi plugin penguraian JSON
  - Type: processor_parse_json_native
    # Sumber field log mentah
    SourceKey: content

SourceKey String (Wajib)

Nama field sumber.

KeepingSourceWhenParseFail boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian gagal. Nilai default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian berhasil. Nilai default: false.

RenamedSourceKey String (Opsional)

Jika field sumber dipertahankan, ini adalah nama field yang digunakan untuk menyimpan field sumber. Secara default, nama tidak diubah.

Penguraian JSON bersarang

Mengurai log JSON bersarang menjadi pasangan kunci-nilai dengan menentukan kedalaman ekspansi.

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_json.

# ...Di bawah spec.config...
processors:
  # Konfigurasikan plugin ekspansi field JSON.
  - Type: processor_json
    # Tentukan nama field mentah yang akan diurai.
    SourceKey: content
    
    ExpandDepth: 0

    ExpandConnector: '_'

    Prefix: expand

    IgnoreFirstConnector: false

    # Menentukan apakah elemen array diperluas menjadi field terpisah.
    ExpandArray: false

    # Menentukan apakah konten field mentah dipertahankan.
    KeepSource: true

    # Menentukan apakah sistem melaporkan error jika field mentah tidak ditemukan.
    NoKeyError: true

    # Menentukan apakah nama field mentah digunakan sebagai awalan untuk nama field yang diperluas.
    UseSourceKeyAsPrefix: false

    # Menentukan apakah data log mentah dipertahankan jika penguraian JSON gagal.
    KeepSourceIfParseError: true

SourceKey String (Wajib)

Nama field sumber.

ExpandDepth integer (Opsional)

Kedalaman ekspansi JSON. Nilai default: 0.

  • 0: Memperluas hingga level terdalam yang dapat diurai.

  • 1: Hanya memperluas level saat ini, dan seterusnya.

ExpandConnector String (Opsional)

Konektor untuk nama field selama ekspansi JSON. Nilai default: underscore (_).

Prefix String (Opsional)

Menentukan awalan untuk nama field JSON yang diperluas.

IgnoreFirstConnector String (Opsional)

Menentukan apakah konektor pertama diabaikan, artinya apakah konektor ditambahkan sebelum field level atas. Nilai default: false.

ExpandArray boolean (Opsional)

Menentukan apakah tipe array diperluas. Nilai default: false.

  • false (default): Tidak memperluas.

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

Catatan

Parameter ini didukung di Logtail versi 1.8.0 dan yang lebih baru.

KeepSource boolean (Opsional)

Menentukan apakah field mentah dipertahankan dalam log yang diurai. Nilai default: true.

  • true: Pertahankan

  • false: Buang

NoKeyError boolean (Opsional)

Menentukan apakah sistem melaporkan error jika field mentah yang ditentukan tidak ditemukan dalam log mentah. Nilai default: true.

  • true: Laporkan error.

  • false: Jangan laporkan error.

UseSourceKeyAsPrefix boolean (Opsional)

Menentukan apakah nama field mentah digunakan sebagai awalan untuk semua nama field JSON yang diperluas.

KeepSourceIfParseError boolean (Opsional)

Menentukan apakah log mentah dipertahankan jika penguraian gagal. Nilai default: true.

  • true: Pertahankan

  • false: Buang

Penguraian array JSON

Menggunakan fungsi json_extract untuk mengekstraksi objek JSON dari array JSON. Untuk informasi lebih lanjut tentang fungsi JSON, lihat Fungsi JSON.

Bidang kunci

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 skrip (satuan: milidetik)
    TimeoutMilliSeconds: 1000

    # Konten 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)

Konten skrip SPL, digunakan untuk mengekstraksi elemen dari array JSON di field content.

TimeoutMilliSeconds integer (Opsional)

Periode batas waktu skrip. Rentang nilai: 0 hingga 10000. Satuan: milidetik. Nilai default: 1000.

Penguraian log NGINX

Menstrukturkan konten log berdasarkan definisi dalam log_format, mengurai menjadi beberapa pasangan kunci-nilai. Jika konten default tidak memenuhi kebutuhan Anda, gunakan format kustom.

Bidang kunci

Contoh

Type String (Wajib)

Jenis plugin. Jenis plugin untuk penguraian log Nginx adalah processor_parse_regex_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasi plugin penguraian log NGINX
  - Type: processor_parse_regex_native
    # Sumber field 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*"([^"]*)".*
    
    # Pemetaan 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 integer (Wajib)

Ekspresi reguler.

Keys String (Wajib)

Daftar field yang diekstraksi.

Extra

  • Format String (Wajib)

    Bagian konfigurasi log dalam file konfigurasi Nginx, dimulai dengan log_format.

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

    Jenis log yang akan diurai. Tetapkan ke NGINX.

KeepingSourceWhenParseFail boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian gagal. Nilai default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian berhasil. Nilai default: false.

RenamedSourceKey String (Opsional)

Jika field sumber dipertahankan, ini adalah nama field yang digunakan untuk menyimpan field sumber. Secara default, nama tidak diubah.

Penguraian log Apache

Menstrukturkan konten log berdasarkan definisi dalam file konfigurasi log Apache, mengurai menjadi beberapa pasangan kunci-nilai.

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_parse_regex_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasikan plugin penguraian log Apache Combined (berdasarkan ekspresi reguler).
  - Type: processor_parse_regex_native
    # Sumber field log mentah, biasanya content
    SourceKey: content

    # Ekspresi reguler digunakan untuk mencocokkan dan mengekstraksi log format gabungan Apache.
    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 (penangkapan berulang? 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, untuk menjelaskan 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 integer (Wajib)

Ekspresi reguler.

Keys String (Wajib)

Daftar field yang diekstraksi.

Extra

  • Format String (Wajib)

    Bagian konfigurasi log dalam file konfigurasi Apache, biasanya dimulai dengan LogFormat.

  • LogType String (Wajib)

    Jenis log yang akan diurai. Tetapkan ke Apache.

  • SubType String (Wajib)

    Format log.

    • common

    • combined

    • custom

KeepingSourceWhenParseFail boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian gagal. Nilai default: false.

KeepingSourceWhenParseSucceed boolean (Opsional)

Menentukan apakah field sumber dipertahankan jika penguraian berhasil. Nilai default: false.

RenamedSourceKey String (Opsional)

Jika field sumber dipertahankan, ini adalah nama field yang digunakan untuk menyimpan field sumber. Secara default, nama tidak diubah.

Penyembunyian data

Gunakan plugin processor_desensitize_native untuk menyembunyikan data sensitif dalam log.

Bidang Utama

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_desensitize_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasikan plugin penyembunyian log native.
  - Type: processor_desensitize_native

    # Nama field mentah
    SourceKey: content

    # Metode penyembunyian: const berarti mengganti konten sensitif dengan string tetap.
    Method: const

    # String target untuk mengganti konten sensitif.
    ReplacingString: '********'

    # Ekspresi untuk konten sebelum string yang diganti.
    ContentPatternBeforeReplacedString: 'password'':'''

    # Ekspresi reguler untuk konten sensitif itu sendiri, mencocokkan konten yang akan diganti.
    ReplacedContentPattern: '[^'']*'

    # Menentukan apakah semua item yang cocok diganti. Nilai default: true.
    ReplacingAll: true

SourceKey String (Wajib)

Nama field sumber.

Method String (Wajib)

Metode penyembunyian. Nilai yang didukung:

  • const: Mengganti konten sensitif dengan konstanta.

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

ReplacingString String (Opsional)

String konstan yang digunakan untuk mengganti konten sensitif. Ini diperlukan saat Method diatur ke const.

ContentPatternBeforeReplacedString String (Wajib)

Ekspresi reguler untuk awalan konten sensitif.

ReplacedContentPattern String (Wajib)

Ekspresi reguler untuk konten sensitif.

ReplacingAll boolean (Opsional)

Menentukan apakah field asli dipertahankan setelah penguraian berhasil. Nilai default adalah true.

Penyaringan konten

Konfigurasikan plugin processor_filter_regex_native untuk mencocokkan nilai field log berdasarkan ekspresi reguler dan hanya menyimpan log yang memenuhi kondisi.

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_filter_regex_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasikan plugin penyaringan ekspresi reguler (dapat digunakan untuk penyembunyian log atau penyaringan kata sensitif).
  - Type: processor_filter_regex_native

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

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

FilterRegex String (Wajib)

Ekspresi reguler untuk mencocokkan field log.

FilterKey String (Wajib)

Nama field log yang akan dicocokkan.

Penguraian waktu

Konfigurasikan plugin processor_parse_timestamp_native untuk mengurai field waktu dalam log dan menetapkan hasil penguraian sebagai field __time__ log.

Field kunci

Contoh

Type String (Wajib)

Jenis plugin. Tetapkan ke processor_parse_timestamp_native.

# ...Di bawah spec.config...
processors:
  # Konfigurasikan plugin penguraian waktu native.
  - Type: processor_parse_timestamp_native
    # Sumber field log mentah, biasanya content
    SourceKey: content

    # Definisi format waktu, harus persis sesuai dengan format field waktu dalam log.
    SourceFormat: '%Y-%m-%d %H:%M:%S'
    
    SourceTimezone: 'GMT+00:00'

SourceKey String (Wajib)

Nama field sumber.

SourceFormat String (Wajib)

Format waktu. Harus persis sesuai dengan format field waktu dalam log.

SourceTimezone String (Opsional)

Zona waktu log waktu. Secara default, menggunakan zona waktu mesin, yaitu zona waktu lingkungan tempat proses LoongCollector berjalan.

Format:

  • GMT+HH:MM: Zona waktu timur

  • GMT-HH:MM: Zona waktu barat

Konfigurasi lanjutan lainnya

Untuk kasus penggunaan lanjutan, pertimbangkan konfigurasi berikut:

  • Konfigurasikan pengumpulan log multi-baris: Saat satu entri log, seperti jejak stack exception, mencakup beberapa baris, Anda perlu mengaktifkan mode multi-baris dan mengonfigurasi ekspresi reguler untuk awal baris guna mencocokkan awal log. Hal ini memastikan entri multi-baris dikumpulkan dan disimpan sebagai satu log di logstore SLS.

  • Konfigurasikan jenis topik log: Tetapkan topik berbeda untuk aliran log berbeda guna mengorganisasi dan mengkategorikan data log. Hal ini membantu Anda mengelola dan mengambil log yang relevan dengan lebih baik.

  • Tentukan kontainer untuk pengumpulan (penyaringan dan daftar hitam): Tentukan kontainer dan jalur tertentu untuk pengumpulan, termasuk konfigurasi daftar putih dan daftar hitam.

  • Perkaya tag log: Tambahkan metadata terkait variabel lingkungan dan label pod ke log sebagai field tambahan.

Konfigurasikan pengumpulan log multi-baris

Untuk mengurai dengan benar entri log yang mencakup beberapa baris (seperti jejak stack Java), aktifkan mode multi-baris. Hal ini memastikan baris terkait dikelompokkan menjadi satu entri log berdasarkan pola awal yang ditentukan.

Konfigurasi inti: Di konfigurasi spec.config.inputs, tambahkan parameter Multiline.

Field kunci

Contoh

Multiline

Mengaktifkan pengumpulan log multi-baris.

  • Mode

    Pemilihan mode. Nilai default: custom.

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

    • JSON: JSON multi-baris.

  • StartPattern

    Ekspresi reguler untuk awal baris. Ini diperlukan 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 (penanda untuk log baru).
      StartPattern: '\d+-\d+-\d+\s\d+:\d+:\d+'

Konfigurasikan jenis topik log

Konfigurasi inti: Di spec.config, tambahkan parameter global untuk menetapkan topik.

Bidang Utama

Contoh

TopicType

Jenis topik. Nilai opsional:

  • machine_group_topic: Topik kelompok mesin, digunakan untuk membedakan log dari kelompok mesin berbeda.

  • filepath: Ekstraksi jalur file, digunakan untuk membedakan data log yang dihasilkan oleh pengguna atau aplikasi berbeda.

  • custom: Kustom, menggunakan topik log statis kustom.

Topik kelompok mesin

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

Ekstraksi jalur file

spec:  
  config:
    global: 
      TopicType: filepath
    # Format topik. Diperlukan saat TopicType diatur ke 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. Diperlukan saat TopicType diatur ke filepath atau custom.
      TopicFormat: customized:// + nama topik kustom

TopicFormat

Format topik. Ini diperlukan saat TopicType diatur ke filepath atau custom.

Tentukan kontainer untuk pengumpulan (penyaringan dan daftar hitam)

Penyaringan

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

Konfigurasi inti: Di spec.config.inputs, konfigurasikan parameter ContainerFilters untuk penyaringan kontainer.

Field kunci

Contoh

ContainerFilters

Penyaringan kontainer

  • Daftar Hitam/Putih Label Pod K8s

    • IncludeK8sLabel

      Daftar putih label pod K8s: Menentukan kontainer dari mana log dikumpulkan.

    • ExcludeK8sLabel

      Daftar hitam label pod K8s: Mengecualikan pengumpulan log dari kontainer yang memenuhi kondisi tertentu.

  • Daftar hitam dan putih variabel lingkungan

    • IncludeEnv

      Daftar putih variabel lingkungan

    • ExcludeInv

      Daftar hitam variabel lingkungan

  • Pencocokan regex nama Pod/Namespace/Kontainer

    • K8sNamespaceRegex

      Pencocokan regex namespace

    • K8sPodRegex

      Pencocokan regex nama pod

    • K8sContainerRegex

      Pencocokan regex nama kontainer

Semua ekspresi reguler didasarkan pada mesin regex RE2 di Go, yang memiliki beberapa keterbatasan dibandingkan mesin seperti PCRE. Lihat Lampiran: Batasan ekspresi reguler untuk penyaringan kontainer untuk menulis ekspresi reguler.
# ...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: Mengecualikan 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:
        # Mengecualikan semua kontainer dengan ENVIRONMENT=test.
        ENVIRONMENT: test
      
      # Pencocokan regex namespace. Contoh: Cocokkan semua kontainer di namespace default dan nginx.
      K8sNamespaceRegex: ^(default|nginx)$
      # Pencocokan regex nama pod. Contoh: Cocokkan kontainer di semua pod yang namanya dimulai dengan nginx-log-demo.
      K8sPodRegex: ^(nginx-log-demo.*)$
      # Pencocokan regex nama kontainer. Contoh: Cocokkan semua kontainer bernama container-test.
      K8sContainerRegex: ^(container-test)$

Daftar hitam

Untuk mengecualikan file yang memenuhi kondisi tertentu, gunakan parameter berikut di bawah config.inputs dalam file YAML sesuai kebutuhan:

Detail field kunci

Contoh

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

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

    # Daftar hitam direktori. Mengecualikan file yang memenuhi kondisi tertentu. Jalur harus berupa jalur mutlak dan mendukung karakter wildcard *.
    ExcludeDirs:
      - /var/log/backup*               

ExcludeFilePaths

Daftar hitam jalur file. Mengecualikan file yang memenuhi kondisi tertentu. Jalur harus berupa jalur mutlak dan mendukung karakter wildcard *.

ExcludeFiles

Daftar hitam nama file. Mengecualikan file yang memenuhi kondisi tertentu. Mendukung karakter wildcard *.

ExcludeDirs

Daftar hitam direktori. Mengecualikan file yang memenuhi kondisi tertentu. Jalur harus berupa jalur mutlak dan mendukung karakter wildcard *.

Perkaya tag log

Konfigurasi inti: Dengan mengonfigurasi ExternalEnvTag dan ExternalK8sLabelTag di spec.config.inputs, tambahkan tag terkait variabel lingkungan kontainer dan label Pod ke log.

Field kunci

Contoh

ExternalEnvTag

Memetakan nilai variabel lingkungan tertentu ke field tag. Format: <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 field tag. Format: <nama_label_pod>: <nama_tag>.

Contoh konfigurasi

Kumpulkan dan uraikan log akses NGINX menjadi field terstruktur

Mengurai log NGINX dan menstrukturkan konten log menjadi beberapa pasangan kunci-nilai berdasarkan definisi dalam 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
    

Kumpulkan dan proses log multi-baris

Aktifkan mode multi-baris untuk memastikan baris terkait dikelompokkan menjadi satu entri log berdasarkan pola awal yang ditentukan. Berikut adalah contohnya:

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

Bagaimana cara mengelola konfigurasi distribusi multi-target?

Konfigurasi distribusi multi-target dikaitkan dengan beberapa logstore. Kelola konfigurasi ini dari halaman manajemen tingkat proyek:

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

  2. Di halaman proyek, pilih image Resources > Configurations dari panel navigasi sebelah kiri.

    Catatan

    Halaman ini menyediakan manajemen terpusat untuk semua konfigurasi pengumpulan dalam proyek, termasuk konfigurasi yang tetap ada setelah logstore terkaitnya dihapus secara tidak sengaja.

Bagaimana cara mengirim log dari kluster ACK ke proyek di akun Alibaba Cloud lain?

Instal LoongCollector (Logtail) secara manual di kluster ACK dan konfigurasikan dengan ID akun Alibaba Cloud target atau AccessKey. Hal ini memungkinkan pengiriman log kontainer ke proyek SLS di akun Alibaba Cloud lain.

Kasus penggunaan: Kumpulkan data log dari kluster ACK ke proyek SLS di akun Alibaba Cloud berbeda karena alasan seperti struktur organisasi, isolasi izin, atau pemantauan terpadu. Instal LoongCollector (Logtail) secara manual untuk konfigurasi lintas akun.

Prosedur: Prosedur berikut menggunakan instalasi manual LoongCollector sebagai contoh. Untuk informasi tentang cara menginstal Logtail, lihat Instal dan konfigurasi Logtail.

  1. Hubungkan ke kluster Kubernetes dan jalankan perintah yang sesuai untuk wilayah Anda guna mengunduh LoongCollector dan komponen dependennya:

    Wilayah di Tiongkok:

    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

    Wilayah di luar Tiongkok:

    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 =====================
    # Nama proyek yang mengelola log yang dikumpulkan. Contoh: k8s-log-custom-sd89ehdq.
    projectName: ""
    # Wilayah proyek. Contoh untuk Shanghai: cn-shanghai
    region: ""
    # UID akun Alibaba Cloud yang memiliki proyek. Sertakan UID dalam tanda kutip. Contoh: "123456789"
    aliUid: ""
    # Jenis jaringan. Parameter opsional: Internet (jaringan publik) dan Intranet (jaringan internal). Nilai default: Internet.
    net: Internet
    # ID AccessKey dan Rahasia AccessKey akun Alibaba Cloud atau Pengguna RAM. Akun atau pengguna harus memiliki kebijakan sistem 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 komponen dependennya:

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

    Jika Pod gagal dimulai, periksa apakah konfigurasi values.yaml sudah benar dan apakah image terkait berhasil ditarik.
    # Periksa status Pod.
    kubectl get po -n kube-system | grep loongcollector-ds

    SLS juga secara otomatis membuat resource berikut. Masuk ke Konsol Simple Log Service untuk melihatnya.

    Jenis resource

    Nama resource

    Fungsi

    Proyek

    Nilai projectName yang didefinisikan dalam file values.yaml

    Unit manajemen resource yang mengisolasi log untuk layanan berbeda.

    Kelompok mesin

    k8s-group-${cluster_id}

    Kumpulan node pengumpul log.

    Penting

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

Bagaimana log file atau output standar kontainer yang sama dapat dikumpulkan oleh beberapa konfigurasi pengumpulan secara bersamaan?

Secara default, setiap sumber log hanya dikumpulkan sekali untuk mencegah duplikasi data. Untuk mengizinkan beberapa konfigurasi mengumpulkan dari sumber yang sama, aktifkan opsi yang sesuai di pengaturan konfigurasi Logtail:

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

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

  3. Klik ikon image di depan namanya untuk memperluas logstore.

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

  5. Di halaman Logtail Configurations, klik Edit dan gulir ke bawah 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 ekspresi reguler untuk penyaringan kontainer

Ekspresi reguler untuk penyaringan kontainer didasarkan pada mesin RE2 Go. Mesin ini memiliki beberapa keterbatasan sintaks dibandingkan mesin lain, seperti PCRE. Perhatikan keterbatasan berikut saat menulis ekspresi reguler:

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

Fitur ekspresi reguler umum namun kompleks berikut tidak tersedia di RE2:

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

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

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

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

  • Grup atomik: (?>...)

3. Rekomendasi

Saat men-debug ekspresi reguler dengan alat seperti Regex101, pilih mode Golang (RE2) untuk memastikan kompatibilitas. Jika Anda menggunakan sintaks yang tidak didukung, plugin tidak dapat mengurai atau mencocokkan ekspresi dengan benar.