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.
Masuk ke Konsol ACK.
Di bilah navigasi atas, pilih wilayah.
Di halaman Clusters, klik nama cluster ACK Serverless yang log kontainernya ingin Anda kumpulkan untuk masuk ke halaman manajemen cluster.
Terapkan komponen alibaba-log-controller di cluster.
Di panel navigasi kiri halaman detail, pilih Operations > Add-ons.
Klik tab Logs and Monitoring, temukan kartu komponen Alibaba-log-controller, lalu klik Install.
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
Sambungkan ke cluster ACK Serverless.
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: 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"
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.
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
Keluaran yang diharapkan:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
Lihat log.
Masuk ke Konsol Layanan Log Sederhana.
Klik nama proyek.
Temukan penyimpanan log tempat log kontainer Anda disimpan. Klik nama penyimpanan log untuk melihat log.
Pengumpulan log teks

Pengumpulan log stdout

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