CPU Kullanımına Göre Log Tutma

Share

Öncelikle sistemde oluşan yüksek kullanımları en kısa yolla tespit etmek için hangi uygulamaların bu yüksek kullanıma neden olduğunu öğrenmek için herhangi bir araç kullanmadan pratik çözümle tespit etmek için böyle bir script yazdık.

Neden Yüksek Kaynak Tüketiminde Loglar Önemlidir?

CPU yoğun kullanımı logları sistem ve uygulama performansının takibinde ve analizinde önemli rol oynar. Bunlar sistemdeki sorunların ve performans bozukluklarının nedenini belirlemede, bellek kullanımı ve işlem sayısı gibi sistem kaynaklarının etkin kullanımını gözlemleyebilmede ve optimize edilmesine yardımcı olabilmede önemli bilgiler sağlar. Ayrıca, sistem hataları ve güvenlik açıklarının belirlenmesinde de yardımcı olabilir.

CPU Kullanımı %60 Üzerinde Log Toplama

CPU kullanımımız %60’ın üzerine çıktığında log alma scriptimizi aşağıdaki şekilde yapılandırıp çalışmasını sağlıyoruz;

  • Öncelikle sh dosyamızı oluşturuyoruz.
touch /home/logs/high-cpu-usage.sh
  • Oluşturduğumuz sh dosyasını üzenlemek için nano editörü ile açıyoruz.
nano /home/logs/high-cpu-usage.sh
  • Gerekli script (Açıklamaları tek tek altında)
b="$(vmstat 1 2|tail -1|awk '{print $15}')"
a=60
c=100
s=`expr $c - $b`
DATE1=$(date)
DATE2=$(date +%d-%b-%Y)
mkdir /home/logs/warnings/cpu-usage-errors/"$DATE2"
if [ "$s" -ge "$a" ]; then
	ps -a -e -o user,pid,cmd,%cpu,%mem --sort=-%cpu | head -n 30000 >> /home/logs/warnings/cpu-usage-errors/"$tarih"/"$DATE1".txt
else
	break;
fi

Script Açıklamaları

  • b değişkenine anlık olarak CPU kullanım oranını aktarıyoruz.
b="$(vmstat 1 2|tail -1|awk '{print $15}')"
  • s değişkenine 100’den anlık olarak CPU oranını çıkartıp elde ettiğimiz oranı aktarıyoruz.
s=`expr $c - $b`
  • DATE1 değişkenine anlık tarih formatını bütünüyle alıyoruz. (dosya isimlemede kullanacağız)
DATE1=$(date)
  • DATE2 değişkenine sadece gün-ay-yıl formatında anlık tarihi alıyoruz. (Klasör isimlemede kullanacağız)
DATE2=$(date +%d-%b-%Y)
  • Belirttiğimiz dizinde alınan logların tutulması için gün-ay-yıl formatı adında klasör oluşturuyoruz.
mkdir /home/logs/warnings/cpu-usage-errors/"$DATE2"
  • Anlık CPU kullanımının 60’dan fazla olma durumunu sorguluyoruz.
  • ps komutunu istediğimiz değerler ile özelleştirip elde edilen anlık değerleri belirtilen dizinde txt oluşturarak içerisine kaydediyoruz.
  • Eğer %60’dan düşük bir oran elde edersek sorguyu sonlandırıyoruz.
if [ "$s" -ge "$a" ]; then
	ps -a -e -o user,pid,cmd,%cpu,%mem --sort=-%cpu | head -n 30000 >> /home/logs/warnings/cpu-usage-errors/"$tarih"/"$DATE1".txt
else
	break;
fi

Cronjob ile Script Çalıştırma

Oluşturduğumuz scripti dakikada bir defa çalışacak şekilde cron kurmamız gerekiyor. Böylece her dakika CPU kullanımını ölçerek gerekli logların tutulmasını sağlayacağız.

  • crontab -e ile cron tablosunu düzenlemek için açıyoruz.
crontab -e
  • cron tablosuna her dakika oluşturduğumuz scripti tetiklemesi için aşağıdaki komutu giriyoruz.
* * * * * sh /home/logs/high-cpu-usage.sh

Bütün işlemleri tamamladıktan sonra her dakika oluşturduğumuz script tetiklenecek ve belirttiğimiz dizinde (/home/logs/warnings/cpu-usage-errors/”$tarih”/$) belirtilen tarihlerde anlık olarak kullanılan uygulamaları ve bunların tüketimlerinin loglarını kaydedecek.


Böylece 7/24 sistemimizde %60’ın üzerinde bir CPU kullanımı olduğunda kolaylıklara loglardan hangi uygulamanın buna sebep olduğunu tespit etmemiz kolaylaşacak.

Crontab ile ilgili daha fazla bilgi edinmek için Linux Planlanmış Görevler ve Cron Servisi yazımdan faydalanabilirsiniz.