Deploy alibaba-log-controller dan definisikan CRD AliyunLogConfig untuk mengumpulkan log teks dan stdout dari Pod ECI.
Prasyarat
Pastikan Anda telah:
-
Kluster ACK Serverless telah dibuat.
-
ack-virtual-node versi 2.7.0 atau yang lebih baru telah diinstal.
Konfigurasi pengumpulan log
Deploy alibaba-log-controller
-
Masuk ke Konsol ACK.
-
Di pojok kiri atas, pilih Wilayah.
-
Pada halaman Clusters, klik nama kluster Anda.
-
Di panel navigasi kiri, pilih Operations > Add-ons.
-
Klik tab Logs and Monitoring, temukan kartu Alibaba-log-controller, lalu klik Install.
-
Pada dialog konfirmasi, klik OK.
Setelah instalasi selesai, status Installed akan muncul pada kartu Alibaba-log-controller.
Buat CRD AliyunLogConfig
Hubungkan ke kluster ACK Serverless, lalu buat file konfigurasi YAML untuk CRD pengumpulan log.
Perhatikan batasan berikut sebelum membuat CRD:
-
configNameharus persis sesuai denganmetadata.name. -
Pengumpulan log berbasis CRD hanya berlaku untuk Pod ECI yang dibuat setelah CRD tersebut diterapkan. Untuk mengumpulkan log dari Pod yang sudah ada, lakukan rolling update ulang terhadap Pod tersebut.
-
Setelah membuat konfigurasi Logtail melalui CRD, kelola konfigurasi tersebut hanya melalui CRD. Perubahan yang dilakukan di Konsol Simple Log Service (SLS) tidak disinkronkan kembali. Untuk memperbarui konfigurasi, modifikasi langsung CRD AliyunLogConfig.
Templat CRD
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 | Wajib | Deskripsi |
|---|---|---|---|
project |
string | Tidak | Nama proyek SLS. Nilai default adalah proyek instalasi Logtail. Akan dibuat otomatis jika belum ada. |
logstore |
string | Ya | Nama penyimpanan log. Akan dibuat otomatis jika belum ada. |
logstoreMode |
string | Tidak | Jenis penyimpanan log. Nilai yang valid: query, standard. Hanya berlaku saat pembuatan. Lihat Kelola penyimpanan log. |
shardCount |
int | Tidak | Jumlah shard. Nilai yang valid: 1–10. Default: 2. |
lifeCycle |
int | Tidak | Periode retensi log dalam hari. Nilai yang valid: 1–3650. Default: 90. Nilai 3650 berarti permanen. Hanya berlaku saat pembuatan. |
machineGroups |
array | Tidak | Kelompok mesin. SLS secara otomatis membuat k8s-group-${your_k8s_cluster_id} saat instalasi Logtail. |
logtailConfig |
object | Ya | Konfigurasi Logtail. Lihat sub-parameter di bawah. |
Sub-parameter logtailConfig:
| Sub-parameter | Deskripsi |
|---|---|
configName |
Nama konfigurasi Logtail. Harus sesuai dengan metadata.name. |
inputType |
Jenis sumber log. plugin: sumber stdout dan berbasis plugin (seperti log biner MySQL). file: log teks dengan pola tetap seperti regex atau delimiter. |
inputDetail |
Konfigurasi input detail. |
outputType |
Jenis output. Tetapkan ke LogService. Log hanya dapat dikirim ke SLS. |
outputDetail |
Konfigurasi output detail. |
logSample |
Contoh entri log. |
Lihat konfigurasi Logtail.
Filtering kontainer
Opsi filtering bergantung pada versi Logtail Anda.
Logtail versi sebelum v1.0.34 — hanya dapat difilter berdasarkan variabel lingkungan dan label kontainer.
Namespace Kubernetes dan nama kontainer dipetakan ke label berikut:
-
Namespace:
io.kubernetes.pod.namespace -
Nama kontainer:
io.kubernetes.container.name
Gunakan label ini untuk memfilter kontainer. Jika tidak mencukupi, gunakan daftar putih atau blacklist variabel lingkungan.
Logtail v1.0.34 dan yang lebih baru — dapat difilter berdasarkan metadata tingkat Kubernetes, termasuk nama Pod, namespace, nama kontainer, dan label.
Konfigurasikan parameter filtering di logtailConfig.inputDetail.advanced.k8s:
| Parameter | Deskripsi |
|---|---|
IncludeK8sLabel |
Daftar putih label Kubernetes — kontainer yang akan dimasukkan |
ExcludeK8sLabel |
Blacklist label Kubernetes — kontainer yang akan dikecualikan |
K8sNamespaceRegex |
Filter berdasarkan namespace (regex) |
K8sPodRegex |
Filter berdasarkan nama Pod (regex) |
K8sContainerRegex |
Filter berdasarkan nama kontainer (regex) |
Lihat Kumpulkan log teks dari kontainer Kubernetes dalam mode DaemonSet dan Kumpulkan stdout dan stderr dari kontainer Kubernetes dalam mode DaemonSet (versi lama).
Contoh: kumpulkan log teks
Buat file log-file.yaml dengan konten berikut:
apiVersion: log.alibabacloud.com/v1alpha1 # Gunakan nilai default. Jangan ubah.
kind: AliyunLogConfig # Gunakan nilai default. Jangan ubah.
metadata:
name: test-file # Nama resource unik di kluster Kubernetes.
spec:
project: k8s-log-c326bc86**** # Opsional. Dibuat otomatis jika proyek belum ada.
logstore: test-file # Wajib. Dibuat otomatis jika penyimpanan log belum ada.
logtailConfig:
inputType: file # file = log teks; plugin = log stdout.
configName: test-file # Harus sesuai dengan metadata.name.
inputDetail:
logType: common_reg_log # Mode simple.
logPath: /log/ # Direktori file log.
filePattern: "*.log" # Pola nama file log. Mendukung * dan ?.
dockerFile: true # Tetapkan ke true untuk mengumpulkan dari kontainer.
advanced:
k8s:
K8sNamespaceRegex: ^(default)$
K8sPodRegex: '^(eci-sls-demo.*)$'
Contoh: kumpulkan log stdout
Buat file log-stdout.yaml dengan konten berikut:
apiVersion: log.alibabacloud.com/v1alpha1 # Gunakan nilai default. Jangan ubah.
kind: AliyunLogConfig # Gunakan nilai default. Jangan ubah.
metadata:
name: test-stdout # Nama resource unik di kluster Kubernetes.
spec:
project: k8s-log-c326bc86**** # Opsional. Dibuat otomatis jika proyek belum ada.
logstore: test-stdout # Wajib. Dibuat otomatis jika penyimpanan log belum ada.
shardCount: 2 # Opsional. Default: 2. Nilai yang valid: 1–10.
lifeCycle: 90 # Opsional. Default: 90 hari. Nilai yang valid: 1–3650. 3650 = permanen.
logtailConfig:
inputType: plugin # plugin = log stdout; file = log teks.
configName: test-stdout # Harus sesuai dengan metadata.name.
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
# IncludeEnv:
# aliyun_logs_test-stdout: "stdout"
Terapkan konfigurasi CRD
kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml
Setelah konfigurasi diterapkan, Logtail akan mengumpulkan log stdout atau teks dari setiap kontainer dan mengirimkannya ke SLS.
Buat indeks di penyimpanan log agar dapat melakukan kueri dan analisis. Lihat Buat indeks.
Uji pengumpulan log
Setelah membuat CRD, log dari Pod yang baru dibuat akan dikumpulkan secara otomatis. Verifikasi pengaturan dengan langkah-langkah berikut.
Buat aplikasi uji
Buat file test-sls-crd.yaml dengan Penyebaran berikut. Kontainer menulis ke stdout dan file log sekaligus.
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
kubectl create -f test-sls-crd.yaml
Verifikasi status Pod
kubectl get pod
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
Lihat log yang terkumpul
-
Masuk ke Konsol SLS.
-
Klik nama proyek.
-
Klik penyimpanan log untuk kontainer Anda guna melihat log.
Pengumpulan log teks:
Pengumpulan log stdout:
Nonaktifkan pengumpulan log untuk Pod tertentu
Secara default, CRD mengumpulkan log dari semua Pod yang sesuai. Untuk mengecualikan Pod tertentu, tambahkan anotasi k8s.aliyun.com/eci-sls-enable: "false" ke metadata Pod.
-
Tambahkan anotasi di
spec.template.metadata, bukan di metadata tingkat atas. -
Anotasi hanya berlaku saat pembuatan Pod. Perubahan selama pembaruan Pod tidak berpengaruh.
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