Apa yang mau kita buat?
Di proyek ini gua akan buat satu skrip BASH untuk mendapatkan stats performance server. Di stats ini akan terdiri dari
- Total penggunaan CPU (CPU Utilization)
- Total penggunaan memory (Free, Used dan persentasenya)
- Total penggunaan disk (Free, Used dan persentasenya)
- 5 proses dengan penggunaan CPU terbesar
- 5 proses dengan penggunaan memory terbesar
Ekspetasi Hasil Akhirnya
Hasilnya kita harapin bakal seperti ini:
SERVER PERFORMANCE STATS CPU Stats system.cpu.utilization: 7.2% Memory Stats system.memory.free: 3.0G system.memory.used: 1.0G system.memory.used_pct: 25% Disk Stats system.disk.total.free: 20G system.disk.total.used: 20G system.disk.total.used_pct: 50% Process Stats process.top.cpu: [nginx, ssh, top, cat, tail] process.top.memory: [nginx, ssh, top, cat, tail]
Mulai Nulis Skrip…
- Login ke server kita
- Buat satu file dengan nama
server-stats.sh
touch server-stats.sh
- Edit file dengan vim
vim server-stats.sh
- Mulai mengedit file vim
#!/bin/bash
Mendapatkan Stats CPU
Untuk mendapatkan metrik terkait CPU, kita akan menggunakan command bawaan Linux yaitu
top
. Command ini bertujuan menampilkan informasi resource system dalam real-time.Salah satu informasi yang ditampilkan bawaan dari command
top
adalah persentase CPU idle, persentase CPU yang tidak digunakan. CPU utilization sederhananya adalah kebalikan dari CPU idle.Dengan kombinasi
top
, grep
, dan awk
. Kita membuat command berikut untuk mendapatkan metrik CPU utilization:top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}'
- Dengan
top -bn1
, kita menggunakan flag-bn1
supaya data top dicetak satu kali, bukan realtime
- Dari hasil tampilan
top
, kita mengidentifikasi data CPU berada pada kolom dengan identifier string"CPU(s)"
. Dengangrep
kita dapat memisahkan line tersebut
- Terakhir dengan command
awk
kita bisa mengidentifikasi lebih dalam satu line yaitu kolom dimana angka CPU idle berada. Perlu diketahui setiap kolom dihitung dipisah berdasar whitespace (kolom pertama “%Cpu(s):”
Jika ingin
Kalo penasaran kalian bisa coba gunakan iterasi pada
awk
untuk mencetak setiap kolomtop -bn1 | grep "Cpu(s)" | awk '{for(i=1;i<=NF;i++) print $i}'
Dapet deh satu command untuk dapetin angka CPU utilization. Next kita dapetin stats memory.
Mendapatkan Stats Memory
Untuk mendapatkan metrik terkait CPU, kita akan menggunakan command bawaan Linux yaitu
free
. Command ini bertujuan menampikan informasi penggunaan memory pada system. Udah lengkap nih semua yang kita butuhin, penggunaan memory, memory yang masih free, bahkan total kapasitas memory system.Untuk dapetin tiga metrik memory, Free, Used, dan persentasenya, kita cukup pakai
awk
saja dengan mencocokan pola Mem:
dan mendapat kolom ke 4, ke 3, dan ke 2.# Stats memory free: free | awk '/Mem:/ {print $4}' # Stats memory used: free | awk '/Mem:/ {print $3}' # Stats memory total: free | awk '/Mem:/ {print $2}' # Stats memory percentage: free | awk '/Mem:/ {printf "%.0f", $3/$2 * 100}'
Tinggal mainin command
awk
saja sebenarnya, manipilasi hasil pencocokan polanya.Mendapatkan Stats Disk
Untuk mendapatkan metrik terkait disk, kita akna menggunakan command bawaan Linux yaitu
df
. Command ini dapat menunjukkan rincian setiap partisi disk dengna masing-masing ditampilkan kapasitas total disk, penggunaan disk, kapasitas yang masih tersedia, hingga persentase penggunaannya sudah rapih. Kemudian supaya kita mendapatkan satu baris yang mengtotal semua partisi, kita tambahkan flag --total
pada command dan flag --human
supaya angka dapat mudah dibaca.Kalo udah ada satu baris yang ditargetin gampang, kita bisa pake kombinasi
grep
dan awk
dan ambil kolom yang ditargetin.# Disk Used df --total --human | grep total | awk '{print $3}') # Disk Free df --total --human | grep total | awk '{print $4}' # Disk Used Percentage df --total --human | grep total | awk '{print $5}'
Terakhir kita get stats terkait proses.