From 9365276827b0b277d24959a18ec48a3eec39d6c8 Mon Sep 17 00:00:00 2001 From: Pipiasi Bogdan Date: Tue, 16 Dec 2025 06:00:17 +0100 Subject: [PATCH 1/2] ipv4 only --- install.sh | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/install.sh b/install.sh index 7c1523b..39d4aae 100644 --- a/install.sh +++ b/install.sh @@ -15,7 +15,7 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi -echo " Installing Server Monitor Agent..." +echo " Installing Server Monitor Agent (IPv4 only)..." # ============================ # CREATE DIR @@ -65,9 +65,9 @@ DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}') DISK_USED=$(df -k / | awk 'NR==2 {print $3}') # ============================ -# NETWORK (bytes) +# NETWORK (IPv4 ONLY) # ============================ -IFACE=$(ip route get 1 | awk '{print $5; exit}') +IFACE=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $5; exit}') RX_BYTES=$(cat /sys/class/net/$IFACE/statistics/rx_bytes) TX_BYTES=$(cat /sys/class/net/$IFACE/statistics/tx_bytes) @@ -83,9 +83,9 @@ PROC_ZOMBIE=$(ps axo stat | grep -c Z || true) FAILED_SERVICES=$(systemctl --failed --no-legend 2>/dev/null | wc -l) # ============================ -# NETWORK PORTS +# NETWORK PORTS (IPv4 ONLY) # ============================ -OPEN_PORTS=$(ss -lntu | tail -n +2 | wc -l) +OPEN_PORTS=$(ss -4 -lntu | tail -n +2 | wc -l) # ============================ # OS / KERNEL @@ -100,9 +100,9 @@ ARCH=$(uname -m) UPTIME=$(uptime -p) # ============================ -# SEND DATA +# SEND DATA (IPv4 FORCED) # ============================ -curl -s -X POST "$API_URL" \ +curl -4 -s -X POST "$API_URL" \ -H "Content-Type: application/json" \ -d "{ \"hostname\": \"$HOSTNAME\", @@ -139,16 +139,17 @@ EOF chmod +x "$AGENT" # ============================ -# CRON (free duplicate) +# CRON (no duplicates) # ============================ -( crontab -l 2>/dev/null | grep -v "$AGENT" || true +( + crontab -l 2>/dev/null | grep -v "$AGENT" || true echo "* * * * * $CRON_CMD" ) | crontab - # ============================ # FINAL # ============================ -echo " Server Monitor installed successfully" +echo " Server Monitor installed successfully (IPv4 only)" echo " Reporting to: $API_URL" echo " Interval: every 1 minute" echo " Test manual: $AGENT" -- 2.49.1 From c88073d42293cde190487e935820df54d3350e72 Mon Sep 17 00:00:00 2001 From: Pipiasi Bogdan Date: Tue, 16 Dec 2025 15:29:32 +0100 Subject: [PATCH 2/2] better doc --- install.sh | 96 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/install.sh b/install.sh index 39d4aae..ddbdeb4 100644 --- a/install.sh +++ b/install.sh @@ -1,107 +1,160 @@ #!/bin/bash +# Oprește execuția imediat dacă apare orice eroare set -e +# ============================ +# VARIABILE GLOBALE +# ============================ + +# Directorul unde va fi instalat agentul INSTALL_DIR="/opt/server-monitor" + +# Scriptul agentului care va rula periodic AGENT="$INSTALL_DIR/monitor-agent.sh" + +# Fișierul de configurare (permisiuni restrictive) CONFIG="$INSTALL_DIR/config.env" + +# Comanda rulată din cron (fără output) CRON_CMD="$AGENT >/dev/null 2>&1" + +# Endpoint API unde se trimit datele API_URL="https://itschool.pbcv.dev/api/report.php" # ============================ -# CHECK ROOT +# VERIFICARE PERMISIUNI ROOT # ============================ + +# Scriptul trebuie rulat ca root (cron, /opt, system info) if [[ $EUID -ne 0 ]]; then - echo " Run as root (sudo)" + echo "Run as root (sudo)" exit 1 fi -echo " Installing Server Monitor Agent (IPv4 only)..." +echo "Installing Server Monitor Agent (IPv4 only)..." # ============================ -# CREATE DIR +# CREARE DIRECTOR DE INSTALARE # ============================ + +# Creează directorul dacă nu există mkdir -p "$INSTALL_DIR" + +# Permisiuni standard pentru directoare de sistem chmod 755 "$INSTALL_DIR" # ============================ -# CONFIG FILE +# FIȘIER CONFIGURARE # ============================ + +# Stocăm variabilele configurabile separat +# (bun pentru securitate și extensibilitate) cat > "$CONFIG" < "$AGENT" <<'EOF' #!/bin/bash set -e +# Importă configurația source /opt/server-monitor/config.env +# Numele mașinii HOSTNAME=$(hostname) # ============================ # CPU # ============================ + +# Load average (1 minut) CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | xargs) + +# Număr de core-uri CPU CPU_CORES=$(nproc) # ============================ -# RAM / SWAP +# MEMORIE RAM / SWAP (MB) # ============================ + +# RAM total și utilizat RAM_TOTAL=$(free -m | awk '/Mem:/ {print $2}') RAM_USED=$(free -m | awk '/Mem:/ {print $3}') +# SWAP total și utilizat SWAP_TOTAL=$(free -m | awk '/Swap:/ {print $2}') SWAP_USED=$(free -m | awk '/Swap:/ {print $3}') # ============================ -# DISK (KB) +# DISK (KB, partiția /) # ============================ + DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}') DISK_USED=$(df -k / | awk 'NR==2 {print $3}') # ============================ -# NETWORK (IPv4 ONLY) +# NETWORK – IPv4 ONLY # ============================ + +# Detectează interfața activă IPv4 IFACE=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $5; exit}') + +# Trafic RX / TX (bytes) RX_BYTES=$(cat /sys/class/net/$IFACE/statistics/rx_bytes) TX_BYTES=$(cat /sys/class/net/$IFACE/statistics/tx_bytes) # ============================ -# PROCESSES +# PROCESE # ============================ + +# Număr total de procese PROC_TOTAL=$(ps ax --no-headers | wc -l) + +# Procese zombie (Z) PROC_ZOMBIE=$(ps axo stat | grep -c Z || true) # ============================ -# SYSTEMD +# SYSTEMD SERVICES # ============================ + +# Servicii systemd eșuate FAILED_SERVICES=$(systemctl --failed --no-legend 2>/dev/null | wc -l) # ============================ -# NETWORK PORTS (IPv4 ONLY) +# PORTURI DESCHISE (IPv4) # ============================ + +# Porturi ascultate TCP/UDP IPv4 OPEN_PORTS=$(ss -4 -lntu | tail -n +2 | wc -l) # ============================ -# OS / KERNEL +# OS / KERNEL / ARHITECTURĂ # ============================ + +# Nume OS (fallback dacă lsb_release nu există) OS_NAME=$(lsb_release -ds 2>/dev/null || grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"') + KERNEL=$(uname -r) ARCH=$(uname -m) # ============================ # UPTIME # ============================ + UPTIME=$(uptime -p) # ============================ -# SEND DATA (IPv4 FORCED) +# TRIMITERE DATE CĂTRE API +# FORȚAT IPv4 (-4) # ============================ + curl -4 -s -X POST "$API_URL" \ -H "Content-Type: application/json" \ -d "{ @@ -136,20 +189,25 @@ curl -4 -s -X POST "$API_URL" \ }" EOF +# Permite execuția agentului chmod +x "$AGENT" # ============================ -# CRON (no duplicates) +# CRON JOB (FĂRĂ DUBLURI) # ============================ + ( + # Păstrează ce există deja, elimină dublurile crontab -l 2>/dev/null | grep -v "$AGENT" || true + # Rulează agentul la fiecare minut echo "* * * * * $CRON_CMD" ) | crontab - # ============================ # FINAL # ============================ -echo " Server Monitor installed successfully (IPv4 only)" -echo " Reporting to: $API_URL" -echo " Interval: every 1 minute" -echo " Test manual: $AGENT" + +echo "Server Monitor installed successfully (IPv4 only)" +echo "Reporting to: $API_URL" +echo "Interval: every 1 minute" +echo "Manual test: $AGENT" -- 2.49.1