全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan CRD Layanan Log Sederhana untuk mengumpulkan log aplikasi

更新时间:Jul 06, 2025

Topik ini menjelaskan cara mengonfigurasi CustomResourceDefinition (CRD) Layanan Log Sederhana di cluster ACK Serverless dan menggunakannya untuk mengumpulkan serta mengelola log aplikasi.

Prasyarat

  • Sebuah cluster ACK Serverless telah dibuat. Untuk informasi lebih lanjut, lihat Buat Cluster ACK Serverless.

  • ack-virtual-node versi 2.7.0 atau yang lebih baru telah diinstal di cluster. Untuk informasi lebih lanjut tentang ack-virtual-node, lihat ack-virtual-node.

Catatan Penggunaan

Fitur pengumpulan log yang diaktifkan menggunakan CRD Layanan Log Sederhana hanya berlaku untuk pod Elastic Container Instance yang dibuat setelah CRD dibuat. Jika Anda ingin mengumpulkan log dari pod yang sudah ada, lakukan rilis bergulir untuk pod tersebut.

Konfigurasikan pengumpulan log

Setelah menerapkan komponen alibaba-log-controller di cluster, Anda dapat menggunakan CRD AliyunLogConfig (CRD untuk konfigurasi pengumpulan log) untuk mengonfigurasi pengumpulan log.

Terapkan komponen alibaba-log-controller di cluster.

  1. Masuk ke Konsol ACK.

  2. Di bilah navigasi atas, pilih wilayah.

  3. Di halaman Clusters, klik nama cluster ACK Serverless yang log kontainernya ingin Anda kumpulkan untuk masuk ke halaman manajemen cluster.

  4. Terapkan komponen alibaba-log-controller di cluster.

    1. Di panel navigasi kiri halaman detail, pilih Operations > Add-ons.

    2. Klik tab Logs and Monitoring, temukan kartu komponen Alibaba-log-controller, lalu klik Install.

    3. Di pesan yang muncul, klik OK.

      Setelah alibaba-log-controller diinstal, status "Terpasang" akan ditampilkan di pojok kanan atas kartu alibaba-log-controller.

Buat CRD AliyunLogConfig

  1. Sambungkan ke cluster ACK Serverless.

  2. Buat file konfigurasi YAML CRD AliyunLogConfig.

    Penting

    Setelah membuat CRD AliyunLogConfig, Anda dapat melihat Logstore dan konfigurasi Logtail yang dihasilkan di konsol Layanan Log Sederhana. Jika Anda memodifikasi konfigurasi di konsol Layanan Log Sederhana, modifikasi tersebut tidak disinkronkan ke CRD. Untuk memperbarui konfigurasi Logtail, modifikasi sumber daya CRD AliyunLogConfig. Hindari melakukan operasi di konsol Layanan Log Sederhana untuk mencegah ketidaksesuaian konfigurasi.

    Template YAML CRD AliyunLogConfig

    apiVersion: log.alibabacloud.com/v1alpha1     
    kind: AliyunLogConfig                         
    metadata:
      name: simple-stdout-example                 
    spec:
      project: k8s-my-project                      
      logstore: k8s-stdout                         
      logstoreMode: standard                       
      shardCount: 2                               
      lifeCycle: 90                               
      logtailConfig:                            
        inputType: plugin                          
        configName: simple-stdout-example          
        inputDetail:                               
          ...
    • Parameter Dasar

      Parameter

      Tipe

      Diperlukan

      Deskripsi

      project

      string

      Tidak

      Nama proyek. Nilai default adalah nama proyek yang Anda gunakan untuk menginstal komponen Logtail.

      Jika Anda ingin membuat proyek, tentukan nama untuk proyek. Jika proyek tidak ada, sistem secara otomatis membuat proyek.

      logstore

      string

      Ya

      Nama penyimpanan log. Jika penyimpanan log yang ditentukan tidak ada, sistem secara otomatis membuat penyimpanan log.

      logstoreMode

      string

      Tidak

      Tipe penyimpanan log. Parameter ini hanya berlaku saat Anda membuat penyimpanan log. Nilai valid:

      • query: Penyimpanan log untuk query

      • standard: Penyimpanan log standar

      Untuk informasi lebih lanjut, lihat Kelola Penyimpanan Log.

      shardCount

      int

      Tidak

      Jumlah shard. Nilai valid: 1 hingga 10. Nilai default: 2.

      lifeCycle

      int

      Tidak

      Periode retensi data di penyimpanan log. Nilai valid: 1 hingga 3650. Nilai default: 90. Unit: hari. Nilai 3650 menunjukkan bahwa data disimpan secara permanen di penyimpanan log. Parameter ini hanya berlaku saat Anda membuat penyimpanan log.

      machineGroups

      array

      Tidak

      Grup mesin. Saat Anda menginstal komponen Logtail, Layanan Log Sederhana secara otomatis membuat grup mesin bernama k8s-group-${your_k8s_cluster_id}.

      logtailConfig

      object

      Ya

      Konfigurasi Logtail. Konfigurasi mencakup parameter berikut:

      • configName: nama konfigurasi Logtail. Nama harus sama dengan nama yang ditentukan di metadata.name.

      • inputType: tipe input log. Nilai valid:

        • plugin: menggunakan Plugin Logtail untuk mengumpulkan log seperti log biner MySQL.

        • file: mengumpulkan log teks dalam mode tetap, seperti mode ekspresi reguler dan mode pemisah.

      • inputDetail: konfigurasi untuk input log.

      • outputType: tipe output log. Setel nilai ke Layanan Log. Log hanya dapat diunggah ke Layanan Log Sederhana.

      • outputDetail: konfigurasi untuk output log.

      • logSample: contoh log.

      Untuk informasi lebih lanjut tentang pengaturan parameter, lihat Konfigurasi Logtail.

    • Penyaringan Kontainer

      • Jika Anda menggunakan Logtail sebelum versi 1.0.34, Anda hanya dapat menyaring kontainer menggunakan variabel lingkungan dan label kontainer.

        Namespace cluster Kubernetes dan nama kontainer di cluster Kubernetes dapat dipetakan ke label kontainer. Nilai parameter Label Name untuk namespace adalah io.kubernetes.pod.namespace. Nilai parameter Label Name untuk nama kontainer adalah io.kubernetes.container.name. Kami merekomendasikan menggunakan dua label kontainer ini untuk menyaring kontainer. Jika label kontainer tidak memenuhi persyaratan bisnis Anda, gunakan daftar putih atau daftar hitam variabel lingkungan untuk menyaring kontainer.

      • Jika Anda menggunakan Logtail versi 1.0.34 atau yang lebih baru, Anda dapat menyaring kontainer berdasarkan informasi tingkat Kubernetes, seperti nama pod, namespace, nama kontainer, dan label kontainer.

        Parameter penyaringan kontainer harus dikonfigurasi di bidang logtailConfig.inputDetail.advanced.k8s. Parameter yang didukung:

        • IncludeK8sLabel: daftar putih label Kubernetes yang menentukan kontainer dari mana Anda ingin mengumpulkan data.

        • ExcludeK8sLabel: daftar hitam label Kubernetes yang menentukan kontainer dari mana Anda tidak mengumpulkan data.

        • K8sNamespaceRegex: namespace.

        • K8sPodRegex: nama pod.

        • K8sContainerRegex: nama kontainer.

    Untuk informasi lebih lanjut, lihat Kumpulkan Log Teks dari Kontainer Kubernetes dalam Mode DaemonSet dan Kumpulkan stdout dan stderr dari Kontainer Kubernetes dalam Mode DaemonSet (Versi Lama).

    File Konfigurasi YAML Sampel untuk CRD AliyunLogConfig

    File konfigurasi YAML sampel untuk CRD yang digunakan untuk mengumpulkan log teks

    Buat file bernama log-file.yaml dan salin template berikut ke dalam file.

    apiVersion: log.alibabacloud.com/v1alpha1  # Gunakan nilai default. Anda tidak perlu memodifikasi parameter ini. 
    kind: AliyunLogConfig                      # Gunakan nilai default. Anda tidak perlu memodifikasi parameter ini. 
    metadata:
      name: test-file                  # Nama sumber daya, yang unik di cluster Kubernetes saat ini. 
    spec:
      project: k8s-log-c326bc86****    # Opsional. Nama proyek. Jika proyek tidak ada, sistem secara otomatis membuat proyek.
      logstore: test-file              # Diperlukan. Nama penyimpanan log. Jika penyimpanan log tidak ada, sistem secara otomatis membuat penyimpanan log.   
      logtailConfig:                   # Konfigurasi Logtail.
        inputType: file                # Tipe sumber data. Nilai file menentukan log teks, dan nilai plugin menentukan log stdout.
        configName: test-file          # Nama konfigurasi Logtail. Nama harus sama dengan nama sumber daya yang ditentukan di metadata.name. 
        inputDetail:                   # Detail konfigurasi Logtail.
          logType: common_reg_log      # Kumpulkan log teks dalam mode sederhana.
          logPath: /log/               # Jalur file log.
          filePattern: "*.log"         # Nama file log. Nama dapat berisi asterisk (*) dan tanda tanya (?). Contoh: log_*.log. 
          dockerFile: true             # Tentukan apakah akan mengumpulkan log dari kontainer docker.
          advanced:                    # Konfigurasikan kondisi filter untuk kontainer.
            k8s:
              K8sNamespaceRegex: ^(default)$
              K8sPodRegex: '^(eci-sls-demo.*)$'

    File konfigurasi YAML sampel untuk CRD yang digunakan untuk mengumpulkan log stdout

    Buat file bernama log-stdout.yaml dan salin template berikut ke dalam file.

    apiVersion: log.alibabacloud.com/v1alpha1   # Gunakan nilai default. Anda tidak perlu memodifikasi parameter ini. 
    kind: AliyunLogConfig                       # Gunakan nilai default. Anda tidak perlu memodifikasi parameter ini. 
    metadata:
      name: test-stdout               # Nama sumber daya. Nama harus unik di cluster Kubernetes saat ini. 
    spec:
      project: k8s-log-c326bc86****   # Opsional. Nama proyek. Jika proyek tidak ada, sistem secara otomatis membuat proyek.
      logstore: test-stdout           # Diperlukan. Nama penyimpanan log. Jika penyimpanan log tidak ada, sistem secara otomatis membuat penyimpanan log.                  
      shardCount: 2                   # Opsional. Jumlah shard. Nilai default: 2. Nilai valid: 1, 2, 3, 4, 5, 6, 7, 8, 9, dan 10.                         
      lifeCycle: 90                   # Opsional. Periode retensi log di penyimpanan log. Parameter ini hanya berlaku saat Anda membuat penyimpanan log. Nilai valid: 1 hingga 3650. Nilai default: 90. Unit: hari. Nilai 3650 menunjukkan bahwa log disimpan secara permanen.
      logtailConfig:                  # Konfigurasi Logtail.
        inputType: plugin             # Tipe sumber data. Nilai file menentukan log teks. Nilai plugin menentukan log stdout.                                
        configName: test-stdout       # Nama konfigurasi Logtail. Nama harus sama dengan nama sumber daya yang ditentukan di metadata.name. 
        inputDetail:                  # Detail konfigurasi Logtail.
          plugin:
            inputs:
              - type: service_docker_stdout
                detail:
                  Stdout: true
                  Stderr: true
    #              IncludeEnv:
    #                aliyun_logs_test-stdout: "stdout"
  3. Buat CRD AliyunLogConfig.

    Kode berikut memberikan contoh perintah. Setelah konfigurasi Logtail diterapkan, Logtail mengumpulkan log stdout atau teks dari setiap kontainer, lalu mengirimkan log yang dikumpulkan ke Layanan Log Sederhana.

    kubectl apply -f log-file.yaml
    kubectl apply -f log-stdout.yaml
    Penting

    Setelah log dikumpulkan, Anda harus membuat indeks. Lalu, Anda dapat menanyakan dan menganalisis log di penyimpanan log. Untuk informasi lebih lanjut, lihat Buat Indeks.

Uji pengumpulan log

Setelah membuat CRD AliyunLogConfig, Layanan Log Sederhana secara otomatis mengumpulkan log pod yang dibuat kemudian. Anda dapat membuat aplikasi berikut untuk menguji efek pengumpulan log.

  1. Buat aplikasi.

    File YAML sampel berikut menjelaskan cara membuat Deployment. Dalam contoh ini, perintah relevan dijalankan untuk terus menampilkan stdout dan file log setelah kontainer dimulai.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: eci-sls-demo
      labels:
        app: sls
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sls
      template:
        metadata:
          name: sls-test
          labels:
            app: sls
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - args:
            - -c
            - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done
            command:
            - /bin/sh
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30
            imagePullPolicy: Always
            name: busybox

    Buat file bernama test-sls-crd.yaml dan salin template file YAML sebelumnya ke dalam file. Jalankan perintah berikut untuk membuat aplikasi:

    kubectl create -f test-sls-crd.yaml
  2. Periksa status aplikasi.

    kubetcl get pod

    Keluaran yang diharapkan:

    NAME                            READY   STATUS    RESTARTS   AGE
    eci-sls-demo-7bf8849b9f-cgpbn   1/1     Running   0          2m14s
  3. Lihat log.

    1. Masuk ke Konsol Layanan Log Sederhana.

    2. Klik nama proyek.

    3. Temukan penyimpanan log tempat log kontainer Anda disimpan. Klik nama penyimpanan log untuk melihat log.

      Pengumpulan log teks

      日志crd1

      Pengumpulan log stdout

      日志crd0

Nonaktifkan pengumpulan log

Setelah membuat CRD AliyunLogConfig, sistem secara otomatis mengumpulkan log semua pod yang memenuhi syarat. Jika Anda tidak ingin mengumpulkan log pod tertentu, tambahkan anotasi k8s.aliyun.com/eci-sls-enable: "false" ke bagian metadata pod untuk menonaktifkan pengumpulan log. Ini mencegah pemborosan sumber daya yang disebabkan oleh pembuatan otomatis konfigurasi Logtail.

Penting
  • Anotasi harus ditambahkan ke metadata di file konfigurasi pod. Misalnya, saat membuat Deployment, tambahkan anotasi di bagian spec.template.metadata.

  • Untuk menggunakan fitur Elastic Container Instance, Anda hanya dapat menambahkan anotasi saat membuat pod berbasis Elastic Container Instance. Jika Anda menambahkan atau memodifikasi anotasi saat memperbarui pod, anotasi tersebut tidak akan berlaku.

Contoh konfigurasi:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-sls-demo2
  labels:
    app: sls
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sls
  template:
    metadata:
      name: sls-test
      labels:
        app: sls
        alibabacloud.com/eci: "true"
      annotations:
        k8s.aliyun.com/eci-sls-enable: "false"    # Menonaktifkan pengumpulan log.
    spec:
      containers:
      - args:
        - -c
        - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
          done
        command:
        - /bin/sh
        image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
        imagePullPolicy: Always
        name: busybox