Febrio Widodo
Proyek sistem monitoring berbasis shell script ini dirancang untuk memudahkan pengguna dalam memantau kondisi performa sistem Linux secara real-time dan otomatis. Sistem ini menyediakan menu interaktif berbasis terminal dengan berbagai opsi seperti pengecekan penggunaan CPU, RAM, disk, uptime sistem, user login aktif, dan status layanan penting seperti SSH dan cron. Setiap fungsi yang dijalankan akan menampilkan informasi langsung di terminal serta mengirim notifikasi desktop sebagai bentuk peringatan atau informasi cepat kepada pengguna. Program ini juga dilengkapi ambang batas (threshold) untuk masing-masing sumber daya, sehingga pengguna mendapatkan notifikasi apabila terjadi penggunaan berlebih. Selain itu, fitur ringkasan sistem (system health check) memungkinkan seluruh informasi penting dapat diakses secara menyeluruh hanya dalam satu tampilan.
Proyek ini berawal dari pengalaman pribadi saya saat menggunakan Komputer tepatnya saat membuka virtual box linux saya sering tiba-tiba mengalami lag atau melambat tanpa sebab yang jelas. Padahal, saya tidak sedang menjalankan aplikasi berat atau membuka banyak program secara bersamaan. Kondisi ini cukup mengganggu, terutama saat sedang mengerjakan tugas atau aktivitas penting lainnya.
Karena penasaran, saya mencoba mencari tahu penyebabnya dengan melihat penggunaan CPU, RAM, dan disk melalui terminal Linux. Namun, melakukan pengecekan manual secara terus-menerus terasa tidak efisien dan cukup merepotkan. Dari situ muncul ide untuk membuat sebuah shell script sederhana yang dapat memantau performa sistem secara otomatis dan menampilkan informasi penting secara real-time.
Saya ingin memiliki alat bantu yang tidak hanya menampilkan kondisi sistem, tetapi juga mampu memberikan peringatan saat terjadi penggunaan sumber daya yang tinggi atau ketika layanan sistem penting seperti SSH dan cron tidak berjalan. Oleh karena itu, saya mengembangkan program monitoring ini dengan menu interaktif di terminal, yang tidak hanya praktis tetapi juga informatif.
Dalam pengelolaan sistem operasi, khususnya pada lingkungan berbasis Linux, pemantauan sumber daya seperti CPU, RAM, dan penggunaan disk memang menjadi aspek yang sangat krusial untuk menjaga stabilitas dan performa sistem. Ketika beban kerja meningkat atau terjadi gangguan layanan, administrator sistem dituntut untuk mengetahui kondisi sistem secara cepat dan akurat. Sayangnya, perangkat lunak pemantauan profesional sering kali membutuhkan konfigurasi yang kompleks dan tidak sesuai untuk kebutuhan dasar pengguna umum.
Shell script menjadi solusi yang tepat karena bersifat ringan, fleksibel, dan mudah dikembangkan. Dengan shell script, berbagai informasi penting dapat dikumpulkan secara otomatis dan ditampilkan langsung melalui antarmuka terminal. Selain itu, pengguna juga dapat menerima notifikasi jika penggunaan sumber daya melebihi ambang batas tertentu, sehingga potensi gangguan sistem dapat dideteksi lebih awal.
Berdasarkan latar belakang tersebut, proyek ini dibuat untuk merancang dan mengimplementasikan sistem monitoring sederhana yang dapat memantau kondisi CPU, RAM, disk, uptime, serta status layanan sistem secara otomatis, interaktif, dan efisien menggunakan shell script di lingkungan Linux.
1.Buat Direktori monitorSistem.sh
Direktori monitoring_sistem dibuat secara khusus sebagai tempat penyimpanan seluruh file yang berkaitan dengan proyek monitoring sistem berbasis shell script. Tujuan dari pembuatan direktori ini adalah untuk menjaga kerapihan struktur file, mempermudah pengelolaan kode program, serta menghindari tercampurnya file skrip dengan file lain di direktori utama. Dengan memiliki folder terpisah, proses pengembangan, pengujian, dan dokumentasi proyek menjadi lebih terorganisir dan mudah dilacak.
2.Buat file nano
Nano merupakan editor teks berbasis terminal yang umum digunakan di sistem operasi Linux untuk membuat atau mengedit file teks, termasuk skrip shell. Dalam konteks ini, pengguna kemungkinan sedang membaca, menulis, atau memodifikasi isi skrip monitoring sistem yang telah dibuat sebelumnya, engan tujuan untuk menulis dan menyusun skrip shell secara langsung di terminal Linux. Penggunaan nano memudahkan proses penulisan karena tampilannya sederhana, ringan, dan tidak memerlukan antarmuka grafis. Melalui file ini, seluruh logika monitoring sistem—seperti pengecekan CPU, RAM, dan disk—dapat ditulis, disimpan, dan dijalankan dalam satu berkas. Pembuatan file ini merupakan langkah awal dalam membangun alat pemantau sistem yang otomatis dan dapat diakses dengan mudah dari terminal.
3. Header dan Inisialisasi Threshold Monitoring
Setelah membuat file shell script dilanjutkan dengan membuat kode di dalam file nano, Pada bagian ini, skrip diawali dengan shebang (#!/bin/bash), yang menunjukkan bahwa skrip akan dijalankan menggunakan Bash shell. Setelah itu, terdapat deklarasi threshold (ambang batas) untuk penggunaan CPU, RAM, dan Disk, yang digunakan sebagai parameter peringatan jika penggunaan melebihi nilai yang ditentukan (dalam hal ini 80%).
Fungsi dari bagian ini:
4.Pengecekan Penggunaan CPU
Setelah membuat header dilanjutkan untuk membuat bagian fungsi,fungsi cek_cpu() pada skrip ini digunakan untuk memantau penggunaan CPU secara otomatis dan memberikan peringatan jika penggunaannya melebihi batas yang sudah ditentukan. Fungsi dimulai dengan menampilkan pesan "== Penggunaan CPU ==" ke layar, sebagai tanda bahwa proses pengecekan sedang berjalan. Selanjutnya, penggunaan CPU dihitung dengan memanfaatkan perintah top, lalu diproses dengan grep, sed, dan awk. Intinya, skrip ini mengambil data persentase idle dari CPU dan menghitung berapa persen CPU yang sedang aktif dengan cara menguranginya dari angka 100.
Hasil perhitungan itu disimpan dalam variabel usage, lalu ditampilkan ke layar. Setelah itu, skrip membandingkan apakah nilai usage ini melebihi batas yang sudah ditetapkan dalam variabel CPU_THRESHOLD (misalnya 80%). Karena nilainya berupa desimal, digunakan kalkulator bc -l agar perbandingan bisa dilakukan dengan tepat. Jika penggunaan CPU melebihi ambang batas, maka akan muncul peringatan di terminal, dan sistem akan mengirim notifikasi pop-up yang memberitahu bahwa CPU sedang bekerja terlalu keras. Jika tidak melebihi, maka sistem akan tetap memberi notifikasi, tapi menyatakan bahwa penggunaan CPU masih normal.
Secara keseluruhan, fungsi ini membantu pengguna untuk memantau kondisi CPU secara real-time dan otomatis. Jika CPU terlalu sibuk, pengguna bisa segera mengambil tindakan, seperti menutup aplikasi yang berat atau memeriksa proses yang mencurigakan. Fungsi ini sangat berguna agar kinerja sistem tetap optimal.
5. Pengecekan Penggunaan RAM
Fungsi cek_ram() berfungsi untuk memantau seberapa besar penggunaan RAM di sistem, lalu memberikan notifikasi jika penggunaan tersebut melebihi batas yang sudah ditentukan sebelumnya. Fungsi ini dimulai dengan menampilkan pesan "== Penggunaan RAM ==" di terminal sebagai penanda bahwa pengecekan sedang dilakukan. Kemudian, perintah free -m digunakan untuk mengambil data penggunaan memori dalam satuan megabyte.
Di bagian selanjutnya, skrip menghitung persentase RAM yang sedang digunakan dengan membagi jumlah RAM yang terpakai ($3) dengan total RAM ($2), lalu hasilnya dikalikan 100 dan dibulatkan dua angka di belakang koma. Nilai tersebut disimpan ke dalam variabel usage. Setelah itu, skrip membandingkan apakah nilai usage melebihi nilai ambang batas yang sudah ditentukan di variabel RAM_THRESHOLD, menggunakan perintah bc -l agar perbandingan desimal bisa berjalan dengan akurat.
Jika penggunaan RAM melebihi batas, maka akan muncul peringatan di terminal dan sistem akan mengirimkan notifikasi yang memberitahu bahwa penggunaan RAM terlalu tinggi. Sebaliknya, jika masih dalam batas normal, pengguna juga akan mendapatkan notifikasi bahwa RAM dalam kondisi aman.
Tujuan dari fungsi ini adalah agar pengguna bisa memantau kondisi RAM secara otomatis dan real-time, tanpa harus mengeceknya secara manual. Dengan adanya peringatan, pengguna bisa segera tahu jika memori sistem mulai penuh, dan dapat mengambil langkah cepat seperti menutup aplikasi berat atau membersihkan penggunaan RAM agar sistem tetap berjalan lancar.
6. Pengecekan Penggunaan Disk
Fungsi cek_disk() bertugas untuk memantau seberapa besar penggunaan disk (penyimpanan) pada sistem dan memberikan notifikasi apabila penggunaan tersebut melebihi ambang batas (threshold) yang telah ditentukan sebelumnya.
Fungsi dimulai dengan menampilkan informasi menggunakan echo "== Penggunaan Disk ==" sebagai indikator bahwa proses pengecekan disk sedang dilakukan. Kemudian, perintah df -h / dijalankan untuk menampilkan informasi penggunaan disk pada root (/) dalam format yang mudah dibaca (dalam satuan GB atau persen). Untuk mengambil nilai persentase penggunaan, skrip menggunakan baris:
"usage=$(df / | grep / | awk '{print $5}' | sed 's/%//g')"
Baris ini akan menyaring hasil dari df /, mengambil kolom kelima yang berisi nilai persentase penggunaan disk (seperti 75%), lalu menghapus tanda persen (%) menggunakan sed, sehingga hasil akhirnya adalah angka murni yang disimpan dalam variabel usage.
Setelah mendapatkan nilai penggunaan disk, skrip mencetaknya dengan perintah echo "Disk Usage : $usage%".
Selanjutnya dilakukan pengecekan apakah nilai usage lebih besar dari nilai ambang batas DISK_THRESHOLD dengan menggunakan:
“if (( usage > DISK_THRESHOLD )); then”
Jika ya, maka sistem akan memberikan peringatan lewat terminal dan notifikasi desktop bahwa penggunaan disk telah melebihi batas. Ini dilakukan dengan perintah:
notify-send "!Disk Warning" “Penggunaan Disk saat ini ”$usage%", melebihi batas $DISK_THRESHOLD%"
Sebaliknya, jika penggunaan masih di bawah batas, maka akan ditampilkan pesan bahwa penggunaan disk masih dalam kondisi normal, disertai notifikasi desktop:
notify-send "Disk Monitoring" "Disk normal: $usage%"
Tujuan dari fungsi ini adalah agar pengguna dapat memantau kondisi ruang penyimpanan secara otomatis dan real-time, tanpa harus memeriksanya secara manual. Dengan adanya notifikasi dini, pengguna dapat segera mengambil tindakan, seperti menghapus file yang tidak diperlukan atau memindahkan data, agar sistem tidak kehabisan ruang dan tetap berjalan dengan baik.
Secara keseluruhan, fungsi cek_disk() ini sangat bermanfaat dalam memantau kondisi kapasitas penyimpanan sistem secara otomatis dan memberikan peringatan dini jika terjadi potensi kehabisan ruang disk, sehingga tindakan preventif bisa segera dilakukan.
7. Menampilkan Waktu Uptime dan Pengguna yang Login
Fungsi cek_uptime_user() berfungsi untuk menampilkan informasi mengenai durasi waktu sistem telah aktif (uptime) serta daftar pengguna yang sedang login ke dalam sistem.
Fungsi diawali dengan menampilkan teks "== Uptime dan User Login ==" sebagai indikator awal proses pengecekan. Selanjutnya, perintah uptime -p digunakan untuk memperoleh informasi waktu aktif sistem dalam format yang mudah dibaca, seperti “up 2 hours, 30 minutes”. Hasil dari perintah ini disimpan dalam variabel waktu.
Kemudian, isi dari variabel waktu ditampilkan di layar dengan perintah echo, diikuti dengan perintah who yang digunakan untuk menampilkan daftar pengguna yang sedang login saat ini.
Sebagai tambahan, fungsi ini juga mengirimkan notifikasi desktop menggunakan notify-send dengan pesan berisi informasi waktu aktif sistem.
Secara keseluruhan, fungsi ini bermanfaat untuk memantau lama waktu sistem berjalan dan mengetahui aktivitas login pengguna, yang sangat berguna dalam pengelolaan dan pemantauan sistem secara berkala
8. Pengecekan Status Layanan Penting
Fungsi cek_service() bertugas untuk memeriksa apakah layanan penting dalam sistem, seperti ssh dan cron, sedang berjalan (aktif) atau tidak. Pemeriksaan ini penting agar administrator mengetahui apakah layanan sistem berjalan sebagaimana mestinya.
Fungsi diawali dengan mencetak pesan "== Status Layanan Penting ==" sebagai indikator bahwa proses pengecekan sedang dilakukan. Selanjutnya, fungsi melakukan perulangan menggunakan for untuk memeriksa setiap layanan satu per satu.
Untuk setiap layanan, digunakan perintah:
systemctl is-active --quiet $service
Perintah ini akan memeriksa status layanan tanpa menampilkan output. Jika layanan aktif, maka skrip mencetak "$service: Aktif", dan jika tidak aktif, akan mencetak "$service: Tidak Aktif".
9. Menampilkan Ringkasan Pemeriksaan Sistem Secara Keseluruhan
Fungsi ringkasan() berfungsi untuk menampilkan hasil pemeriksaan seluruh aspek penting sistem secara menyeluruh dalam satu tampilan, atau yang biasa disebut sebagai sistem health check summary.
Fungsi ini diawali dengan mencetak header teks menggunakan echo, seperti garis pemisah dan label “SISTEM HEALTH CHECK”, agar tampilan hasil pemeriksaan terlihat rapi dan mudah dikenali.
Setelah itu, fungsi ini secara berurutan memanggil fungsi-fungsi lain yang sebelumnya telah dibuat, yaitu:
Setiap pemanggilan fungsi diselingi dengan baris kosong echo "" untuk memberikan jeda visual agar hasil lebih mudah dibaca.
Di akhir fungsi, akan ditampilkan garis penutup sebagai tanda bahwa pemeriksaan selesai. Kemudian, sistem akan mengirim notifikasi desktop melalui notify-send dengan pesan bahwa ringkasan pemeriksaan sistem berhasil ditampilkan.
Secara keseluruhan, fungsi ringkasan() ini sangat berguna sebagai alat pantau satu pintu (dashboard terminal) bagi administrator sistem untuk melihat kondisi sistem secara cepat dan efisien hanya dengan menjalankan satu perintah saja.
10. Menu Utama Interaktif
Bagian ini merupakan inti dari antarmuka pengguna dalam skrip monitoring sistem. Dengan menggunakan perulangan while true; do, skrip akan terus menampilkan menu utama hingga pengguna memilih opsi untuk keluar. Ini memberikan fleksibilitas bagi pengguna untuk melakukan pengecekan kapan saja tanpa perlu menjalankan skrip berulang kali.
Menu ditampilkan menggunakan beberapa baris echo, yang mencantumkan 7 pilihan, yaitu:
Setelah menu ditampilkan, perintah read -p digunakan untuk menerima input dari pengguna berupa angka 1 sampai 7.
Input tersebut kemudian diproses menggunakan pernyataan case, yang akan memanggil fungsi sesuai dengan opsi yang dipilih. Misalnya, jika pengguna memasukkan angka 2, maka fungsi cek_ram() akan dijalankan. Jika pengguna memilih 6, maka semua fungsi pemantauan akan dijalankan sekaligus melalui fungsi ringkasan().
Apabila pengguna memilih opsi 7, maka akan muncul pesan “Keluar dari program.” dan skrip akan berhenti dengan exit 0.
Jika input tidak sesuai dengan rentang 1-7, maka akan muncul pesan “Opsi tidak valid!” sebagai penanganan kesalahan input.
Menu ini memudahkan pengguna untuk melakukan pemantauan sistem secara manual dan terstruktur, serta memastikan bahwa semua bagian penting dari sistem dapat diperiksa dengan satu skrip interaktif.
1.Cek penggunaan CPU
penggunaan CPU”pemilihan opsi “1. Cek, Ketika pengguna memilih opsi tersebut, skrip akan mengeksekusi fungsi cek_cpu() yang berfungsi memantau penggunaan CPU saat ini.
terlihat bahwa pengguna memasukkan pilihan 1 dan mendapatkan output di terminal berupa:
Setelah pengecekan selesai, skrip juga mengirimkan notifikasi desktop menggunakan perintah notify-send. Hal inilah yang memunculkan notifikasi seperti yang terlihat pada gambar pertama, dengan isi:
Nilai 34.2% berasal dari waktu pengecekan aktual saat notify-send dijalankan, yang mungkin berbeda sedikit dari nilai terminal karena CPU usage bersifat dinamis. Fitur ini membantu pengguna agar tidak hanya melihat hasil di terminal, tetapi juga menerima peringatan visual secara langsung melalui notifikasi sistem.
2.Cek penggunaan RAM
opsi “2. Cek penggunaan RAM” pada menu utama sistem monitoring. Fungsi cek_ram() dieksekusi dan menampilkan detail penggunaan memori sistem dalam satuan megabyte (MB) melalui perintah free -m.
Hasil terminal memperlihatkan informasi sebagai berikut:
Pada saat yang sama, memperlihatkan notifikasi desktop dari notify-send dengan informasi yang sama, yaitu:
Notifikasi ini muncul otomatis untuk memberi informasi cepat kepada pengguna tanpa harus membuka terminal, sebagai bagian dari sistem pemantauan yang interaktif dan real-time.
3.Cek penggunaan Disk
opsi “3. Cek penggunaan Disk” pada menu utama sistem monitoring. Fungsi cek_disk() dieksekusi dan menampilkan detail penggunaan disk dengan memanfaatkan perintah df -h.
Hasil terminal memperlihatkan informasi sebagai berikut:
Kemudian, dihitung persentase pemakaian disk (Use%) dan hasilnya ditampilkan sebagai:
memperlihatkan notifikasi desktop dari notify-send dengan informasi yang sama, yaitu:
4. Monitoring Uptime dan User Login
opsi 4. Cek Uptime dan User Login pada menu utama sistem monitoring. Fungsi cek_uptime_user() dijalankan dan menampilkan informasi tentang lama waktu sistem aktif serta siapa saja yang sedang login.
Hasil terminal menunjukkan:
Informasi ini berguna untuk memantau stabilitas sistem dan aktivitas pengguna, khususnya dalam sistem yang memerlukan login multi-user atau penggunaan berkelanjutan.
5. Monitoring Status Layanan Penting
opsi 5. Cek status layanan (SSH, Cron) dari menu utama sistem monitoring. Fungsi cek_status_layanan() dijalankan untuk mengecek status dua layanan penting sistem menggunakan perintah seperti systemctl is-active.
Hasil monitoring menampilkan status sebagai berikut:
Informasi ini sangat berguna untuk administrator sistem, terutama dalam menjaga agar layanan krusial seperti cron (penjadwalan tugas otomatis) tetap aktif, dan layanan seperti SSH (akses jarak jauh) dikendalikan sesuai kebutuhan keamanan.
Dengan fitur ini, pengguna dapat segera mengetahui apakah layanan penting sedang berjalan atau memerlukan tindakan perbaikan, tanpa harus melakukan pengecekan manual satu per satu.
6. Monitoring Ringkasan Sistem
opsi “6. Semua info (Ringkasan)” dari menu utama sistem monitoring. Fungsi ini menggabungkan hasil dari semua sub-fungsi monitoring — CPU, RAM, Disk, Uptime, dan Status Layanan — ke dalam satu tampilan ringkas yang disebut SISTEM HEALTH CHECK.
Berikut adalah isi ringkasannya:
Penggunaan CPU
Penggunaan RAM
Penggunaan Disk
Uptime dan User Login
Status Layanan Penting
Fitur ringkasan ini sangat berguna untuk mengevaluasi kondisi sistem secara menyeluruh dalam satu tampilan, tanpa harus memeriksa setiap komponen satu per satu. Hal ini membantu efisiensi dalam pemantauan sistem harian oleh administrator.
7. Keluar Program
opsi 7. Keluar dari menu utama sistem monitoring, program telah berhenti dengan normal dan kontrol kembali diberikan ke terminal. Menu ini berfungsi sebagai opsi penghentian sistem monitoring secara eksplisit, memastikan pengguna dapat keluar kapan saja tanpa menutup terminal secara paksa.
Kesimpulan
Berdasarkan hasil implementasi dan pengujian, dapat disimpulkan bahwa shell script merupakan solusi yang efektif dan ringan dalam melakukan monitoring sistem di lingkungan Linux. Sistem ini mampu memberikan informasi penting secara real-time dan otomatis tanpa bergantung pada aplikasi tambahan yang kompleks. Adanya fitur notifikasi menjadikan program lebih interaktif dan responsif terhadap kondisi sistem. Fungsi ringkasan memberikan efisiensi bagi pengguna dalam melakukan evaluasi menyeluruh terhadap performa sistem, sedangkan menu keluar memberikan cara yang aman dan terstruktur untuk menutup program. Dengan keberhasilan proyek ini, shell script monitoring dapat menjadi alat bantu yang berguna dalam praktik administrasi sistem serta dapat dikembangkan lebih lanjut untuk kebutuhan skala besar di masa mendatang.