Menjalankan kubectl logs
menunjukkan kepada saya stderr / stdout dari satu container Kubernetes.
Bagaimana saya bisa mendapatkan stderr / stdout gabungan dari satu set pod, sebaiknya yang dibuat oleh pengontrol replikasi tertentu?
logging
kubernetes
google-kubernetes-engine
Torsten Bronger
sumber
sumber
Jawaban:
Anda bisa menggunakan label
sumber
--all-namespaces
.-f
sekarang (mulai Kubernetes 1.12+ /kubectl
1.12+). Juga @Shubham - ini menampilkan pesan dalam urutan yang diterima, tidak ada tag atau apapun di baris log. Ini hanya untuk debugging cepat. Jika Anda membutuhkan lebih banyak detail log, Anda harus mengirimkan log Anda ke sistem logging pusat seperti EFK, SumoLogic, Datadog, dll.Saya telah membuat skrip bash kecil yang disebut
kubetail
yang memungkinkan hal ini. Misalnya, untuk mengikuti semua log untuk pod bernama "app1", Anda dapat melakukan:Anda dapat menemukan skripnya di sini .
sumber
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
dokumentasi mendetail:kt -h
Luar biasa!Anda bisa mendapatkan log dari beberapa kontainer menggunakan label seperti yang disarankan Adrian Ng:
Jika Anda memiliki pod dengan banyak container, perintah di atas akan gagal dan Anda harus menentukan nama container:
Catatan: Jika Anda ingin melihat label mana yang tersedia untuk Anda, perintah berikut akan mencantumkan semuanya:
... di mana hasilnya akan terlihat seperti ini
Perhatikan bahwa beberapa label mungkin tidak dibagikan oleh pod lain - memilih "app" sepertinya yang paling mudah
sumber
Untuk membangun jawaban sebelumnya jika Anda menambahkan
-f
Anda dapat mengikuti log.sumber
Solusi yang diberikan sebelumnya tidak begitu optimal. Tim kubernetes sendiri sudah memberikan solusi beberapa waktu yang lalu yaitu stern.
Ini juga cocok dengan ekspresi reguler dan melakukan tail dan -f (follow) secara default. Manfaat yang bagus adalah, ini menunjukkan kepada Anda pod yang menghasilkan log juga.
Ambil go-binary untuk linux atau instal via brew untuk OSX.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
sumber
Saya menggunakan skrip sederhana ini untuk mendapatkan log dari pod penerapan:
Inti dari skrip
Penggunaan: log_deployment.sh "nama-penerapan".
Kemudian skrip akan menampilkan log dari semua pod yang dimulai dengan "nama-penerapan" itu.
sumber
Salah satu opsinya adalah menyiapkan pencatatan cluster melalui Fluentd / ElasticSearch seperti yang dijelaskan di https://kubernetes.io/docs/user-guide/logging/elasticsearch/ . Setelah log berada di ES, mudah untuk menerapkan filter di Kibana untuk melihat log dari penampung tertentu.
sumber
Anda bisa mendapatkan bantuan dari
kubectl logs -h
dan sesuai infonya,-c
adalah nama penampung dan--tail
akan menampilkan baris nomor terbaru , tetapi ini akan memilih satu pod dari penerapan, tidak semua pod. Ini adalah sesuatu yang harus Anda ingat.Jika Anda ingin menampilkan log dari semua pod, Anda dapat menggunakan
-l
dan menentukan label, tetapi pada saat yang sama-f
tidak akan digunakan.sumber
Anda juga dapat melakukan ini dengan nama layanan.
Pertama, coba temukan nama layanan dari masing-masing pod yang sesuai dengan beberapa pod dari layanan yang sama.
kubectl get svc
.Selanjutnya, jalankan perintah berikut untuk menampilkan log dari setiap penampung.
sumber
Dalam contoh ini, Anda bisa mengganti
<namespace>
dan<app-name>
untuk mendapatkan log ketika ada beberapa Container yang ditentukan dalam sebuah Pod.sumber
Jika pod diberi nama secara bermakna, seseorang dapat menggunakan Plain Old Bash sederhana:
Penjelasan: Perulangan melalui pod yang berjalan dengan nama yang mengandung "nodejs". Ekor log untuk masing-masing pod secara paralel (simbol ampersand tunggal berjalan di latar belakang) untuk memastikan bahwa jika ada pod yang gagal, seluruh perintah akan keluar (ampersand ganda). Cat aliran dari setiap perintah ekor menjadi aliran yang unik. Evaluasi diperlukan untuk menjalankan perintah yang dibuat secara dinamis ini.
sumber
Saya menggunakan perintah ini.
sumber
Tidak yakin apakah ini hal baru, tetapi dengan penerapan dimungkinkan untuk melakukannya seperti ini:
sumber