BerandaComputers and TechnologyMenekan API prometheus dengan curl dan jq untuk men-debug OOM

Menekan API prometheus dengan curl dan jq untuk men-debug OOM

Situasi, prometheus memberi tahu kehabisan memori pada cluster kubernetes. Email peringatan host merah masuk ke kotak masuk semua orang. Tim operasi khusus (err dev ops) dikirim untuk menyelidiki. Anda login ke node kubernetes dan menemukan banyak peringatan OOM level kernel seperti

  $ journalctl --since today | grep "dipanggil oom-killer" 20 Okt 17:02:07 Kernel myhost:  gunicorn  memanggil oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=936 20 Okt 17:07:51 kernel myhost:  java  memanggil oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=994  

Baiklah, sepertinya kubernetes node kehabisan memori dan kernel harus memanggil OOM killer untuk menyingkirkannya dari beberapa proses. Salah satu alasan hal ini bisa terjadi, adalah ketika cluster overcommitted. Ketika banyak proses mengatakan saya hanya butuh 100Mi RAM, tetapi kenyataannya mengkonsumsi 1Gi, itu bisa menyebabkan apa yang kita lihat.

Berbekal ilmu itu, kita terjun ke grafana tekan tombol jelajahi dan buat kueri yang sempurna untuk mendapatkan wadah yang melanggar. Menyinggung di sini artinya, container yang telah Digunakan / Diperlukan RAM yang lebih besar dari satu. Semakin tinggi angkanya, semakin buruk situasinya! Mari kita lihat kueri ini

  sort_desc (sum (container_memory_working_set_bytes) oleh (container_name, namespace) / sum (label_join (kube_pod_container_resource_requests_memory_bytes, "container_name", "", "container")) oleh (container_name, namespace)> 1)  

Ya! Itulah yang diperlukan untuk menginterogasi prometheus. Kami melakukannya dengan mudah, bukan! Jadi, ini memberi Anda apa yang Anda cari. Kecuali saya ingin data dalam file saya dapat dengan mudah email ke orang! Saya mencoba semua jenis voodoo untuk diekspor atau bahkan salin dan tempel dari UI web grafana atau prometheus meskipun tidak berhasil!

Jadi, saya membawa senjata besar. Saya akan membuka API secara langsung dan memijat data menjadi file csv kecil yang bagus yang dapat dibuka oleh excel, sehingga pengembang saya dapat dengan mudah memeriksa penggunaannya. Enam belas jam kemudian, inilah keajaiban curl + jq yang dibutuhkan;)

  curl -fs --data-urlencode 'query=sort_desc (jumlah (container_memory_working_set_bytes) oleh (container_name, namespace) / sum (label_join (kube_pod_container_resource_requests_memory_bytes, "container_name", "", "container")) oleh (container_name, namespace)> 1) 'https: // prometheus / api / v1 / kueri | jq -r '.data.result [] | [.metric.container_name, .metric.namespace, .value[1]] | @sv ' 

Selesai. Kami memasuki prometheus API dengan kueri dari sebelumnya. Outputnya disalurkan ke jq (the json swiss army knife!), Di mana kita membuka wadah `.data.result` lalu mengekstrak metrik dan nilai yang menarik (tanpa waktu), dan terakhir meminta jq untuk memformat dengan sopan sebagai csv. Alihkan output itu ke dalam file, dan excel dapat dengan mudah membukanya, menghasilkan sesuatu seperti

Ya, 19 di atas berarti aplikasi sebenarnya menggunakan memori 19 kali lebih banyak daripada yang diminta dalam file kubernetes yaml-nya. Ini sebenarnya berarti nilai resource.requests.memory sangat tidak akurat dan perlu disesuaikan untuk menghindari masalah di masa mendatang!

Kami ingin membuatnya tetap singkat dan langsung pada intinya. Tekan tombol berlangganan di atas untuk bergabung dengan komunitas ini dan menerima konten khusus anggota. Kami terdiri dari pengembang dan operasi orang-orang yang menyukai Kubernetes, Openshift, dan hal-hal terkait cloud!

Tinggalkan komentar

Hai, saya bersedia untuk berkonsultasi, klik tombol di bawah untuk mengirimi saya email

Email aku

Bagikan

Read More

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments