Masdika Loading..
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portofolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • Cara Deploy WordPress di Kubernetes Lengkap dengan SSL Let’s Encrypt
  • Panduan Lengkap Install MetalLB di Kubernetes (VPS/Bare Metal) dengan IP Publik
  • Panduan Lengkap Deploy Ingress NGINX dan Cert-Manager Kubernetes dengan HTTPS Otomatis (Let’s Encrypt)
  • Cara Install Kubernetes dengan Ansible di 2 Server (Master dan Worker)
  • Monitoring Docker Container dengan CAdvisor, Node Exporter, Prometheus, dan Grafana

Recent Comments

  1. Masdika.BIZ.ID on Cara Install Kubernetes dengan Ansible di 2 Server (Master dan Worker)
  2. wwqqs on Cara Install Kubernetes dengan Ansible di 2 Server (Master dan Worker)
  3. Rio Ardiansyah on Panduan Lengkap Redis Docker untuk WordPress
  4. Masdika.BIZ.ID on Cara Monitoring Status Disk RAID di Server Dell Menggunakan Bash Script dan PercCLI
  5. fafiki on Cara Monitoring Status Disk RAID di Server Dell Menggunakan Bash Script dan PercCLI

Archives

  • July 2025
  • June 2025

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
Blog Post

Cara Monitoring Status Disk RAID di Server Dell Menggunakan Bash Script dan PercCLI

June 20, 2025 Tutorial by Masdika.BIZ.ID
Cara Monitoring Status Disk RAID di Server Dell Menggunakan Bash Script dan PercCLI

Dalam dunia sistem administrator dan DevOps, menjaga kesehatan storage server adalah hal yang sangat penting. RAID (Redundant Array of Independent Disks) sering digunakan untuk meningkatkan performa dan redundansi data, namun tetap rentan terhadap kegagalan hardware. Oleh karena itu, monitoring kondisi RAID secara otomatis merupakan langkah preventif yang sangat dianjurkan, terutama untuk server Dell yang menggunakan controller PERC (PowerEdge RAID Controller).

Pada artikel ini, kita akan membahas bagaimana melakukan monitoring otomatis kondisi disk RAID pada server Dell dengan menggunakan perccli, Bash, dan mengirim notifikasi hasilnya ke email menggunakan msmtp. ✅

🚀 Langkah-langkah Instalasi dan Konfigurasi

1. Unduh perccli dari Situs Dell

Karena Dell tidak mengizinkan wget langsung dari URL publik, Anda perlu:

  1. Buka halaman perccli driver Dell.
  2. Unduh file PERCCLI_7.3208.0_Linux_A01.tar.gz ke komputer lokal.
  3. Upload file tersebut ke server menggunakan FTP, SCP, atau metode transfer lainnya.

2. Ekstrak dan Instalasi perccli

tar -xzf PERCCLI_7.3208.0_Linux_A01.tar.gz
cd PERCCLI_7.3208.0_Linux_A01/Linux

Instal paket alien jika belum ada:

sudo apt install alien -y

Lalu konversi RPM ke DEB dan instal:

sudo alien perccli-007.3208.0000.0000-1.noarch.rpm
sudo dpkg -i perccli_007.3208.0000.0000-2_all.deb

3. Buat Symlink untuk Akses Global

Cek lokasi biner perccli64:

sudo find / -name perccli64 2>/dev/null

Biasanya berada di:

/opt/MegaRAID/perccli/perccli64

Buat symlink agar bisa digunakan langsung:

sudo ln -s /opt/MegaRAID/perccli/perccli64 /usr/local/bin/perccli

4. Uji Coba perccli

perccli /c0 show

Jika informasi RAID muncul, maka perccli sudah siap digunakan. 💪

📜 Script Bash untuk Monitoring dan Email

Buat file /usr/local/bin/raid_monitor.sh dengan isi sebagai berikut:

#!/bin/bash

PERC_CLI="/opt/MegaRAID/perccli/perccli64"

# Pastikan perccli64 tersedia
if ! command -v "$PERC_CLI" &>/dev/null; then
  echo "Error: perccli64 not found." >&2
  exit 1
fi

# Ambil output drive
PERC_OUTPUT=$("$PERC_CLI" /c0 /eall /sall show)

# Ambil bagian Drive Information
DRIVE_INFO=$(echo "$PERC_OUTPUT" | awk '
  /Drive Information/ {found=1; next}
  found && /^-{3,}/ {dashes++; next}
  found && dashes == 2 && /^[0-9]+:[0-9]+/ {print}
  found && /^EID=/ {exit}
')

if [[ -z "$DRIVE_INFO" ]]; then
  echo "No drive info found. Check if perccli is working." >&2
  exit 1
fi

DISK_ROWS=""
HAS_PROBLEM=0

while IFS= read -r line; do
  [[ -z "$line" ]] && continue
  STATUS=$(echo "$line" | awk '{print $3}')
  EMOJI=""

  case "$STATUS" in
    Onln) EMOJI="🟢 Online" ;;
    Offln) EMOJI="🔴 Failed (Offline)"; HAS_PROBLEM=1 ;;
    Failed) EMOJI="🔴 Failed"; HAS_PROBLEM=1 ;;
    Dgrd|Pdgd) EMOJI="⚠️ Degraded"; HAS_PROBLEM=1 ;;
    Rbld) EMOJI="🔄 Rebuild"; HAS_PROBLEM=1 ;;
    Missing) EMOJI="❌ Missing"; HAS_PROBLEM=1 ;;
    UGd) EMOJI="🆕 Unconfigured Good" ;;
    JBOD) EMOJI="📦 JBOD Mode" ;;
    HSP) EMOJI="🛟 Hot Spare" ;;
    GHS) EMOJI="🛟 Global Hot Spare" ;;
    UC) EMOJI="🧩 Unconfigured Bad"; HAS_PROBLEM=1 ;;
    *) EMOJI="❓ Unknown"; HAS_PROBLEM=1 ;;
  esac

  DISK_ROWS+="<tr><td>$(echo "$line" | cut -d ' ' -f1)</td><td>$line</td><td>$EMOJI</td></tr>"
done <<< "$DRIVE_INFO"

DISK_TABLE="<table><thead><tr><th>Drive</th><th>Details</th><th>Status</th></tr></thead><tbody>$DISK_ROWS</tbody></table>"

# Ambil rebuild progress
REBUILD_PROGRESS_RAW=$("$PERC_CLI" /c0 /eall /sall show rebuild | grep -i 'Progress')
REBUILD_ROWS=""
if [[ -n "$REBUILD_PROGRESS_RAW" ]]; then
  while IFS= read -r line; do
    REBUILD_ROWS+="<tr><td colspan=3><pre>$line</pre></td></tr>"
  done <<< "$REBUILD_PROGRESS_RAW"
else
  REBUILD_ROWS+="<tr><td colspan=3>(No rebuild in progress)</td></tr>"
fi
EMAIL_REBUILD_PROGRESS="<h2>🔄 Rebuild Progress</h2><table><thead><tr><th colspan=3>Progress Details</th></tr></thead><tbody>$REBUILD_ROWS</tbody></table>"

# Ambil virtual drive status + emoji
VD_RAW=$(echo "$($PERC_CLI /c0 show)" | awk '
  /VD LIST/ {found=1}
  found && /^DG\/VD/ {next}
  found && NF && $1 ~ /^[0-9]+\/[0-9]+/ {print}
')

VD_ROWS=""
if [[ -z "$VD_RAW" ]]; then
  EMAIL_VD="<h2>💽 Virtual Drive Status</h2><p>(No virtual drives found)</p>"
  HAS_PROBLEM=1
else
  while IFS= read -r line; do
    STATUS=$(echo "$line" | awk '{print $3}')
    case "$STATUS" in
      Optl) EMOJI="🟢 Optimal" ;;
      Dgrd) EMOJI="⚠️ Degraded"; HAS_PROBLEM=1 ;;
      Rbld) EMOJI="🔄 Rebuild"; HAS_PROBLEM=1 ;;
      Fltl|Fail*) EMOJI="🔴 Failed"; HAS_PROBLEM=1 ;;
      *) EMOJI="❓ Unknown"; HAS_PROBLEM=1 ;;
    esac
    VD_ROWS+="<tr><td>$(echo "$line" | cut -d ' ' -f1)</td><td>$line</td><td>$EMOJI</td></tr>"
  done <<< "$VD_RAW"

  EMAIL_VD="<h2>💽 Virtual Drive Status</h2><table><thead><tr><th>VD</th><th>Details</th><th>Status</th></tr></thead><tbody>$VD_ROWS</tbody></table>"
fi

# Ambil event log terakhir
EMAIL_EVENTS="<h2>📝 RAID Event Log (Last 10 Critical Events)</h2>"
EVENT_LOG=$("$PERC_CLI" /c0 show events | grep -iE 'error|fail|critical|degrad|rebuild' | tail -n 10)
EVENT_ROWS=""
if [[ -n "$EVENT_LOG" ]]; then
  while IFS= read -r line; do
    EVENT_ROWS+="<tr><td colspan=3><pre>$line</pre></td></tr>"
  done <<< "$EVENT_LOG"
else
  EVENT_ROWS+="<tr><td colspan=3>(No critical events found)</td></tr>"
fi
EMAIL_EVENTS+="<table><thead><tr><th colspan=3>Event Details</th></tr></thead><tbody>$EVENT_ROWS</tbody></table>"

# Ringkasan
if [[ "$HAS_PROBLEM" -eq 1 ]]; then
  SUMMARY="<strong style=\"color:#f39c12\">⚠️ WARNING: One or more issues detected on RAID system.</strong>"
else
  SUMMARY="<strong style=\"color:#2ecc71\">✅ All RAID components are healthy.</strong>"
fi

# HTML template
date_now=$(date)
email_html=$(cat <<EOF
Subject: RAID Report - $(hostname)
To: andikaferdialvianto@gmail.com
From: RAID Monitor <masdika@gmail.com>
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
  <meta charset=\"UTF-8\">
  <style>
    body {
      background: linear-gradient(135deg, #0f1a2d, #1e2a44);
      color: #f0f0f0;
      font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif;
      padding: 20px;
      line-height: 1.6;
    }
    header {
      padding: 10px 0 20px;
      border-bottom: 1px solid #2c3e50;
    }
    h1 {
      color: #00d9ff;
      margin: 0 0 5px;
      font-size: 28px;
    }
    h2 {
      color: #00d9ff;
      margin-top: 30px;
    }
    pre {
      background-color: #1e1e2f;
      padding: 12px;
      border-radius: 6px;
      overflow-x: auto;
      font-family: 'Consolas', 'Courier New', Courier, monospace;
      font-size: 14px;
      color: #e0e0e0;
    }
    table {
      width: 100%;
      border-collapse: collapse;
      margin-bottom: 20px;
    }
    th, td {
      padding: 8px 12px;
      border: 1px solid #444;
      text-align: left;
    }
    th {
      background-color: #2d3a50;
      color: #00d9ff;
    }
    td {
      background-color: #1e2538;
    }
    footer {
      margin-top: 40px;
      padding-top: 15px;
      text-align: center;
      font-size: 13px;
      color: #888;
      border-top: 1px solid #2c3e50;
    }
  </style>
</head>
<body>
  <header>
    <h1>🖥️ RAID Report - $(hostname)</h1>
    <p><strong>🕒 Date:</strong> $date_now</p>
  </header>
  <main>
    <h2>📦 Physical Disk Status</h2>
    $DISK_TABLE
    $EMAIL_VD
    $EMAIL_REBUILD_PROGRESS
    $EMAIL_EVENTS
    <h2>🔎 Summary</h2>
    <p>$SUMMARY</p>
  </main>
  <footer>
    🔧 Powered by <a href=\"https://www.masdika.biz.id\" style=\"color:#00d9ff; text-decoration:none;\">Masdika.BIZ.ID</a>
  </footer>
</body>
</html>
EOF
)

# Kirim email
echo -e "$email_html" | msmtp masdika@gmail.com

# Simpan log lokal
echo -e "$email_html" >> /var/log/raid_monitor_$(date +%F).log

Beri hak akses eksekusi:

sudo chmod +x /usr/local/bin/raid_monitor.sh

Pastikan konfigurasi .msmtprc sudah benar dan bisa kirim email. 📧

📧 Contoh Output Email

⏰ Cronjob: Monitoring Otomatis Setiap Hari

Buka crontab dengan:

crontab -e

Tambahkan baris berikut:

0 0 * * * /usr/local/bin/raid_monitor.sh

Script akan berjalan otomatis setiap hari jam 12 malam dan mengirimkan hasil monitoring RAID ke email Anda. ⏰

🔒 Kompatibilitas

✅ Kompatibel dengan berbagai seri server Dell seperti:

  • Dell PERC H710, H730, H740, H745, H810, H330, H345, dsb.

Pastikan Anda menggunakan versi perccli yang sesuai dengan seri PERC controller Anda.

✨ Kesimpulan

Dengan menggunakan perccli, Bash script, dan msmtp, kita bisa membuat sistem monitoring otomatis RAID pada server Dell. Solusi ini ringan, efisien, dan cepat diimplementasikan. Notifikasi setiap malam akan membantu Anda mendeteksi lebih awal jika ada disk yang gagal, degraded, atau offline.

Jaga data Anda, pantau RAID Anda. 🚨

Untuk perusahaan dengan infrastruktur Dell, langkah ini sangat disarankan sebagai bagian dari kebijakan pemeliharaan preventif.

Share:
Tags: delllinuxmonitoringperccli

Post navigation

Prev
Next
3 Comments
  • Riyan 6:47 pm June 20, 2025 Reply

    Mantap mas.

  • fafiki 3:40 pm June 23, 2025 Reply

    kalo boleh tau ini di server DELL nya perlu install OS dulu kah?

    • Masdika.BIZ.ID 3:55 pm June 23, 2025 Reply

      Iya, perlu install OS dulu di server Dell nya, karena script ini dijalankan di sistem operasi (misalnya Ubuntu, Debian, CentOS, dsb)

Write a comment Cancel Reply

© 2025 www.masdika.biz.id — Semua Hak Dilindungi