LoongCollector adalah agen pengumpulan log generasi berikutnya untuk Alibaba Cloud Simple Log Service (SLS) dan merupakan versi peningkatan dari Logtail. Topik ini menjelaskan cara menginstal LoongCollector di kluster Kubernetes, baik dalam mode DaemonSet maupun Sidecar.
Persiapan
Sebelum menginstal LoongCollector, verifikasi koneksi jaringan antara node kluster Anda dan titik akhir Simple Log Service untuk memastikan LoongCollector dapat melaporkan data dengan benar.
Dapatkan titik akhir layanan:
Masuk ke Konsol Simple Log Service. Di daftar proyek, klik proyek tujuan.
Klik ikon
di samping nama proyek untuk membuka halaman ikhtisar proyek.Di bagian Informasi Dasar, temukan titik akhir publik dan internal untuk wilayah proyek tersebut.
Uji koneksi: Masuk ke node kluster tempat Anda berencana menginstal komponen LoongCollector dan jalankan perintah
curlberikut. Ganti${ProjectName}dan${SLS_ENDPOINT}dengan informasi aktual Anda.curl https://${Project_Name}.${SLS_ENDPOINT}Periksa hasilnya:
Jika perintah mengembalikan
{"Error":{"Code":"OLSInvalidMethod",...}}, koneksi jaringan antara node Anda dan Simple Log Service berfungsi.CatatanPengujian ini hanya memverifikasi konektivitas lapisan jaringan. Simple Log Service mengembalikan kesalahan karena permintaan tidak memiliki parameter API yang diperlukan. Perilaku ini diharapkan.
Jika perintah timeout atau mengembalikan kesalahan lapisan jaringan lainnya, seperti
Connection refused, ini menunjukkan kegagalan konektivitas jaringan. Periksa konfigurasi jaringan node, aturan grup keamanan, atau resolusi DNS.
Pilih metode instalasi
Pilih metode instalasi berikut berdasarkan jenis kluster dan kebutuhan Anda.
Metode instalasi | Skenario |
Kumpulkan log dari kluster ACK yang dikelola dan khusus dalam Akun Alibaba Cloud dan wilayah yang sama. | |
| |
Kumpulkan log dari aplikasi tertentu dengan persyaratan berikut:
|
Instal pada kluster ACK (mode DaemonSet)
Jika Anda menggunakan logtail-ds dan ingin meningkatkan ke LoongCollector, Anda harus menguninstall logtail-ds sebelum menginstal LoongCollector.
Anda dapat menginstal LoongCollector dengan satu klik di Konsol Alibaba Cloud Container Service for Kubernetes (ACK). Secara default, log kontainer dari kluster dikumpulkan ke proyek Simple Log Service dalam akun dan wilayah yang sama. Untuk mengumpulkan log lintas akun atau wilayah, lihat Instal pada kluster yang dikelola sendiri (mode DaemonSet).
Instal pada kluster ACK yang dikelola yang sudah ada
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Di tab Logging, temukan loongcollector, lalu klik Install.
Setelah instalasi selesai, Simple Log Service secara otomatis membuat sumber daya berikut di wilayah tempat kluster ACK berada. Anda dapat masuk ke Konsol Simple Log Service untuk melihatnya.
Jenis sumber daya
Nama sumber daya
Tujuan
Proyek
k8s-log-${cluster_id}Unit manajemen sumber daya yang mengisolasi log dari layanan berbeda.
Kelompok mesin
k8s-group-${cluster_id}Kelompok mesin untuk loongcollector-ds. Terutama digunakan untuk pengumpulan log.
k8s-group-${cluster_id}-clusterKelompok mesin untuk loongcollector-cluster. Terutama digunakan untuk pengumpulan metrik.
k8s-group-${cluster_id}-singletonKelompok mesin instansi tunggal. Terutama digunakan untuk beberapa konfigurasi pengumpulan instansi tunggal.
Penyimpanan log
config-operation-logPentingJangan menghapus Logstore ini.
Menyimpan log dari alibaba-log-controller dalam komponen LoongCollector. Ditagih dengan cara yang sama seperti Logstore standar. Untuk informasi selengkapnya, lihat Item penagihan untuk mode bayar-per-data-ditulis. Jangan membuat konfigurasi pengumpulan di Logstore ini.
Instal saat membuat kluster ACK yang dikelola baru
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Klik Create Cluster. Di halaman Component Configurations, pilih Enable Log Service. Anda dapat membuat Proyek baru atau menggunakan Proyek yang sudah ada.
Topik ini hanya menjelaskan konfigurasi yang terkait dengan Simple Log Service. Untuk informasi selengkapnya tentang item konfigurasi lainnya, lihat Buat kluster ACK yang dikelola.
Saat Anda memilih Create New Project, Simple Log Service secara default membuat sumber daya berikut. Anda dapat masuk ke Konsol Simple Log Service untuk melihatnya.
Jenis sumber daya
Nama sumber daya
Tujuan
Proyek
k8s-log-${cluster_id}Unit manajemen sumber daya yang mengisolasi log dari layanan berbeda.
Kelompok mesin
k8s-group-${cluster_id}Kelompok mesin untuk loongcollector-ds. Terutama digunakan untuk pengumpulan log.
k8s-group-${cluster_id}-clusterKelompok mesin untuk loongcollector-cluster. Terutama digunakan untuk pengumpulan metrik.
k8s-group-${cluster_id}-singletonKelompok mesin instansi tunggal. Terutama digunakan untuk beberapa konfigurasi pengumpulan instansi tunggal.
Penyimpanan log
config-operation-logPentingJangan menghapus Logstore ini.
Menyimpan log dari alibaba-log-controller dalam komponen LoongCollector. Ditagih dengan cara yang sama seperti Logstore standar. Untuk informasi selengkapnya, lihat Item penagihan untuk mode bayar-per-data-ditulis. Jangan membuat konfigurasi pengumpulan di Logstore ini.
Instal pada kluster yang dikelola sendiri (mode DaemonSet)
Skenario
Kluster Kubernetes di pusat data yang dikelola sendiri
Kluster Kubernetes yang diterapkan di penyedia cloud lain
Mengumpulkan log kontainer dari kluster Alibaba Cloud ACK lintas akun atau wilayah
Pastikan kluster yang Anda kelola sendiri menjalankan Kubernetes 1.6 atau lebih tinggi.
Panduan pengguna
Unduh dan ekstrak paket instalasi: Pada mesin tempat kubectl diinstal dan dikonfigurasi, jalankan perintah untuk wilayah kluster Anda guna mengunduh LoongCollector dan komponen dependennya.
#Wilayah 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.1.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.shUbah file konfigurasi
values.yaml: Di folderloongcollector-custom-k8s-package, ubah file konfigurasi./loongcollector/values.yaml.Deskripsi
values.yaml
# ===================== Parameter wajib ===================== # Nama proyek untuk pengumpulan log di kluster ini. Contoh: k8s-log-custom-sd89ehdq projectName: "" # Wilayah proyek. Contoh untuk Shanghai: cn-shanghai region: "" # ID Akun Alibaba Cloud yang memiliki proyek. Sertakan ID dalam tanda kutip. Contoh: "123456789" aliUid: "" # Jaringan yang digunakan. Opsi: Internet atau Intranet. Default: Internet net: Internet # ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna RAM. accessKeyID: "" accessKeySecret: "" # ID kluster kustom. ID dapat berisi huruf besar, huruf kecil, angka, dan tanda hubung (-). clusterID: "" # ... Parameter opsional lainnya dihilangkan ...projectName
String(Wajib)Nama proyek tempat LoongCollector mengunggah log. Konvensi penamaan sebagai berikut:
Nama proyek hanya boleh berisi huruf kecil, angka, dan tanda hubung (-).
Harus dimulai dengan huruf kecil dan diakhiri dengan huruf kecil atau angka.
Nama harus terdiri dari 3 hingga 63 karakter.
region
String(Wajib)ID wilayah tempat proyek berada. Untuk informasi selengkapnya, lihat Wilayah.
aliUid
String(Wajib)ID Akun Alibaba Cloud yang memiliki proyek.
net
String(Wajib)Jenis jaringan yang digunakan untuk mentransmisikan data log.
Internet (default): Jaringan publik.
Intranet: Jaringan internal.
accessKeyID
String(Wajib)ID AccessKey yang digunakan untuk mengakses proyek. Gunakan AccessKey dari Pengguna Resource Access Management (RAM) dan berikan kebijakan sistem AliyunLogFullAccess kepada Pengguna RAM tersebut. Untuk informasi selengkapnya tentang RAM, lihat Ikhtisar pengguna RAM.
accessKeySecret
String(Wajib)Rahasia AccessKey yang sesuai dengan ID AccessKey yang ditentukan.
clusterID
String(Wajib)ID kustom untuk kluster. Nama hanya boleh berisi huruf besar, huruf kecil, angka, dan tanda hubung (-).
PentingJangan gunakan ID kluster yang sama untuk kluster Kubernetes yang berbeda.
Jalankan skrip instalasi: Di folder
loongcollector-custom-k8s-package, jalankan perintah berikut untuk menginstal LoongCollector dan komponen dependennya.bash k8s-custom-install.sh installVerifikasi instalasi: Setelah instalasi selesai, jalankan perintah berikut untuk memeriksa status komponen:
# Periksa status pod kubectl get po -n kube-system | grep loongcollector-dsContoh hasil:
loongcollector-ds-gnmnh 1/1 Running 0 63sJika komponen gagal dimulai (statusnya bukan Running):
Periksa konfigurasi: Verifikasi bahwa item konfigurasi di
values.yamlbenar.Periksa citra: Jalankan perintah berikut dan periksa bagian
Eventspada output untuk memastikan citra kontainer berhasil ditarik.kubectl describe pod loongcollector-ds -n kube-system
Setelah komponen diinstal, Simple Log Service secara otomatis membuat sumber daya berikut. Anda dapat masuk ke Konsol Simple Log Service untuk melihatnya.
Jenis sumber daya
Nama sumber daya
Tujuan
Proyek
Nilai
projectNameyang Anda tentukan di filevalues.yamlUnit manajemen sumber daya yang mengisolasi log layanan berbeda.
Kelompok mesin
k8s-group-${cluster_id}Kumpulan node pengumpulan log.
k8s-group-${cluster_id}-clusterKelompok mesin untuk loongcollector-cluster, terutama digunakan untuk pengumpulan metrik.
k8s-group-${cluster_id}-singletonKelompok mesin instansi tunggal, terutama digunakan untuk konfigurasi pengumpulan instansi tunggal.
Penyimpanan log
config-operation-logPentingJangan menghapus Logstore ini.
Menyimpan log komponen alibaba-log-controller dalam LoongCollector. Penagihan sama seperti Logstore standar. Untuk informasi selengkapnya, lihat Item penagihan untuk mode bayar-per-data-ditulis. Jangan membuat konfigurasi pengumpulan di Logstore ini.
Instal menggunakan pola sidecar
Gunakan pola sidecar untuk manajemen log detail halus, isolasi data multi-penyewa, atau mengikat pengumpulan log ke siklus hidup aplikasi. Pola ini menyuntikkan kontainer LoongCollector (Logtail) terpisah ke dalam pod aplikasi untuk mengaktifkan pengumpulan log khusus dalam pod tersebut. Jika Anda belum menerapkan aplikasi atau ingin menguji prosesnya, gunakan Lampiran: contoh YAML untuk memverifikasi alur dengan cepat.
1. Ubah konfigurasi YAML pod aplikasi
Definisikan volume bersama
Di
spec.template.spec.volumes, tambahkan tiga volume bersama pada level yang sama dengancontainers:volumes: # Direktori log bersama (ditulis oleh kontainer aplikasi, dibaca oleh Sidecar) - name: ${shared_volume_name} # <-- Nama harus cocok dengan nama di volumeMounts emptyDir: {} # Direktori sinyal untuk komunikasi antar-kontainer (untuk shutdown yang mulus) - name: tasksite emptyDir: medium: Memory # Gunakan memori sebagai media untuk performa lebih baik sizeLimit: "50Mi" # Konfigurasi zona waktu host bersama: Menyinkronkan zona waktu untuk semua kontainer dalam pod - name: tz-config # <-- Nama harus cocok dengan nama di volumeMounts hostPath: path: /usr/share/zoneinfo/Asia/Shanghai # Ubah zona waktu sesuai kebutuhanKonfigurasikan pemasangan kontainer aplikasi
Di bagian
volumeMountskontainer aplikasi Anda, sepertiyour-business-app-container, tambahkan item pemasangan berikut:Pastikan kontainer aplikasi menulis log ke direktori
${shared_volume_path}agar LoongCollector dapat mengumpulkan log tersebut.volumeMounts: # Pasang volume log bersama ke direktori output log aplikasi - name: ${shared_volume_name} mountPath: ${shared_volume_path} # Contoh: /var/log/app # Pasang direktori komunikasi - name: tasksite mountPath: /tasksite # Direktori bersama untuk komunikasi dengan kontainer Loongcollector # Pasang file zona waktu - name: tz-config mountPath: /etc/localtime readOnly: trueSuntikkan kontainer Sidecar LoongCollector
Di larik
spec.template.spec.containers, tambahkan definisi kontainer Sidecar berikut:- name: loongcollector image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun command: ["/bin/bash", "-c"] args: - | echo "[$(date)] LoongCollector: Memulai inisialisasi" # Mulai layanan LoongCollector /etc/init.d/loongcollectord start # Tunggu konfigurasi diunduh dan layanan siap sleep 15 # Verifikasi status layanan if /etc/init.d/loongcollectord status; then echo "[$(date)] LoongCollector: Layanan berhasil dimulai" touch /tasksite/cornerstone else echo "[$(date)] LoongCollector: Gagal memulai layanan" exit 1 fi # Tunggu kontainer aplikasi selesai (melalui sinyal file tombstone) echo "[$(date)] LoongCollector: Menunggu kontainer bisnis selesai" until [[ -f /tasksite/tombstone ]]; do sleep 2 done # Beri waktu untuk mengunggah log yang tersisa echo "[$(date)] LoongCollector: Bisnis selesai, menunggu transmisi log" sleep 30 # Hentikan layanan echo "[$(date)] LoongCollector: Menghentikan layanan" /etc/init.d/loongcollectord stop echo "[$(date)] LoongCollector: Shutdown selesai" # Pemeriksaan kesehatan livenessProbe: exec: command: ["/etc/init.d/loongcollectord", "status"] initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # Konfigurasi sumber daya resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "2000m" memory: "2048Mi" # Konfigurasi variabel lingkungan env: - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # Aktifkan mode drain penuh untuk memastikan semua log dikirim sebelum pod dihentikan - name: enable_full_drain_mode value: "true" # Tambahkan informasi lingkungan pod sebagai tag log - name: ALIYUN_LOG_ENV_TAGS value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # Secara otomatis suntikkan metadata pod dan node sebagai tag log - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP # Pemasangan volume (dibagi dengan kontainer aplikasi) volumeMounts: # Pemasangan baca-saja untuk direktori log aplikasi - name: ${shared_volume_name} # <-- Nama direktori log bersama mountPath: ${dir_containing_your_files} # <-- Jalur ke direktori bersama di sidecar readOnly: true # Pasang direktori komunikasi - name: tasksite mountPath: /tasksite # Pasang zona waktu - name: tz-config mountPath: /etc/localtime readOnly: true
2. Ubah logika siklus hidup kontainer aplikasi
Bergantung pada jenis beban kerja, Anda harus memodifikasi kontainer aplikasi untuk mendukung keluar yang terkoordinasi dengan Sidecar.
Tugas berumur pendek (Job/CronJob)
# 1. Tunggu LoongCollector siap
echo "[$(date)] Bisnis: Menunggu LoongCollector siap..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Bisnis: LoongCollector siap, memulai logika bisnis"
# 2. Jalankan logika bisnis inti (pastikan log ditulis ke direktori bersama)
echo "Hello, World!" >> /app/logs/business.log
# 3. Simpan kode keluar
retcode=$?
echo "[$(date)] Bisnis: Tugas selesai dengan kode keluar: $retcode"
# 4. Beri tahu LoongCollector bahwa tugas bisnis selesai
touch /tasksite/tombstone
echo "[$(date)] Bisnis: Tombstone dibuat, keluar"
exit $retcodeLayanan berumur panjang (Deployment/StatefulSet)
# Definisikan fungsi penanganan sinyal
_term_handler() {
echo "[$(date)] [nginx-demo] Mendeteksi SIGTERM, memulai shutdown yang mulus..."
# Kirim sinyal QUIT ke Nginx untuk penghentian yang mulus
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Mengirim SIGQUIT ke PID Nginx: $NGINX_PID"
# Tunggu Nginx berhenti dengan mulus
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx berhenti dengan kode keluar: $EXIT_CODE"
fi
# Beri tahu LoongCollector bahwa kontainer aplikasi telah berhenti
echo "[$(date)] [nginx-demo] Menulis file tombstone"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Daftarkan penanganan sinyal
trap _term_handler SIGTERM SIGINT SIGQUIT
# Tunggu LoongCollector siap
echo "[$(date)] [nginx-demo]: Menunggu LoongCollector siap..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector siap, memulai logika bisnis"
# Mulai Nginx
echo "[$(date)] [nginx-demo] Memulai Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx dimulai dengan PID: $NGINX_PID"
# Tunggu proses Nginx
wait $NGINX_PID
EXIT_CODE=$?
# Juga beri tahu LoongCollector jika keluar tidak disebabkan oleh sinyal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Keluar tak terduga, menulis tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE3. Atur periode terminasi yang mulus
Di spec.template.spec, atur periode tenggang terminasi yang cukup untuk memastikan LoongCollector memiliki waktu yang cukup untuk mengunggah log yang tersisa.
spec:
# ... Konfigurasi spec lainnya yang sudah ada ...
template:
spec:
terminationGracePeriodSeconds: 600 # Periode shutdown mulus 10 menit4. Deskripsi variabel
Variabel | Deskripsi |
| Atur ini ke ID Akun Alibaba Cloud Anda. Untuk informasi selengkapnya, lihat Konfigurasi pengenal pengguna. |
| Atur ID kustom untuk kelompok mesin. ID ini digunakan untuk membuat kelompok mesin kustom. Contoh: Penting Pastikan ID ini unik dalam wilayah proyek Anda. |
| Tentukan konfigurasi berdasarkan wilayah proyek Simple Log Service Anda dan jenis jaringan yang digunakan untuk akses. Untuk informasi tentang wilayah, lihat Wilayah layanan. Contoh: Jika proyek Anda berada di wilayah Tiongkok (Hangzhou), gunakan |
| Atur nama kustom untuk volume. Penting Parameter |
| Atur jalur pemasangan. Ini adalah direktori dalam kontainer tempat log teks yang akan dikumpulkan berada. |
5. Terapkan konfigurasi dan verifikasi hasilnya
Jalankan perintah berikut untuk menerapkan perubahan:
kubectl apply -f <YOUR-YAML>Periksa status pod untuk memastikan kontainer LoongCollector berhasil disuntikkan:
kubectl describe pod <YOUR-POD-NAME>Jika status kedua kontainer (kontainer aplikasi dan
loongcollector) adalah Normal, penyuntikan berhasil.
6. Buat kelompok mesin dengan pengenal kustom
Masuk ke Konsol Simple Log Service dan klik proyek target.
Di panel navigasi kiri, pilih . Di samping Machine Groups, klik .
Di kotak dialog Create Machine Group, konfigurasikan parameter berikut dan klik OK.
Name: Nama kelompok mesin. Nama tidak dapat diubah setelah dibuat. Konvensi penamaan sebagai berikut:
Hanya boleh berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).
Harus dimulai dan diakhiri dengan huruf kecil atau angka.
Harus terdiri dari 2 hingga 128 karakter.
Machine Group ID: Pilih Custom Identifier.
Custom Identifier: Masukkan nilai variabel lingkungan
ALIYUN_LOGTAIL_USER_DEFINED_IDyang Anda tetapkan untuk kontainer LoongCollector di file YAML pada 1. Ubah konfigurasi YAML pod aplikasi. Nilainya harus cocok persis. Jika tidak, asosiasi akan gagal.
Periksa status heartbeat kelompok mesin: Setelah kelompok mesin dibuat, klik namanya dan lihat status heartbeat di area status.
OK: Menunjukkan bahwa LoongCollector berhasil terhubung ke Simple Log Service dan kelompok mesin telah terdaftar.
GAGAL:
Konfigurasi mungkin belum berlaku. Diperlukan waktu sekitar 2 menit agar konfigurasi berlaku. Muat ulang halaman dan coba lagi nanti.
Jika status masih FAIL setelah 2 menit, lihat Pemecahan masalah kelompok mesin Logtail untuk mendiagnosis masalah.
Setiap pod sesuai dengan instansi LoongCollector terpisah. Gunakan pengenal kustom berbeda untuk aplikasi atau lingkungan berbeda guna memfasilitasi manajemen detail halus.
FAQ
Bagaimana cara memodifikasi konfigurasi LoongCollector untuk kluster ACK yang dikelola agar mengumpulkan log lintas akun atau wilayah?
Bagaimana cara mengumpulkan log kontainer dari kluster Alibaba Cloud ACK Edge, ACK One, ACS, dan ACK Serverless?
Langkah selanjutnya
Setelah Anda menginstal LoongCollector, lihat Kumpulkan log kontainer dari kluster Kubernetes. Topik ini menjelaskan prinsip inti, proses utama, rekomendasi pemilihan, dan praktik terbaik. Kemudian, buat konfigurasi pengumpulan menggunakan salah satu metode berikut:
Lampiran: Contoh YAML
Contoh ini menyediakan konfigurasi deployment Kubernetes lengkap yang mencakup kontainer aplikasi NGINX dan kontainer sidecar LoongCollector. Konfigurasi ini cocok untuk mengumpulkan log kontainer menggunakan pola sidecar.
Sebelum memulai, lakukan tiga penggantian berikut:
Ganti
${your_aliyun_user_id}dengan UID Akun Alibaba Cloud Anda.Ganti
${your_machine_group_user_defined_id}dengan ID kustom kelompok mesin yang Anda buat di Langkah 3. ID harus cocok persis.Ganti
${your_region_config}dengan nama konfigurasi yang sesuai dengan wilayah dan jenis jaringan proyek Simple Log Service Anda.Contoh: Untuk proyek di wilayah Tiongkok (Hangzhou), gunakan
cn-hangzhouuntuk akses jaringan internal ataucn-hangzhou-internetuntuk akses jaringan publik.
Tugas berumur pendek (Job/CronJob)
apiVersion: batch/v1
kind: Job
metadata:
name: demo-job
spec:
backoffLimit: 3
activeDeadlineSeconds: 3600
completions: 1
parallelism: 1
template:
spec:
restartPolicy: Never
terminationGracePeriodSeconds: 300
containers:
# Kontainer aplikasi
- name: demo-job
image: debian:bookworm-slim
command: ["/bin/bash", "-c"]
args:
- |
# Tunggu LoongCollector siap
echo "[$(date)] Bisnis: Menunggu LoongCollector siap..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Bisnis: LoongCollector siap, memulai logika bisnis"
# Jalankan logika bisnis
echo "Hello, World!" >> /app/logs/business.log
# Simpan kode keluar
retcode=$?
echo "[$(date)] Bisnis: Tugas selesai dengan kode keluar: $retcode"
# Beri tahu LoongCollector bahwa tugas bisnis selesai
touch /tasksite/tombstone
echo "[$(date)] Bisnis: Tombstone dibuat, keluar"
exit $retcode
# Batas sumber daya
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500"
memory: "512Mi"
# Pemasangan volume
volumeMounts:
- name: app-logs
mountPath: /app/logs
- name: tasksite
mountPath: /tasksite
# Kontainer Sidecar LoongCollector
- name: loongcollector
image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Memulai inisialisasi"
# Mulai layanan LoongCollector
/etc/init.d/loongcollectord start
# Tunggu konfigurasi diunduh dan layanan siap
sleep 15
# Verifikasi status layanan
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Layanan berhasil dimulai"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Gagal memulai layanan"
exit 1
fi
# Tunggu kontainer aplikasi selesai
echo "[$(date)] LoongCollector: Menunggu kontainer bisnis selesai"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Bisnis selesai, menunggu transmisi log"
# Beri waktu cukup untuk mentransmisikan log yang tersisa
sleep 30
echo "[$(date)] LoongCollector: Menghentikan layanan"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown selesai"
# Pemeriksaan kesehatan
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Konfigurasi sumber daya
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
# Konfigurasi variabel lingkungan
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "your-user-id"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "your-user-defined-id"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
- name: ALIYUN_LOG_ENV_TAGS
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
# Penyuntikan informasi pod
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# Pemasangan volume
volumeMounts:
- name: app-logs
mountPath: /app/logs
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Definisi volume
volumes:
- name: app-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "10Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Layanan berumur panjang (Deployment/StatefulSet)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
namespace: production
labels:
app: nginx-demo
version: v1.0.0
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
version: v1.0.0
spec:
terminationGracePeriodSeconds: 600 # Periode shutdown mulus 10 menit
containers:
# Kontainer aplikasi - Aplikasi web
- name: nginx-demo
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
# Perintah startup dan penanganan sinyal
command: ["/bin/sh", "-c"]
args:
- |
# Definisikan fungsi penanganan sinyal
_term_handler() {
echo "[$(date)] [nginx-demo] Mendeteksi SIGTERM, memulai shutdown yang mulus..."
# Kirim sinyal QUIT ke Nginx untuk penghentian yang mulus
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Mengirim SIGQUIT ke PID Nginx: $NGINX_PID"
# Tunggu Nginx berhenti dengan mulus
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx berhenti dengan kode keluar: $EXIT_CODE"
fi
# Beri tahu LoongCollector bahwa kontainer aplikasi telah berhenti
echo "[$(date)] [nginx-demo] Menulis file tombstone"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Daftarkan penanganan sinyal
trap _term_handler SIGTERM SIGINT SIGQUIT
# Tunggu LoongCollector siap
echo "[$(date)] [nginx-demo]: Menunggu LoongCollector siap..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector siap, memulai logika bisnis"
# Mulai Nginx
echo "[$(date)] [nginx-demo] Memulai Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx dimulai dengan PID: $NGINX_PID"
# Tunggu proses Nginx
wait $NGINX_PID
EXIT_CODE=$?
# Juga beri tahu LoongCollector jika keluar tidak disebabkan oleh sinyal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Keluar tak terduga, menulis tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
# Konfigurasi sumber daya
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
# Pemasangan volume
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Kontainer Sidecar LoongCollector
- name: loongcollector
image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Memulai inisialisasi"
# Mulai layanan LoongCollector
/etc/init.d/loongcollectord start
# Tunggu konfigurasi diunduh dan layanan siap
sleep 15
# Verifikasi status layanan
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Layanan berhasil dimulai"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Gagal memulai layanan"
exit 1
fi
# Tunggu kontainer aplikasi selesai
echo "[$(date)] LoongCollector: Menunggu kontainer bisnis selesai"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Bisnis selesai, menunggu transmisi log"
# Beri waktu cukup untuk mentransmisikan log yang tersisa
sleep 30
echo "[$(date)] LoongCollector: Menghentikan layanan"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown selesai"
# Pemeriksaan kesehatan
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Konfigurasi sumber daya
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "2000m"
memory: "2048Mi"
# Konfigurasi variabel lingkungan
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "${your_aliyun_user_id}"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "${your_machine_group_user_defined_id}"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
# Aktifkan mode drain penuh untuk memastikan semua log dikirim saat pod berhenti
- name: enable_full_drain_mode
value: "true"
# Tambahkan informasi lingkungan pod sebagai tag log
- name: "ALIYUN_LOG_ENV_TAGS"
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
# Dapatkan informasi pod dan node
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "_node_ip_"
valueFrom:
fieldRef:
fieldPath: status.hostIP
# Pemasangan volume
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Definisi volume
volumes:
- name: nginx-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "50Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
> Create Machine Group