Stern adalah alat sumber terbuka yang memudahkan streaming log Kubernetes secara real-time ke terminal Anda. Anda dapat menggunakan Stern untuk memantau log dari beberapa container secara bersamaan, memberikan Anda tampilan gabungan aktivitas di dalam Pods.
Mengapa Menggunakan Stern?
Kubectl menawarkan tailing log bawaan menggunakan perintah kubectl logs. Meskipun ini dapat bekerja dengan baik dalam kasus-kasus sederhana, ia tidak memiliki dukungan untuk menggabungkan log dari berbagai sumber dengan penyaringan hasil lebih lanjut. Hal ini dapat menyulitkan untuk digunakan saat Anda perlu memantau beberapa Pod atau Anda sedang bekerja dengan data verbose.
Stern menawarkan pengalaman log Kubernetes dengan dukungan kelas satu untuk beberapa Pod dan container. Setiap wadah di aliran log Anda diwarnai secara unik sehingga Anda dapat dengan cepat mengidentifikasi garis yang bergulir di depan Anda. Stern memungkinkan Anda memilih Pod untuk disertakan menggunakan kueri kompleks yang dibuat dari ekspresi reguler.
Ada juga kemampuan pemfilteran terintegrasi untuk memilih log berdasarkan stempel waktu, status penampung, dan pemilih Kubernetes. Dalam artikel ini, kami akan menunjukkan cara menggunakan semua fitur ini untuk mempercepat akses ke log Kubernetes Anda.
Memulai
Stern didistribusikan sebagai biner pra-kompilasi untuk Windows, macOS, dan Linux di halaman rilis GitHub proyek. Pilih unduhan yang sesuai untuk sistem Anda dan tambahkan biner ke PATH Anda. pengguna macOS dapat memilih untuk menginstal melalui Homebrew sebagai gantinya dengan menjalankan brew install stern.
Stern menggunakan file konfigurasi Kubernetes yang ada untuk terhubung ke cluster Anda. Ini akan menjadi default untuk memuat .kube/config. Gunakan flag --kubeconfig atau atur variabel lingkungan KUEBCONFIG jika Anda perlu mengubah path ini. Konteks
Kubernetes juga didukung dengan mulus. Tambahkan flag --context untuk menentukan konteks tertentu dalam file konfigurasi Anda yang sedang dimuat. Anda juga dapat menggunakan flag --namespace untuk secara manual memilih namespace di cluster Anda. Stern hanya akan mengekor log dari objek dalam konteks dan ruang nama yang ditunjukkan; flag --all-namespaces dapat digunakan untuk melakukan streaming log dari keseluruhan cluster.
Basic Usage
Stern sintaks dasar hanya membutuhkan satu argumen:
stern api-server
Supply nama Pod untuk melakukan streaming log yang berasal dari container di Pod tersebut. Penggunaan ini memungkiri kekuatan sejati Stern; nama Pod hanyalah salah satu contoh dari sebuah pod query.
Pod Queries
Stern menggunakan kueri Pod untuk menentukan aliran log ke permukaan. Query adalah ekspresi reguler sehingga Anda dapat merakit Pod pilihan lanjutan menggunakan sintaks standar.
Contoh server api buritan di atas akan cocok dengan setiap Pod yang berisi api-server dalam namanya. Jika Anda mengubah ini menjadi .*-server buritan, Anda akan melihat log yang berasal dari semua Pod Anda dengan nama yang diakhiri dengan -server. Ini memungkinkan Anda dengan cepat merakit aliran log yang menggabungkan garis dari beberapa komponen di stack.
Queries Anda hanya memengaruhi Pod yang dipilih. Stern secara otomatis menyertakan log dari semua container di dalam Pod tersebut. Anda dapat mengontrol ini menggunakan flag --container opsional yang menerima regex lain yang mendefinisikan nama container yang dapat diterima untuk disertakan.
stern .*-server --container .*-0
Demikian pula, Anda dapat mengecualikan container tertentu menggunakan flag --exclude-container dan a regex:
stern .*-server --exclude-container .*-helper
Label pemilih juga didukung. Atur flag --selector dengan label yang mendefinisikan regex agar cocok dengan Pod. Ini default ke .*, termasuk semua Pod yang cocok dengan query asli.
stern .*-server --selector app-version=v1.*Filtering Berdasarkan Container State
Stern defaultnya hanya menampilkan log dari container yang sedang berjalan. Gunakan flag --container-state untuk mendapatkan baris yang dicatat oleh container dalam status berbeda. Ini mendukung parameter yang sedang berjalan, menunggu, dan dihentikan:
# Tampilkan log dari peti kemas yang dihentikan buritan .*-server --container-state stopsFiltering Individual Log Lines
Setelah Anda memilih kumpulan Pod dan container yang tepat, Anda dapat beralih ke penyaringan yang sebenarnya mencatat data. Stern memberi Anda beberapa opsi untuk mengurangi kebisingan dan membantu Anda fokus pada data yang bermakna:
--sejak – Dapatkan log yang ditulis dalam jangka waktu relatif yang dapat dibaca manusia, sejak 5m atau 1j.--tail – Dapatkan banyak baris log ini untuk mulai dengan. Default ke -1 (tanpa batas), jadi terminal Anda diisi dengan semua log yang sudah ada sebelum keluaran live tailed dimulai.--exclude – Kecualikan baris log yang cocok dengan ekspresi reguler ini. Anda dapat menggunakan tanda ini beberapa kali; kondisi akan digabungkan sebagai klausa "dan" logis.
Berikut adalah contoh pengambilan pilihan terbatas dari log bermakna terbaru dari layanan web: server web
stern --sejak 1 jam --tail 100 --exclude .*GET /robots .txt.*Menggunakan Output Templates
Stern biasanya menampilkan baris log menggunakan format berikut:
Format ini dapat disesuaikan menggunakan flag --template. Sintaks templating Go didukung untuk mengakses variabel Namespace, PodName, ContainerName, dan Message di dalam formatter Anda:
stern .*-server --template `Namespace: {{.Namespace}} Pod: {{.PodName}} - {{. Message}}`
Terkadang Anda mungkin ingin membaca baris log tanpa pemformatan tambahan. Menggunakan --output raw akan menampilkan pesan biasa apa adanya, menghasilkan keluaran yang mirip dengan Kubectl.
Opsi alternatifnya adalah --output json untuk mendapatkan data log dalam format yang lebih cocok untuk konsumsi terprogram. Ini akan memancarkan aliran objek JSON dengan properti pesan, namespace, podName, dan containerName.
Stern dapat secara otomatis menambahkan stempel waktu ke setiap baris log jika Anda menyertakan tanda --timestamps. Ini tidak aktif secara default karena banyak server populer menambahkan informasi ini sendiri, sebelum pesan dipancarkan.
Akhirnya, Stern mendukung flag --color yang dapat digunakan untuk memaksa atau menonaktifkan penggunaan keluaran berwarna. Ia menerima otomatis, tidak pernah, atau selalu sebagai nilainya. Opsi terakhir berguna jika program tidak mendeteksi dengan benar TTY.
Kesimpulan
Stern shell Anda adalah alat praktis Kubernetes yang membuat log Pod lebih berguna dan mudah diakses. Anda dapat dengan mudah mengawasi beberapa Pod dan container dengan output berwarna, pemilih kompleks, dan format output yang dapat disesuaikan.
Stern dirancang untuk tailing log real-time sebagai bagian dari proses debugging atau pemantauan aktif. Jika Anda mencari agregasi, pengindeksan, dan penyimpanan jangka panjang, biasanya yang terbaik adalah mengintegrasikan sistem observabilitas khusus dengan cluster Anda. Platform seperti Prometheus dan Elastic Stack menyediakan kemampuan inspeksi historis untuk meningkatkan aliran log langsung yang ditunjukkan oleh Stern.
Itulah berita seputar
Cara Memantau Log Pod Kubernetes Secara Real-Time Dengan Stern, semoga bermanfaat.
Disadur dari HowToGeek.com.