Dokumen ini menjelaskan cara menggunakan Alibaba Cloud Simple Log Service (SLS) dan kolektornya, LoongCollector, untuk mengumpulkan, memproses, dan menganalisis log kontainer Kubernetes secara efisien. Dokumen ini mencakup prinsip inti, proses utama, panduan pemilihan, praktik terbaik, serta menyediakan tautan ke dokumen operasional terperinci.
Fitur
Simple Log Service menyediakan kemampuan inti berikut untuk pengumpulan log kontainer Kubernetes:
Sumber log ganda
Tipe log: Standard output (stdout), standard error (stderr), dan file log teks kontainer.
Filtering kontainer tingkat granular
Tentukan atau kecualikan kontainer dari pengumpulan berdasarkan namespace, nama pod, nama kontainer, label kontainer, atau variabel lingkungan.
Pemrosesan log kompleks
Kumpulkan log multi-baris: Kenali entri log yang membentang di beberapa baris, seperti stack trace exception Java, dan proses sebagai satu event log tunggal. Hal ini mencegah log terpisah secara salah oleh line feed.
Pra-proses log: Gunakan plugin seperti filter plugin untuk menyaring data tidak valid pada kolektor. Gunakan plugin penyembunyian log dan ekstraksi field untuk mencegah log mentah terekspos.
Uraikan dan strukturkan field: Gunakan plugin parsing untuk ekspresi reguler, JSON, atau pemisah guna mengurai log mentah sebelum disimpan.
Asosiasi metadata cerdas
Saat melaporkan log kontainer, LoongCollector secara otomatis mengasosiasikan metadata seperti nama kontainer, citra, pod, namespace, dan variabel lingkungan.
Jaminan keandalan
Mekanisme checkpoint mencatat posisi pengumpulan saat ini untuk menjamin integritas log.
SLS menyediakan strategi berbeda untuk menangani log saat kontainer berhenti berdasarkan runtime kontainer.
Batasan
Runtime kontainer: Hanya Docker dan Containerd yang didukung.
Docker:
Memerlukan izin akses ke docker.sock.
Pengumpulan standard output hanya mendukung driver logging JSON.
Hanya driver penyimpanan overlay dan overlay2 yang didukung. Untuk driver penyimpanan lain, Anda harus memasang direktori log sebagai volume.
Containerd:
Memerlukan izin akses ke containerd.sock.
Batasan log multi-baris:
Untuk mencegah entri log multi-baris terpisah karena latensi output, baris log terakhir yang dikumpulkan di-cache selama periode tertentu. Waktu cache default adalah 3 detik. Anda dapat mengubah waktu ini menggunakan parameter
BeginLineTimeoutMs. Untuk mencegah pemisahan salah, nilainya harus minimal 1.000 milidetik.Standard output:
Ukuran maksimum untuk satu entri log: Defaultnya 524.288 byte (512 KB), dan maksimum 8.388.608 byte (8 MB). Jika satu entri log melebihi 524.288 byte, Anda dapat mengubah batas tersebut dengan menambahkan variabel lingkungan
max_read_buffer_sizeke kontainer LoongCollector.PentingJangan aktifkan standard output dan standard error secara bersamaan. Hal ini dapat menyebabkan pengumpulan log tidak berurutan.
Ikhtisar proses pengumpulan
Login ke kluster dan siapkan sumber log: Siapkan log standard output atau file log teks untuk dikumpulkan.
Instal kolektor LoongCollector: Instal LoongCollector, yang digunakan oleh SLS untuk mengumpulkan dan mengirimkan log.
Konfigurasikan aturan pengumpulan dan plugin parsing: Tentukan aturan untuk pengumpulan log.
Kueri dan analisis log: Kueri log yang telah dikumpulkan untuk menganalisis status bisnis Anda.
Deskripsi proses utama
Persyaratan sumber log dan titik pemasangan (Penting)
Untuk log standard output, LoongCollector secara otomatis mengidentifikasi path file berdasarkan metadata kontainer.
Untuk file log teks kontainer, LoongCollector secara default memasang direktori root host ke direktori
/logtail_hostmiliknya sendiri, sehingga pemasangan manual tidak diperlukan. Jika Anda menggunakan titik pemasangan kustom, titik tersebut harus memenuhi persyaratan berikut:
Instal kolektor
Pilih mode penyebaran berdasarkan skenario Anda:
Mode penyebaran: SLS mendukung instalasi LoongCollector dalam mode DaemonSet atau Sidecar.
Mode penyebaran DaemonSet: Konfigurasikan sekali untuk secara otomatis menerapkan LoongCollector pada setiap node di dalam kluster. Ini merupakan mode yang direkomendasikan untuk sebagian besar skenario.
Jika Anda menggunakan mode DaemonSet, pilih metode penyebaran berdasarkan hubungan antara kluster Anda dan SLS.
Jika Anda menggunakan kluster ACK, komponen loongcollector-ds sudah terintegrasi. Untuk menyelesaikan instalasi, aktifkan komponen tersebut di Konsol ACK. Secara default, metode ini mengikat collector ke Akun Alibaba Cloud pemilik kluster ACK dan menyimpan log di instans SLS akun tersebut. Untuk informasi selengkapnya, lihat Install LoongCollector (Kubernetes).
Jika Anda menggunakan kluster ACK tetapi perlu mengumpulkan log-nya ke proyek SLS yang dimiliki oleh Akun Alibaba Cloud berbeda karena alasan seperti struktur organisasi, isolasi izin, atau Pemantauan terpadu, Anda harus menginstal komponen LoongCollector secara manual. Kemudian, konfigurasikan komponen tersebut dengan ID akun tujuan atau kredensial akses (AccessKey) untuk membuat asosiasi. Untuk informasi selengkapnya, lihat Install LoongCollector (Kubernetes).
Jika Anda menggunakan kluster yang dikelola sendiri, Anda harus menginstal komponen LoongCollector secara manual. Kemudian, konfigurasikan komponen tersebut dengan ID akun tujuan atau kredensial akses (AccessKey) untuk membuat asosiasi. Untuk informasi selengkapnya, lihat Install LoongCollector (Kubernetes).
Instalasi LoongCollector merupakan prasyarat untuk pengumpulan log. Untuk proses pengumpulan lengkap, termasuk instalasi LoongCollector, lihat Collect container logs from a Kubernetes cluster using a CRD (standard output/file).
Mode penyebaran Sidecar: Kontainer Sidecar LoongCollector disuntikkan ke setiap Pod bersama kontainer aplikasi. Mode ini melibatkan penyebaran serta operasi dan maintenance (O&M) yang lebih kompleks. Gunakan mode ini untuk pengumpulan log kontainer arsitektur tanpa server, ketika volume data Pod pada node tunggal melebihi batas pengumpulan DaemonSet, atau untuk pengumpulan log dari Kubernetes dengan runtime kontainer aman. Untuk informasi selengkapnya, lihat Collect text logs from a Kubernetes pod (Sidecar mode).
Konfigurasikan aturan pengumpulan
SLS menyediakan dua cara untuk menentukan aturan konfigurasi pengumpulan:
Metode konfigurasi | Fitur | Skenario | Catatan |
| Gunakan mode CRD untuk kluster produksi dan skenario yang mendukung otomatisasi CI/CD. |
| |
| Karena konfigurasi harus diasosiasikan satu per satu, metode ini cocok untuk kluster kecil, debugging sementara, dan lingkungan non-produksi. |
Konsep inti
Kubernetes: Kubernetes (K8s) adalah platform orkestrasi kontainer open-source yang mengotomatiskan deployment, penskalaan, dan manajemen aplikasi berkontainer. Kubernetes merupakan infrastruktur inti untuk pengembangan aplikasi cloud-native modern dan operasi serta maintenance (O&M).
Standard output, standard error, dan file log teks: Standard output (stdout) adalah informasi yang dicetak program selama operasi normal, seperti log bisnis dan catatan operasi. Informasi ini secara default dioutput ke terminal dan ditangkap oleh engine kontainer untuk disimpan. Standard error (stderr) adalah informasi error atau peringatan dari program, seperti stack trace exception dan alasan kegagalan startup. Informasi ini juga ditangkap oleh engine kontainer dan dapat bercampur dengan stdout. File log teks adalah log yang ditulis aplikasi ke file, seperti
access.logNginx atau file log kustom. Log ini ditulis langsung ke sistem file internal kontainer dan dihapus saat kontainer dihapus. Anda dapat menggunakan volume untuk persistensi.Mekanisme checkpoint: Checkpoint mencatat posisi terakhir yang dikumpulkan dalam file. Secara default, checkpoint disimpan di
/tmp/logtail_checkpoint. Mekanisme ini menjamin keandalan pengumpulan log jika LoongCollector restart atau terjadi kegagalan node.LoongCollector (Logtail): Kolektor log berkinerja tinggi yang dikembangkan oleh Alibaba Cloud. Mendukung mode penyebaran DaemonSet dan Sidecar di Kubernetes. LoongCollector adalah versi peningkatan dari Logtail dan kompatibel dengan semua fitur Logtail.
Kubernetes CRD: CustomResourceDefinition (CRD) adalah mekanisme Kubernetes yang memungkinkan pengguna mendefinisikan resource kustom dan membuat instance untuk konfigurasi. Tipe resource kustom yang disediakan oleh SLS adalah AliyunPipelineConfig.
Konfigurasi pengumpulan: Menentukan aturan untuk pengumpulan log, termasuk tipe log, path pengumpulan, filtering log, parsing konten, dan lokasi penyimpanan di Simple Log Service. Untuk informasi lebih lanjut, lihat Apa itu konfigurasi pengumpulan LoongCollector?.
Plugin parsing: Digunakan dalam konfigurasi plugin prosesor dari konfigurasi pengumpulan. SLS menyediakan beberapa unit pemrosesan untuk menyusun, memisahkan, menyaring, dan menyembunyikan konten log. Unit-unit ini mendukung berbagai mode pemrosesan, seperti ekspresi reguler, pemisah, JSON, dan multi-baris.
Cara kerja pengumpulan log
Pengguna membuat custom resource (CR) menggunakan kubectl untuk menentukan aturan pengumpulan.
loongcollector-operator terus-menerus mendengarkan perubahan CR di kluster.
Saat perubahan CR terdeteksi, operator mengonversinya menjadi konfigurasi spesifik dan mengirimkannya ke SLS.
LoongCollector secara berkala mengirim heartbeat ke SLS untuk mengambil pembaruan konfigurasi. LoongCollector menarik konfigurasi pengumpulan terbaru dan melakukan hot-reload.
loongcollector-ds mengumpulkan log berdasarkan konfigurasi terbaru dan mengirimkannya ke SLS melalui titik akhir yang dikonfigurasi.
Cara kerja mode DaemonSet
LoongCollector ditempatkan di setiap node kluster untuk mengumpulkan log dari semua kontainer di node tersebut. Mode ini memiliki O&M sederhana, konsumsi resource rendah, dan konfigurasi fleksibel. Namun, isolasinya lemah.
Cara kerja mode Sidecar
Kontainer Sidecar LoongCollector disuntikkan ke setiap pod bersama kontainer aplikasi. Direktori log kontainer aplikasi dipasang sebagai volume bersama menggunakan volume Kubernetes, seperti emptyDir, hostPath, atau persistent volume (PV). Hal ini membuat file log tersedia di path pemasangan kedua kontainer—aplikasi dan Sidecar—sehingga LoongCollector dapat membacanya langsung. Mode ini memiliki isolasi data multi-tenant dan performa yang baik. Namun, mode ini mengonsumsi lebih banyak resource dan lebih kompleks untuk dikonfigurasi serta dipelihara.
Cara kerja discovery kontainer
Agar kontainer LoongCollector dapat mengumpulkan log dari kontainer lain, ia harus menemukan dan mengidentifikasi kontainer mana yang sedang berjalan. Proses ini disebut discovery kontainer.
Selama fase discovery kontainer, kontainer LoongCollector tidak berkomunikasi dengan kube-apiserver kluster Kubernetes. Sebaliknya, ia berkomunikasi langsung dengan daemon runtime kontainer di node untuk mengambil informasi tentang semua kontainer di node tersebut. Hal ini menghindari tekanan pada kube-apiserver kluster.
LoongCollector dapat mengambil informasi konteks kontainer dengan mengakses file sock runtime kontainer, seperti Docker Engine atau Containerd, di host. LoongCollector mendukung penentuan atau pengecualian kontainer untuk pengumpulan log berdasarkan kriteria seperti nama namespace, nama pod, label pod, dan variabel lingkungan kontainer.
Pengumpulan standard output
LoongCollector secara otomatis mengidentifikasi API atau driver logging runtime kontainer berbeda, seperti Docker dan Containerd, berdasarkan metadata kontainer. Tidak diperlukan konfigurasi manual. LoongCollector langsung membaca aliran standard output semua kontainer tanpa mengakses sistem file internal mereka.
Saat mengumpulkan standard output kontainer, LoongCollector secara berkala menyimpan progres pengumpulan ke file checkpoint. Jika LoongCollector berhenti lalu restart, pengumpulan dilanjutkan dari posisi terakhir yang disimpan.
Pengumpulan log file teks kontainer
Kubernetes mengisolasi sistem file kontainer, sehingga kolektor tidak dapat langsung mengakses file di kontainer lain. Namun, sistem file kontainer dipasang dari sistem file host. Anda dapat memasang sistem file root host ke kontainer LoongCollector untuk mengakses file apa pun di host. Hal ini memungkinkan Anda mengumpulkan file dari sistem file kontainer aplikasi secara tidak langsung.
Secara default, LoongCollector memasang sistem file direktori root host ke direktori
/logtail_hostmiliknya sendiri. Pemasangan manual tidak diperlukan. Misalnya, jika path file log di dalam kontainer adalah/log/app.log, dan path yang dipetakan di host adalah/var/lib/docker/containers/<container-id>/log/app.log, maka path aktual yang dikumpulkan LoongCollector adalah/logtail_host/var/lib/docker/containers/<container-id>/log/app.log.
Cara kerja pengenalan log multi-baris
Setiap baris log dicocokkan dengan ekspresi reguler kustom yang menentukan awal baris.
Jika ditemukan kecocokan, baris tersebut dianggap sebagai awal entri log baru, dan entri log baru dimulai.
Jika tidak ditemukan kecocokan, baris tersebut ditambahkan ke akhir entri log saat ini.
Saat baris lain yang cocok dengan ekspresi reguler awal-baris ditemukan, entri log saat ini dianggap selesai, dan entri baru dimulai.
Penanganan log saat kontainer berhenti
Runtime | Risiko latensi penghancuran kontainer | Integritas log | Saran optimasi |
Docker | Saat kontainer dihentikan, LoongCollector segera melepaskan handle file kontainer, memungkinkan kontainer keluar secara normal. | Jika pengumpulan tertunda sebelum kontainer berhenti karena latensi jaringan atau penggunaan resource tinggi, beberapa log sebelum penghentian mungkin hilang. | Tingkatkan frekuensi pengiriman log dengan mengurangi nilai |
Containerd | Jika pengumpulan tertunda karena latensi jaringan atau penggunaan resource tinggi, kontainer aplikasi mungkin tidak dihancurkan tepat waktu. | Saat kontainer dihentikan, LoongCollector terus memegang handle file di dalam kontainer (menjaga file log tetap terbuka) hingga seluruh konten file log telah dikirim. | Konfigurasikan |
Cara pengambilan metadata kontainer
Untuk mengambil metadata kontainer, LoongCollector berinteraksi langsung dengan runtime kontainer berdasarkan API Container Runtime Interface (CRI) standar. Hal ini memungkinkan LoongCollector mengambil berbagai jenis metadata di Kubernetes dan menerapkan fitur AutoTagging metadata Kubernetes secara non-intrusif selama pengumpulan. Mekanisme interaksi langsung dengan runtime ini meningkatkan pengambilan data real-time dan kemampuan mengelola status kontainer.
Docker: Klien Docker berkomunikasi dengan daemon Docker untuk langsung mendapatkan metadata kontainer. Hal ini memungkinkan pemantauan dan manajemen kontainer secara mendalam. Antarmuka utama yang digunakan meliputi:
ContainerList: Mengambil daftar kontainer yang sedang berjalan untuk mengidentifikasi kontainer di node saat ini.
ContainerInspect: Memberikan informasi detail untuk setiap kontainer, termasuk informasi kunci seperti konfigurasi dan status.
Events: Mendengarkan event perubahan kontainer secara real time untuk melacak siklus hidup kontainer dan memperbarui logika pemrosesan terkait.
Saat mengambil metadata kontainer melalui Klien Docker, informasi berikut penting:
LogPath: Ini adalah path penyimpanan file log standard output kontainer di host. Memfasilitasi pengumpulan dan analisis log.
GraphDriver.Data: Menyediakan path rootfs kontainer di node host. Path ini penting untuk memahami metode penyimpanan sistem file kontainer dan membantu diagnosis kesalahan serta optimasi performa.
Containerd: Melalui CRI, LoongCollector sepenuhnya mendukung berbagai skenario yang menggunakan lingkungan runtime containerd dan cri-o. LoongCollector dapat mengumpulkan dan mengambil metadata kontainer secara efisien terlepas dari apakah runtime dasarnya runc atau Kata Containers. Hal ini menjamin pengumpulan data log yang akurat dan terpadu terlepas dari lingkungan tempat kontainer berjalan, membantu Anda memantau dan menganalisis data log secara real time.
Metadata kontainer yang disediakan oleh CRI hanya mencakup path file log standard output kontainer di node host. Path Rootfs kontainer tidak dapat diperoleh secara langsung. Untuk mengatasi masalah ini, Anda dapat menggunakan salah satu solusi berikut:
Pencarian path file: Cari sistem file host untuk menemukan path Rootfs kontainer. Metode ini melibatkan traversal direktori file di host dan menggunakan identifier unik kontainer, seperti ID kontainer, untuk asosiasi dan pencarian. Hal ini memungkinkan Anda mengambil sistem file kontainer. Mekanisme pencarian dinamis ini dapat mengatasi masalah akibat informasi path yang hilang dan memberikan dukungan untuk pengumpulan dan pemantauan log selanjutnya.
Lewati CRI dan berinteraksi langsung dengan containerd: Berkomunikasi langsung dengan containerd untuk mengambil informasi kontainer yang lebih komprehensif dan akurat. Hal ini memungkinkan LoongCollector melewati keterbatasan CRI untuk mendapatkan path Rootfs kontainer dan metadata penting lainnya.
Praktik terbaik
Kueri dan analisis terpadu untuk log dari beberapa kluster atau lingkungan
Misalnya, untuk melakukan kueri dan analisis terpadu terhadap log dari kluster di lingkungan berbeda, seperti testing dan produksi, Anda dapat menggunakan salah satu dari tiga metode berikut:
Saat mengumpulkan data, simpan di Logstore yang sama. Tambahkan tag untuk membedakan lingkungan dengan mengikuti metode di Kumpulkan log kontainer dari kluster Kubernetes menggunakan konsol (standard output/file). Untuk melakukan kueri terpadu, Anda dapat langsung mengkueri dan menganalisis log di Logstore tersebut.
Saat mengumpulkan data, kumpulkan ke Logstore berbeda atau bahkan proyek di wilayah berbeda. Untuk melakukan kueri dan analisis terpadu, buat resource virtual StoreView untuk mengasosiasikan beberapa Logstore dalam kueri. Metode ini tidak menambah biaya penyimpanan ekstra, tetapi Anda hanya dapat mengkueri, bukan memodifikasi, data tersebut. Metode ini juga tidak mendukung pengaturan alert untuk pemantauan. Saat menggunakan metode ini, Anda dapat menggunakan field tag untuk menentukan asal Logstore log tersebut.
(Direkomendasikan) Saat mengumpulkan data, kumpulkan ke Logstore berbeda atau bahkan proyek di wilayah berbeda. Untuk melakukan kueri dan analisis terpadu, gunakan transformasi data untuk menyalin data terpilih dan menyimpannya di Logstore tertentu. Metode ini memungkinkan Anda mengurai dan memproses data terpilih sebelum menyimpannya dan mendukung pengaturan alert untuk pemantauan. Namun, fitur ini menimbulkan biaya tambahan.
Kumpulkan log dari sumber berbeda dengan satu konfigurasi
Satu konfigurasi pengumpulan saat ini tidak mendukung beberapa sumber. Untuk mengumpulkan log dari sumber berbeda, Anda harus mengonfigurasi beberapa konfigurasi pengumpulan.
Pengumpulan tingkat granular dan isolasi multitenancy
Dalam skenario multitenancy, Anda dapat mengonfigurasi konfigurasi pengumpulan berbeda untuk mengumpulkan data ke proyek berbeda demi isolasi. Data tidak dapat diakses langsung antar proyek berbeda. Anda juga dapat mengonfigurasi izin akses berbeda untuk proyek berbeda guna memenuhi persyaratan isolasi keamanan.
O&M otomatis dan integrasi CI/CD
Anda dapat menggunakan metode CRD untuk memasukkan konfigurasi pengumpulan ke dalam alur kerja GitOps atau Infrastructure as Code (IaC). Hal ini memungkinkan manajemen log pengumpulan secara batch, otomatis, dan dapat dilacak.