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 SLS 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 Endpoint, temukan titik akhir publik dan pribadi 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 SLS berfungsi.CatatanPengujian ini hanya memverifikasi konektivitas lapisan jaringan. SLS mengembalikan error karena permintaan tidak memiliki parameter API yang diperlukan—perilaku ini diharapkan.
Jika perintah timeout atau mengembalikan error lapisan jaringan lainnya, seperti
Connection refused, ini menunjukkan kegagalan konektivitas jaringan. Periksa konfigurasi jaringan node, aturan security group, atau resolusi DNS.
Pilih metode instalasi
Pilih metode instalasi berikut berdasarkan jenis kluster dan kebutuhan Anda.
Metode instalasi | Kasus penggunaan |
Kumpulkan log dari kluster ACK managed dan dedicated 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 menguninstal logtail-ds sebelum menginstal LoongCollector.
Instal LoongCollector dengan satu klik di Konsol Alibaba Cloud Container Service for Kubernetes (ACK). Secara default, log kontainer dari kluster dikumpulkan ke proyek SLS dalam akun dan wilayah yang sama. Untuk mengumpulkan log lintas akun atau wilayah, lihat Instal pada kluster self-managed (mode DaemonSet).
Instal pada kluster ACK managed 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 Logs and Monitoring, temukan loongcollector, lalu klik Install.
Setelah instalasi selesai, SLS secara otomatis membuat resource berikut di wilayah tempat kluster ACK berada. Masuk ke Konsol Simple Log Service untuk melihatnya.
Jenis resource
Nama resource
Tujuan
Project
k8s-log-${cluster_id}Unit manajemen resource yang mengisolasi log dari layanan berbeda.
Machine group
k8s-group-${cluster_id}Machine group untuk loongcollector-ds. Terutama digunakan untuk pengumpulan log.
k8s-group-${cluster_id}-clusterMachine group untuk loongcollector-cluster. Terutama digunakan untuk pengumpulan metrik.
k8s-group-${cluster_id}-singletonMachine group instans tunggal. Terutama digunakan untuk beberapa konfigurasi pengumpulan instans tunggal.
Logstore
config-operation-logPentingJangan hapus logstore ini.
Menyimpan log dari alibaba-log-controller dalam komponen LoongCollector. Penagihannya sama seperti logstore standar. Untuk informasi selengkapnya, lihat Item penagihan untuk mode bayar-per-data-ditulis. Jangan buat konfigurasi pengumpulan di logstore ini.
Instal saat membuat kluster ACK managed baru
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Klik Create Kubernetes Cluster. Di bagian Advanced Settings, SLS diaktifkan secara default. Klik Modify Default Configuration untuk membuat proyek atau menggunakan proyek yang sudah ada.
Topik ini hanya menjelaskan konfigurasi terkait SLS. Untuk informasi selengkapnya tentang item konfigurasi lainnya, lihat Buat kluster ACK managed.
Saat Anda memilih Create Project, SLS secara default membuat resource berikut. Masuk ke Konsol Simple Log Service untuk melihatnya.
Jenis resource
Nama resource
Tujuan
Project
k8s-log-${cluster_id}Unit manajemen resource yang mengisolasi log dari layanan berbeda.
Machine group
k8s-group-${cluster_id}Machine group untuk loongcollector-ds. Terutama digunakan untuk pengumpulan log.
k8s-group-${cluster_id}-clusterMachine group untuk loongcollector-cluster. Terutama digunakan untuk pengumpulan metrik.
k8s-group-${cluster_id}-singletonMachine group instans tunggal. Terutama digunakan untuk beberapa konfigurasi pengumpulan instans tunggal.
Logstore
config-operation-logPentingJangan hapus logstore ini.
Menyimpan log dari alibaba-log-controller dalam komponen LoongCollector. Penagihannya sama seperti logstore standar. Untuk informasi selengkapnya, lihat Item penagihan untuk mode bayar-per-data-ditulis. Jangan buat konfigurasi pengumpulan di logstore ini.
Instal pada kluster self-managed (mode DaemonSet)
Kasus penggunaan
Kluster Kubernetes di pusat data self-managed
Kluster Kubernetes yang diterapkan di penyedia cloud lain
Mengumpulkan log kontainer dari kluster ACK Alibaba Cloud lintas akun atau wilayah
Pastikan kluster self-managed Anda menjalankan Kubernetes 1.6 atau lebih baru.
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 pemilik 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 pemilik 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 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 gambar: Jalankan perintah berikut dan periksa bagian
Eventspada output untuk memastikan gambar kontainer berhasil ditarik.kubectl describe pod loongcollector-ds -n kube-system
Setelah komponen diinstal, SLS secara otomatis membuat resource berikut. Masuk ke Konsol Simple Log Service untuk melihatnya.
Jenis resource
Nama resource
Tujuan
Project
Nilai
projectNameyang Anda tentukan di filevalues.yamlUnit manajemen resource yang mengisolasi log layanan berbeda.
Machine group
k8s-group-${cluster_id}Kumpulan node pengumpulan log.
k8s-group-${cluster_id}-clusterMachine group untuk loongcollector-cluster, terutama digunakan untuk pengumpulan metrik.
k8s-group-${cluster_id}-singletonMachine group instans tunggal, terutama digunakan untuk konfigurasi pengumpulan instans tunggal.
Logstore
config-operation-logPentingJangan hapus logstore ini.
Menyimpan log komponen alibaba-log-controller dalam LoongCollector. Penagihannya sama seperti logstore standar. Untuk informasi selengkapnya, lihat Item penagihan untuk mode bayar-per-data-ditulis. Jangan buat konfigurasi pengumpulan di logstore ini.
Instal menggunakan pola sidecar
Gunakan pola sidecar untuk manajemen log detail halus, isolasi data multi-tenant, atau mengikat pengumpulan log ke siklus hidup aplikasi. Pola ini menyuntikkan kontainer LoongCollector (Logtail) terpisah ke dalam pod aplikasi untuk memungkinkan 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 dengan bagiancontainers:volumes: # Direktori log bersama (ditulis oleh kontainer aplikasi, dibaca oleh Sidecar) - name: ${shared_volume_name} # <-- Nama harus sama dengan nama di volumeMounts. emptyDir: {} # Direktori pensinyalan untuk komunikasi antar-kontainer (untuk mulai mulus dan berhenti) - name: tasksite emptyDir: medium: Memory # Gunakan memori sebagai media untuk performa lebih baik. sizeLimit: "50Mi" # Konfigurasi zona waktu host bersama: Sinkronkan zona waktu semua kontainer dalam pod. - name: tz-config # <-- Nama harus sama dengan nama di volumeMounts. hostPath: path: /usr/share/zoneinfo/Asia/Shanghai # Ubah zona waktu sesuai kebutuhan.Konfigurasikan mount volume untuk kontainer aplikasi
Di bagian
volumeMountskontainer aplikasi Anda, sepertiyour-business-app-container, tambahkan konfigurasi mount berikut:Pastikan kontainer aplikasi menulis log ke direktori
${shared_volume_path}agar LoongCollector dapat mengumpulkannya.volumeMounts: # Mount volume log bersama ke direktori output log aplikasi. - name: ${shared_volume_name} mountPath: ${shared_volume_path} # Contoh: /var/log/app # Mount direktori komunikasi. - name: tasksite mountPath: /tasksite # Direktori bersama untuk komunikasi dengan kontainer LoongCollector. # Mount file zona waktu. - name: tz-config mountPath: /etc/localtime readOnly: trueSuntikkan kontainer Sidecar LoongCollector
Di array
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 resource 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 full drain 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 # Mount volume (dibagi dengan kontainer aplikasi) volumeMounts: # Mount baca-saja direktori log aplikasi. - name: ${shared_volume_name} # <-- Nama direktori log bersama mountPath: ${dir_containing_your_files} # <-- Path direktori bersama di sidecar readOnly: true # Mount direktori komunikasi. - name: tasksite mountPath: /tasksite # Mount zona waktu. - name: tz-config mountPath: /etc/localtime readOnly: true
2. Ubah logika siklus hidup kontainer aplikasi
Bergantung pada jenis workload, Anda harus mengubah 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] Menangkap SIGTERM, memulai shutdown yang mulus..."
# Kirim sinyal QUIT ke Nginx untuk berhenti dengan mulus.
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Mengirim SIGQUIT ke Nginx PID: $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 bukan 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 berhenti mulus 10 menit
4. Deskripsi parameter
Variabel | Deskripsi |
| Atur ke ID Akun Alibaba Cloud Anda. Untuk informasi selengkapnya, lihat Konfigurasi pengenal pengguna. |
| Atur pengenal kustom untuk machine group guna membuat machine group kustom. Misalnya, Penting Pastikan pengenal ini unik dalam wilayah proyek Anda. |
| Tentukan berdasarkan wilayah proyek Simple Log Service dan jenis jaringan untuk akses. Untuk informasi tentang wilayah, lihat Wilayah layanan. Contoh: Jika proyek berada di wilayah Tiongkok (Hangzhou), gunakan |
| Atur nama kustom untuk volume. Penting Parameter |
| Atur path mount, yaitu 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>Lihat status pod untuk memastikan kontainer LoongCollector berhasil disuntikkan:
kubectl describe pod <YOUR-POD-NAME>Jika Anda melihat dua kontainer (kontainer aplikasi dan kontainer
loongcollector) dan statusnya normal, penyuntikan berhasil.
6. Buat machine group 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 machine group. 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 Identifier: Pilih Custom Identifier.
Custom Identifier: Masukkan nilai variabel lingkungan
ALIYUN_LOGTAIL_USER_DEFINED_IDyang Anda atur untuk kontainer LoongCollector di file YAML di 1. Ubah konfigurasi YAML pod aplikasi. Nilainya harus persis sama. Jika tidak, asosiasi akan gagal.
Periksa status heartbeat machine group: Setelah machine group dibuat, klik namanya dan lihat status heartbeat di area status.
OK: Menunjukkan bahwa LoongCollector berhasil terhubung ke SLS dan machine group terdaftar.
FAIL:
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 machine group Logtail untuk mendiagnosis masalah.
Setiap pod sesuai dengan instans LoongCollector terpisah. Gunakan pengenal kustom berbeda untuk aplikasi atau lingkungan berbeda guna memfasilitasi manajemen detail halus.
FAQ
Bagaimana cara mengubah konfigurasi LoongCollector untuk kluster ACK managed 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 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 machine group yang Anda buat di Langkah 3. ID harus persis sama.Ganti
${your_region_config}dengan nama konfigurasi yang sesuai dengan wilayah dan jenis jaringan proyek SLS 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 resource
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500"
memory: "512Mi"
# Mount 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 resource
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
# Mount 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 berhenti 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 mulai dan penanganan sinyal
command: ["/bin/sh", "-c"]
args:
- |
# Definisikan fungsi penanganan sinyal.
_term_handler() {
echo "[$(date)] [nginx-demo] Menangkap SIGTERM, memulai shutdown yang mulus..."
# Kirim sinyal QUIT ke Nginx untuk berhenti dengan mulus.
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Mengirim SIGQUIT ke Nginx PID: $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 bukan 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 resource
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
# Mount 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 resource
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 full drain 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
# Mount 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