Topik ini menjelaskan cara menggunakan CustomResourceDefinition (CRD) Simple Log Service untuk mengonfigurasi Simple Log Service agar secara otomatis mengumpulkan log kontainer dari pod berbasis Elastic Container Instance dalam ACK One registered cluster.
Informasi latar belakang
Simple Log Service adalah layanan pencatatan data ujung ke ujung. Anda dapat menggunakan Simple Log Service untuk mengumpulkan, mengonsumsi, mengirimkan, menanyakan, dan menganalisis data log tanpa perlu melakukan pengembangan lebih lanjut. Untuk informasi lebih lanjut, lihat Apa itu Simple Log Service?.
Prasyarat
Simple Log Service harus diaktifkan untuk kluster ACK Serverless. Masuk ke Konsol Simple Log Service. Jika Simple Log Service belum diaktifkan untuk kluster tersebut, Anda akan diminta untuk mengikuti petunjuk di layar guna mengaktifkan layanan.
Catatan penggunaan
Fitur pengumpulan log yang diaktifkan menggunakan Simple Log Service CRD hanya berlaku untuk pod Elastic Container Instance yang dibuat setelah CRD dibuat. Jika Anda ingin mengumpulkan log dari pod yang sudah ada, Anda harus melakukan rilis bergulir untuk pod tersebut.
Konfigurasikan pengumpulan log
Setelah Anda menerapkan komponen logtail-ds di kluster, Anda dapat menggunakan CRD AliyunLogConfig untuk mengonfigurasi pengumpulan log.
Terapkan logtail-ds
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih .
Klik tab Logs and Monitoring, temukan kartu logtail-ds, lalu klik Install.
Di pesan yang muncul, klik OK.
Buat konfigurasi Logtail
Buat file konfigurasi YAML dari CRD AliyunLogConfig.
Penting Setelah Anda membuat CRD AliyunLogConfig, Anda dapat melihat Logstore dan konfigurasi Logtail yang dihasilkan di Konsol Simple Log Service. Jika Anda menggunakan CRD untuk membuat konfigurasi Logtail dan memodifikasi konfigurasi di Konsol Simple Log Service, modifikasi tersebut tidak disinkronkan ke CRD. Jika Anda ingin memperbarui konfigurasi Logtail, ubah sumber daya CRD AliyunLogConfig. Hindari operasi di Konsol Simple Log Service 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 defaultnya adalah nama proyek yang Anda gunakan untuk menginstal komponen Logtail. Jika Anda ingin membuat proyek, tentukan nama untuk proyek tersebut. Jika proyek tidak ada, sistem akan otomatis membuat proyek tersebut. |
logstore | string | Ya | Nama Logstore. Jika Logstore yang ditentukan tidak ada, sistem akan otomatis membuat Logstore. |
logstoreMode | string | Tidak | Tipe Logstore. Parameter ini hanya berlaku saat Anda membuat Logstore. Nilai valid: Untuk informasi lebih lanjut, lihat Kelola Logstore. |
shardCount | int | Tidak | Jumlah shard. Nilai valid: 1 hingga 10. Nilai default: 2. |
lifeCycle | int | Tidak | Periode penyimpanan data di Logstore. Nilai valid: 1 hingga 3650. Nilai default: 90. Unit: hari. Nilai 3650 menandakan bahwa data disimpan secara permanen di Logstore. Parameter ini hanya berlaku saat Anda membuat Logstore. |
machineGroups | array | Tidak | Grup mesin. Saat Anda menginstal komponen Logtail, Simple Log Service secara otomatis membuat grup mesin bernama k8s-group-${your_k8s_cluster_id}. |
logtailConfig | object | Ya | Konfigurasi Logtail. Konfigurasi ini mencakup parameter berikut: configName: nama konfigurasi Logtail. Nama tersebut harus sama dengan nama yang ditentukan di metadata.name. inputType: tipe input log. Nilai valid: plugin: menggunakan plug-in 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. Atur nilainya ke LogService. Log hanya dapat diunggah ke Simple Log Service. 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 kluster Kubernetes dan nama kontainer dalam kluster 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 Anda menggunakan dua label kontainer tersebut untuk menyaring kontainer. Jika label kontainer tidak memenuhi persyaratan bisnis Anda, Anda dapat menggunakan daftar putih variabel lingkungan 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 kluster 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 Logstore. Jika Logstore tidak ada, sistem secara otomatis membuat Logstore.
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 tersebut harus sama dengan nama 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 tersebut dapat berisi tanda bintang (*) 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 tersebut harus unik di kluster 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 Logstore. Jika Logstore tidak ada, sistem secara otomatis membuat Logstore.
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 penyimpanan log di Logstore. Parameter ini hanya berlaku saat Anda membuat Logstore. Nilai valid: 1 hingga 3650. Nilai default: 90. Unit: hari. Nilai 3650 menandakan 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 tersebut 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"
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 Simple Log Service.
kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml
Penting Setelah log dikumpulkan, Anda harus membuat indeks. Kemudian, Anda dapat menanyakan dan menganalisis log di Logstore. Untuk informasi lebih lanjut, lihat Buat Indeks.
Uji pengumpulan log
Setelah Anda membuat CRD AliyunLogConfig, Simple Log Service secara otomatis mengumpulkan log pod yang dibuat kemudian. Anda dapat membuat aplikasi berikut untuk menguji efek pengumpulan log.
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
Periksa status aplikasi.
kubetcl get pod
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
Lihat log.
Masuk ke Konsol Simple Log Service.
Klik nama proyek.
Temukan Logstore tempat log kontainer Anda disimpan. Klik nama Logstore untuk melihat log.
Pengumpulan log teks

Pengumpulan log stdout

Nonaktifkan pengumpulan log
Setelah Anda membuat CRD AliyunLogConfig, sistem secara otomatis mengumpulkan log semua pod yang memenuhi syarat. Jika Anda tidak ingin mengumpulkan log pod tertentu, Anda dapat menambahkan 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 Anda membuat Deployment, Anda harus menambahkan 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 berlaku.
Konfigurasi sampel:
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