Proyek DevOps: Buat Skrip Untuk Nunjukin Stats Performance Server

Status
Done
Created
May 3, 2025 03:07 PM
Tags

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
  1. Total penggunaan CPU (CPU Utilization)
  1. Total penggunaan memory (Free, Used dan persentasenya)
  1. Total penggunaan disk (Free, Used dan persentasenya)
  1. 5 proses dengan penggunaan CPU terbesar
  1. 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…

  1. Login ke server kita
  1. Buat satu file dengan nama server-stats.sh
    1. touch server-stats.sh
  1. Edit file dengan vim
    1. vim server-stats.sh
  1. Mulai mengedit file vim
    1. #!/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.
Command bawaan Linux top
Command bawaan Linux top
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)" . Dengan grep kita dapat memisahkan line tersebut
    • notion image
  • 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 kolom
      top -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 yaitufree . 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.
Command bawaan Linux free
Command bawaan Linux free
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.
notion image
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.

Stats Terkait Proses